// 地图初始化,数据加载功能
|
import mapData from './mapData.js';
|
import store from './../../store/store.js';
|
import mapLayer from './mapLayer.js';
|
import mapMenu from './mapMenu.js';
|
import { showToast } from 'vant';
|
const mapView = {
|
checkentity: null,
|
init() {
|
window.earthCtrl = new SmartEarth.EarthCtrl('sdkContainer', {
|
// 隐藏默认底图
|
defaultImagery: false,
|
// 隐藏logo
|
printLog: false
|
// sceneMode: SmartEarth.Cesium.SceneMode.SCENE2D
|
});
|
window.Cesium = SmartEarth.Cesium;
|
window.Viewer = earthCtrl.viewer;
|
Viewer.scene.globe.baseColor = Cesium.Color.fromCssColorString('#A9A9A9'); //设置地球颜色
|
// 设置场景显示高度
|
Viewer.scene.screenSpaceCameraController.maximumZoomDistance = 30000;
|
// 清空默认底图
|
Viewer.imageryLayers.removeAll();
|
|
// Viewer.scene.screenSpaceCameraController.enableRotate = true; //禁止旋转
|
// 开启深度检测,默认是关闭的
|
// Viewer.scene.globe.depthTestAgainstTerrain = true;
|
//范围限制
|
earthCtrl.camera.createRectanglelbj(
|
{
|
id: 0,
|
rectangle: {
|
min: [117.18456811131752, 38.99131117296185],
|
max: [117.32249678417742, 39.22350574645287]
|
}
|
},
|
function (data) {
|
// 禁止倾斜相机
|
Viewer.scene.screenSpaceCameraController.enableTilt = false;
|
}
|
);
|
// 场景初始化底图
|
// earthCtrl.factory.createImageryLayer({
|
// sourceType: 'wmts',
|
// url: config.mapServer.DTUrl,
|
// tileMatrixSetID: 'EPSG:4326',
|
// tilingScheme: new SmartEarth.Cesium.GeographicTilingScheme()
|
// });
|
// 添加影像/适量图
|
// this.addImageLayers();
|
store.state.setLoadFlag = true;
|
|
// 数据请求初始化
|
mapData.init();
|
// var coffeeBeltRectangle = Cesium.Rectangle.fromDegrees(config.extend.minx, config.extend.miny, config.extend.maxx, config.extend.maxy);
|
// Viewer.scene.globe.cartographicLimitRectangle = coffeeBeltRectangle;
|
// 添加鼠标点击事件
|
this.addHandlerClick();
|
// 添加场景移动事件
|
// this.addCameraChange();
|
},
|
addCameraChange() {
|
const that = this;
|
Viewer.camera.changed.addEventListener(() => {
|
that.refreshViewRectangle();
|
});
|
Viewer.camera.moveStart.addEventListener(() => {
|
that.refreshViewRectangle();
|
});
|
Viewer.camera.moveEnd.addEventListener(() => {
|
that.refreshViewRectangle();
|
});
|
},
|
refreshViewRectangle() {
|
let params = {};
|
const extent = config.extend;
|
let extend = Viewer.camera.computeViewRectangle();
|
|
// 三维开发模式
|
if (extend) {
|
params.maxx = Cesium.Math.toDegrees(extend.east);
|
params.maxy = Cesium.Math.toDegrees(extend.north);
|
|
params.minx = Cesium.Math.toDegrees(extend.west);
|
params.miny = Cesium.Math.toDegrees(extend.south);
|
} else {
|
//二维开发模式
|
let canvas = Viewer.scene.canvas;
|
let upperLeft = new Cesium.Cartesian2(0, 0); //canvas左上角坐标转2d坐标
|
let lowerRight = new Cesium.Cartesian2(canvas.clientWidth, canvas.clientHeight); //canvas右下角坐标转2d坐标
|
|
let ellipsoid = Viewer.scene.globe.ellipsoid;
|
let upperLeft3 = Viewer.camera.pickEllipsoid(upperLeft, ellipsoid); //2D转3D世界坐标
|
|
let lowerRight3 = Viewer.camera.pickEllipsoid(lowerRight, ellipsoid); //2D转3D世界坐标
|
|
let upperLeftCartographic = Viewer.scene.globe.ellipsoid.cartesianToCartographic(upperLeft3); //3D世界坐标转弧度
|
let lowerRightCartographic = Viewer.scene.globe.ellipsoid.cartesianToCartographic(lowerRight3); //3D世界坐标转弧度
|
|
let minx = Cesium.Math.toDegrees(upperLeftCartographic.longitude); //弧度转经纬度
|
let maxx = Cesium.Math.toDegrees(lowerRightCartographic.longitude); //弧度转经纬度
|
|
let miny = Cesium.Math.toDegrees(lowerRightCartographic.latitude); //弧度转经纬度
|
let maxy = Cesium.Math.toDegrees(upperLeftCartographic.latitude); //弧度转经纬度
|
params.minx = minx;
|
params.maxx = maxx;
|
params.miny = miny;
|
params.maxy = maxy;
|
}
|
},
|
addImageLayers() {
|
// var mapUrl = config.mapServer;
|
// earthCtrl.factory.createImageryLayer({
|
// sourceType: 'wmts',
|
// url: mapUrl.SLUrl,
|
// tileMatrixSetID: 'EPSG:4326',
|
// tilingScheme: new SmartEarth.Cesium.GeographicTilingScheme()
|
// });
|
// earthCtrl.factory.createImageryLayer({
|
// sourceType: 'wmts',
|
// url: mapUrl.YXUrl,
|
// tileMatrixSetID: 'EPSG:4326',
|
// tilingScheme: new SmartEarth.Cesium.GeographicTilingScheme()
|
// });
|
// Viewer.imageryLayers._layers[0].show = false;
|
// Viewer.imageryLayers._layers[1].show = false;
|
},
|
addHandlerClick() {
|
const handler = new Cesium.ScreenSpaceEventHandler(Viewer.scene.canvas);
|
// 处理用户输入事件
|
handler.setInputAction(event => {
|
var pick = Viewer.scene.pick(event.position); //拾取鼠标所在的entity
|
if (Cesium.defined(pick)) {
|
if (!pick.id._properties) return;
|
const obj = mapData.listData.filter(res => {
|
if (res.attributes.FID == pick.id._properties.FID) {
|
return res;
|
}
|
});
|
if (obj.length > 0) {
|
var val_data = obj[0];
|
store.state.setCellItem = val_data;
|
const res = val_data.geometry;
|
const judgeMentData = mapData.setJudgmentData(res);
|
if (judgeMentData) {
|
mapData.setMqpJump({
|
x: res.coordinates[0],
|
y: res.coordinates[1]
|
});
|
mapLayer.getlocationEntity(val_data);
|
} else {
|
showToast('该资产缺少坐标!');
|
}
|
mapMenu.setMenuChange('details');
|
}
|
}
|
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
|
}
|
};
|
export default mapView;
|