const mapSplit = {
|
levelArray: [
|
0, 40000000, 20000000, 10000000, 5000000, 2000000, 1000000, 500000,
|
250000, 200000, 100000, 50000, 17000, 9000, 5000, 2000, 1000, 500, 200,
|
100, 50, 25, 10, 0,
|
],
|
isSplitFlag: 0,
|
init() {
|
setTimeout(() => {
|
window.map.updateSize();
|
this.showSplitMap();
|
this.isSplitFlag = 1;
|
this.skdToOl();
|
}, 500)
|
|
|
},
|
skdToOl() {
|
var position = window.Viewer.camera.position
|
|
var ellipsoid = window.Viewer.scene.globe.ellipsoid;
|
var cartographic = ellipsoid.cartesianToCartographic(position)
|
var lat = Cesium.Math.toDegrees(cartographic.latitude)
|
var lng = Cesium.Math.toDegrees(cartographic.longitude)
|
var level = this.getLevel(cartographic.height)
|
console.log(lng, lat, level)
|
window.map.getView().setCenter([parseFloat(lng), parseFloat(lat)])
|
window.map.getView().setZoom(level)
|
},
|
getLevel(height) {
|
var levelArray = this.levelArray;
|
for (var i = 1, len = levelArray.length; i < len - 1; i++) {
|
if (height >= (levelArray[i] + levelArray[i + 1]) / 2) {
|
return i
|
}
|
}
|
return levelArray.length - 1
|
},
|
getHeight(level) {
|
var levelArray = this.levelArray;
|
if (level > 0 && level < 23) {
|
return levelArray[level]
|
}
|
return levelArray[levelArray.length - 1]
|
},
|
showSplitMap() {
|
var that = this;
|
$("#mapView")
|
.off()
|
.on("mousemove", function () {
|
if (that.isSplitFlag == 1) {
|
window.Viewer.camera.changed.addEventListener(that.skdToOl())
|
}
|
})
|
.on("mouseout", function () {
|
if (that.isSplitFlag == 1) {
|
window.Viewer.camera.changed.removeEventListener(that.skdToOl())
|
}
|
});
|
let mapZoomAndMove = function (event) {
|
var position = window.map.getView().getCenter()
|
|
|
var pos = position
|
var level = that.getHeight(parseInt(window.map.getView().getZoom()))
|
|
window.Viewer.camera.setView({
|
destination: Cesium.Cartesian3.fromDegrees(pos[0], pos[1], level),
|
})
|
}
|
$("#mapOl")
|
.off()
|
.on("mousemove", function () {
|
if (that.isSplitFlag == 1) {
|
that.olzoomAndMove(mapZoomAndMove)
|
}
|
})
|
.on("mouseout", function () {
|
if (that.isSplitFlag == 1) {
|
that.clearolzoomAndMove()
|
}
|
})
|
}, clearolzoomAndMove() {
|
let registerOnZoomArr = window.map.get("registerOnZoom")
|
if (registerOnZoomArr && registerOnZoomArr.length > 0) {
|
for (let i = 0; i < registerOnZoomArr.length; i++) {
|
window.map.un("moveend", registerOnZoomArr[i])
|
}
|
}
|
}, olzoomAndMove(eventListen, notListenMove) {
|
// 记录地图缩放,用于判断拖动
|
window.map.lastZoom =
|
window.map.lastZoom || window.map.getView().getZoom()
|
// 地图缩放事件
|
let registerOnZoom = function (e) {
|
// 不监听地图拖动事件
|
if (notListenMove) {
|
if (window.map.lastZoom != window.map.getView().getZoom()) {
|
eventListen && eventListen(e)
|
}
|
} else {
|
eventListen && eventListen(e)
|
}
|
window.map.lastZoom = window.map.getView().getZoom()
|
}
|
// 保存缩放和拖动事件对象,用于后期移除
|
let registerOnZoomArr = map.get("registerOnZoom") || []
|
|
registerOnZoomArr.push(registerOnZoom)
|
|
// 使用地图 set 方法保存事件对象
|
window.map.set("registerOnZoom", registerOnZoomArr)
|
|
// 监听地图移动结束事件
|
window.map.on("moveend", registerOnZoom)
|
|
return eventListen
|
},
|
}
|
export default mapSplit;
|