1.获取区域坐标数组
2.计算最大最小经纬度
3.计算两点距离
4.计算两点的中点
3.4.所用方法指路另一篇博客(爱编程的小透明)
代码如下
/**根据经纬度画矩形区域 */
const lonAndLatToDrawRectangleInfo = (obj: any) => {
let data: any = JSON.parse(obj);
let positions: any = [];
data.map((point: any) => {
positions.push([Number(point.lng), Number(point.lat)]);
});
const { xmin, ymin, xmax, ymax } = getRect(positions);
/**面实例对象 */
rectangleId.value = viewer.value.entities.add({
name: "rectangle",
id: "rectangle",
rectangle: {
coordinates: new Cesium.Rectangle(
Cesium.Math.toRadians(xmin),
Cesium.Math.toRadians(ymin),
Cesium.Math.toRadians(xmax),
Cesium.Math.toRadians(ymax)
),
fill: false,
outline: true,
outlineColor: config.borderColor,
zIndex: 1,
},
});
width.value = viewer.value.entities.add({
position: measureCenterByCartesian(
Cesium.Cartesian3.fromDegrees(Number(data[0].lng), Number(data[0].lat)),
Cesium.Cartesian3.fromDegrees(Number(data[1].lng), Number(data[1].lat))
),
name: "text",
label: {
show: true,
text: getTwoPointDistance(
[Number(data[0].lng), Number(data[0].lat)],
[Number(data[1].lng), Number(data[1].lat)]
),
font: "18px sans-serif",
fillColor: Cesium.Color.GOLD,
style: Cesium.LabelStyle.FILL_AND_OUTLINE,
outlineWidth: 2,
verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
},
});
height.value = viewer.value.entities.add({
position: measureCenterByCartesian(
Cesium.Cartesian3.fromDegrees(Number(data[0].lng), Number(data[0].lat)),
Cesium.Cartesian3.fromDegrees(Number(data[3].lng), Number(data[3].lat))
),
name: "text",
label: {
show: true,
text: getTwoPointDistance(
[Number(data[0].lng), Number(data[0].lat)],
[Number(data[3].lng), Number(data[3].lat)]
),
font: "18px sans-serif",
fillColor: Cesium.Color.GOLD,
style: Cesium.LabelStyle.FILL_AND_OUTLINE,
outlineWidth: 2,
verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
},
});
}
欢迎补充,一起进步。