ArcGIS的面积出现负值解决办法
在地图做面积测量时竟然出现了负值,查阅资料后发现:
ArcGIS默认顺时针图形为正,手工画polygon的时候不管怎么画结果都是顺时针的。所以一般负值的出现是转换过程出现问题,polygon是由ring组成的,ring则是有更小的segement(line,circularArc,ellipticalArc,beziercurve)构成,所具有方向性。
解决
使用 const simplifiedPolygon: any = geometryEngine.simplify(geometry)
转换一下,再次进行计算面积,代码如下:
// 计算所选区域面积
const getAreaOutput = (view: any, geometry: any) => {
let area = 0
//根据参数,动态计算长度
if (
view.spatialReference.wkid == '3857' ||
view.spatialReference.wkid == '102100' ||
view.spatialReference.wkid == '4326'
) {
//在web麦卡托投影和WGS84坐标系下的计算方法
area = geometryEngine.geodesicArea(geometry, 'square-meters') //geodesicArea适用坐标系见官网API
if (area < 0) {
// simplify the polygon if needed and calculate the area again
const simplifiedPolygon: any = geometryEngine.simplify(geometry)
if (simplifiedPolygon) {
area = geometryEngine.geodesicArea(simplifiedPolygon, 'square-meters')
}
}
} else {
//在其他投影坐标系下的计算方法
area = geometryEngine.planarArea(geometry, 'square-meters') //planarArea适用于平面投影坐标系
}
return area
}