/**
* @description 画扇形(从正北开始顺时针旋转)
* @param {Number} d1 扇形第一个边的角度
* @param {Number} d2 扇形第二个边的角度
* @param {Number} lng 中心点经度
* @param {Number} lat 中心点纬度
* @param {Number} zcjl 扇形半径
*/
drawSector(params) {
console.log(params);
var d1 = params.d1;
var d2 = params.d2;
var list = [Number(params.lng), Number(params.lat)];
for (let i = d1; i < d2; i += 1) {
var point = this.calculatingTargetPoints(
params.lng,
params.lat,
0,
(90 - i) * (Math.PI / 180),
params.zcjl
);
list.push(point[0]);
list.push(point[1]);
}
list.push(Number(params.lng));
list.push(Number(params.lat));
if (!this.sectorEntity[params.id]) {
this.viewer.entities.remove(this.sectorEntity[params.id]);
}
var box = this.viewer.entities.add({
polygon: {
hierarchy: Cesium.Cartesian3.fromDegreesArray(list),
material: Cesium.Color.RED.withAlpha(0.4),
},
});
this.sectorEntity[params.id] = box;
},
/**
* @description 画扇形
* @param {int} lon 中心点经度
* @param {*} lat 中心点纬度
* @param {*} height 中心点高度
* @param {*} direction 方向
* @param {*} radius 半径
*/
calculatingTargetPoints(lon, lat, height, direction, radius) {
//根据位置,方位,距离求经纬度
var _this = this;
var viewPoint = Cesium.Cartesian3.fromDegrees(lon, lat, height);
var webMercatorProjection = new Cesium.WebMercatorProjection(
this.viewer.scene.globe.ellipsoid
);
var viewPointWebMercator = webMercatorProjection.project(
Cesium.Cartographic.fromCartesian(viewPoint)
);
var toPoint = new Cesium.Cartesian3(
viewPointWebMercator.x + radius * Math.cos(direction),
viewPointWebMercator.y + radius * Math.sin(direction),
0
);
toPoint = webMercatorProjection.unproject(toPoint);
toPoint = Cesium.Cartographic.toCartesian(toPoint.clone());
var cartographic = Cesium.Cartographic.fromCartesian(toPoint);
var point = [
Cesium.Math.toDegrees(cartographic.longitude),
Cesium.Math.toDegrees(cartographic.latitude),
];
return point;
},
然后调用即可
let params={
d1:0,
d2 :45,
lng :35,
lat:35,
zcjl:80000
}
this.drawSector(params)