ArcGIS的面积出现负值解决办法

发布时间 2023-09-19 14:03:48作者: ZerlinM

在地图做面积测量时竟然出现了负值,查阅资料后发现:

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
}