MineMap 三维量算业务规范。用于面积、贴地面积、辅助测量与规划校核。
const area = minemap.Measurement3D.area([
new minemap.Math.Vector3(116.39, 39.9, 0),
new minemap.Math.Vector3(116.4, 39.9, 0),
new minemap.Math.Vector3(116.4, 39.91, 0),
new minemap.Math.Vector3(116.39, 39.91, 0)
]);
console.log(area);
Measurement3D 是静态工具类,不是可直接挂图的对象。真正的业务落地通常要分成两层:
Measurement3D.area()Measurement3D.distance()Measurement3D.height()Measurement3D.clampedArea()Measurement3D.clampedDistance()demo 已经完整体现了这个分层思路。
area(positions):空间面积distance(positions):空间距离height(startPoint, endPoint):三角高差,返回水平距、垂距、斜距clampedArea(positions, map, mostDetailed = false, sampleRatio = 400, minArea = 400):贴地面积clampedDistance(positions, map, mostDetailed = false, minDistance = 30):贴地距离对应 demo:demo/html/Measurement3D.html
这个 demo 给出了最标准的交互约束:
同时它还说明一个重要实践:
Measurement3D 本身只负责算值Primitive + PolygonGeometry + PolylineGeometry 自己画辅助图形对应 demo:demo/html/ClampedMeasurement.html
这个 demo 的要点比空间量算更重要:
adaptTerrainclampedArea() / clampedDistance()area / distance / heightclampedArea / clampedDistancearea / distance / height 主要吃 Vector3Vector2 | Vector3不要把 screen point、LngLat 对象、普通数组直接混进去。
源码里已有明确保护:
因此大范围复杂区域必须先裁剪。
height() 不是“地形高程查询”它算的是两个三维点之间的三角测量结果,不要和 DEM 高程读取混淆。
结果不可靠,甚至直接报错。贴地量算前必须先确认 terrain 可用。
会遇到采样点暴涨。正确做法是:
Measurement3D 不管理交互状态,也不负责界面提示。业务层必须自己实现开始、撤销、结束、重置。
demo/html/Measurement3D.htmldemo/html/ClampedMeasurement.htmlminemap-terrain-and-analysisminemap-business-admin-division