import axios from "axios"; const layerManage = { addLayer(res) { if (!res.urls) return; switch (res.sourceType) { case "GEOJSON": this.addGeoJsonLayer(res); break; case "WMTS": this.addWMTSLayer(res); break; } }, removeLayer(res) { if (!res.urls) return; switch (res.sourceType) { case "GEOJSON": this.removeGeoJsonLayer(res); break; case "WMTS": this.removeWMTSLayer(res); break; } }, removeWMTSLayer() {}, addWMTSLayer(res) { var baseMapLayer = Viewer.imageryLayers.addImageryProvider( new Cesium.UrlTemplateImageryProvider({ url: res.urls + "/{z}/{x}/{y}.png", }) ); baseMapLayer.id = res.id; baseMapLayer.name = res.name; }, removeGeoJsonLayer(res) { var dataSource = Viewer.dataSources._dataSources; for (var i = 0; i < dataSource.length; i++) { if (dataSource[i].name == res.name) { Viewer.dataSources.remove(dataSource[i]); i--; } } }, addGeoJsonLayer(res) { switch (res.type) { case "POLYGON": this.addGeoJsonPolygonLayer(res); break; case "POINT": this.addGeoJsonPointerLayer(res); break; } }, addGeoJsonPointerLayer(res) { var url = config.layerUrls + res.urls; var img = config.layerUrls + res.billboard; axios.get(url).then((data) => { var val_data = data.data; var filter; if (res.filter) { filter = val_data.features.filter((val) => { if (val.properties.name === res.name) { return val; } }); } if (filter) { val_data.features = filter; } Cesium.GeoJsonDataSource.load(url).then((dataSource) => { dataSource.name = res.name; Viewer.dataSources.add(dataSource); const entities = dataSource.entities.values; // 设置聚合参数 dataSource.clustering.enabled = true; dataSource.clustering.pixelRange = 20; dataSource.clustering.minimumClusterSize = 2; for (var i = 0; i < entities.length; i++) { const entity = entities[i]; entity.billboard = { image: img, // color: Cesium.Color.AQUA, width: 32, height: 32, pixelOffset: new Cesium.Cartesian3(0, -40, 0), }; } // 添加监听函数 dataSource.clustering.clusterEvent.addEventListener(function ( clusteredEntities, cluster ) { // 关闭自带的显示聚合数量的标签 cluster.label.show = false; cluster.billboard.show = false; cluster.billboard.verticalOrigin = Cesium.VerticalOrigin.BOTTOM; }); }); }); }, addGeoJsonPolygonLayer(res) { var url = config.layerUrls + res.urls; axios.get(url).then((data) => { var feature = data.data.features.filter((val) => { if (val.properties.TE_DESC === res.name) { return val; } }); data.data.features = feature; var obj = Cesium.GeoJsonDataSource.load( data.data, //要加载的 url、GeoJSON 对象或 TopoJSON 对象。 { stroke: new Cesium.Color(0, 1, 0, 1), //折线和多边形轮廓的默认颜色。 fill: new Cesium.Color(0, 0, 0, 0), // 红色, //多边形内部的默认颜色。 strokeWidth: 3, //折线和多边形轮廓的默认宽度。 } ); obj.then((dataSource) => { dataSource.name = res.name; Viewer.dataSources.add(dataSource); var entities = dataSource.entities.values; for (var i in entities) { var entity = entities[i]; entity.polygon.heightReference = Cesium.HeightReference.CLAMP_TO_GROUND; entity.polygon.perPositionHeight = false; var polyPositions = dataSource.entities.values[ i ].polygon.hierarchy.getValue(Cesium.JulianDate.now()).positions; var polyCenter = Cesium.BoundingSphere.fromPoints(polyPositions).center; //中心点 polyCenter = Cesium.Ellipsoid.WGS84.scaleToGeodeticSurface(polyCenter); entity.position = polyCenter; entity.polygon.outlineWidth = 3; entity.polygon.fill = false; entity.polygon.outline = false; entity.polygon.outlineColor = Cesium.Color.RED; entity.polyline = { positions: entity.polygon.hierarchy._value.positions, width: entity.polygon.outlineWidth, material: new Cesium.Color(0, 1, 0, 1), clampToGround: true, }; entity.label = { // position: polyCenter, text: res.name, color: new Cesium.Color(1, 1, 1, 1), font: "normal 32px MicroSoft YaHei", showBackground: true, scale: 0.5, verticalOrigin: Cesium.VerticalOrigin.BOTTOM, horizontalOrigin: Cesium.HorizontalOrigin.CENTER, heightReference: Cesium.HeightReference.CLAMP_TO_GROUND, eyeOffset: new Cesium.Cartesian3(0, 0, -5000), distanceDisplayCondition: new Cesium.DistanceDisplayCondition( 0, 300000 ), }; } Viewer.scene.postProcessStages.fxaa.enabled = false; //去锯齿 是文字清晰 }); }); }, }; export default layerManage;