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;
|