前言
上节中,介绍了GIS地图中路线、图形的绘制。在路线绘制完成后,有事需要计算路线的长度或区域的面积,本章节介绍如何进行计算。
一、路径距离测量
- 绘制路线
- 根据路线中所有的点位,来计算路线的长度
calculateTotalDistance(positions: any[]) {
let total = 0;
for (let i = 0; i < positions.length - 1; i++) {
total += Cesium.Cartesian3.distance(positions[i], positions[i + 1]);
}
return total;
}
二、 区域面积测量
- 绘制不规则图形
- 根据选择点的坐标,计算区域面积
// 计算平面多边形面积(适用于小范围区域)
calculatePlanarArea(positions: any) {
let area = 0;
const n = positions.length;
for (let i = 0; i < n; i++) {
const j = (i + 1) % n;
area += positions[i].x * positions[j].y;
area -= positions[j].x * positions[i].y;
}
return Math.abs(area) / 2;
}
- 根据已选择点的坐标,计算区域中心点的坐标
// 中心点
const center = Cesium.BoundingSphere.fromPoints(this.polygonPoints).center;
const cartographic = Cesium.Cartographic.fromCartesian(
center,
viewer.scene.globe.ellipsoid,
new Cesium.Cartographic(),
);
const lat = Cesium.Math.toDegrees(cartographic.latitude);
const lng = Cesium.Math.toDegrees(cartographic.longitude);
const position = Cesium.Cartesian3.fromDegrees(lng, lat, this.maxHeight);
// 可以将面积的数据,显示在中心点上