Cesium实战系列文章总目录
:
传送门
1. 实现效果
2. 实现方法
2.1 实现思路
(1)获取位置坐标数据
使用jQuery
读取geojson
数据中的研究区域的位置坐标数据,这里使用武汉市面状geojson数据(单个面)。
(2)构造遮罩多边形
使用cesium的PolygonHierarchy
类(API:传送门)进行设置。
首先需要设置一个较大的多边形作为遮罩区域
,然后将读取的研究区域位置
坐标作为holes
的参数即可。
2.2 具体代码
核心实现代码如下:
// 使用jQuery加载Geojson数据(只有单个面)
$.get('./data/wh/wh.geojson').then((data) => {
let features = data.features;
let positionArray = [];
// 获取区域的经纬度坐标
for (let i = 0; i < features[0].geometry.coordinates[0].length; i++) {
let coor = features[0].geometry.coordinates[0][i];
positionArray.push(coor[0]);
positionArray.push(coor[1]);
}
// 遮罩
let polygonEntity = new Cesium.Entity({
polygon: {
hierarchy: {
// 添加外部区域为1/4半圆,设置为180会报错
positions: Cesium.Cartesian3.fromDegreesArray([0, 0, 0, 90, 179, 90, 179, 0]),
// 中心挖空的“洞”
holes: [{
positions: Cesium.Cartesian3.fromDegreesArray(positionArray)
}]
},
material: new Cesium.Color(15 / 255.0, 38 / 255.0, 84 / 255.0, 0.7)
}
})
// 边界线
let lineEntity = new Cesium.Entity({
polyline: {
positions: Cesium.Cartesian3.fromDegreesArray(positionArray),
width: 5,
material: Cesium.Color.YELLOW,
}
})
viewer.entities.add(polygonEntity);
viewer.entities.add(lineEntity);
viewer.flyTo(lineEntity);
});