使用UTM坐标的精确区域计算方法

时间:2012-06-05 21:41:24

标签: java polygon area utm

我有一个lat / long坐标列表,我想用它来计算多边形的面积。在很多情况下我可以得到确切的结果,但是多边形越大,出错的可能性就越大。

我首先使用http://www.ibm.com/developerworks/java/library/j-coordconvert/

将坐标转换为UTM

从那里开始,我使用http://www.mathopenref.com/coordpolygonarea2.html来计算UTM坐标的面积。

private Double polygonArea(int[] x, int[] y) {      
    Double area = 0.0;
    int j = x.length-1;
    for(int i = 0; i < x.length; i++) {
        area = area + (x[j]+x[i]) * (y[j]-y[i]);
        j = i;
    }
    area = area/2;
    if (area < 0)
        area = area * -1;
    return area;
}

我将这些区域与我放入Microsoft SQL Server和ArcGIS的相同坐标进行比较,但我似乎无法始终将它们完全匹配。有谁知道比这更精确的方法?

提前致谢。

编辑1

感谢您的评论。 以下是我获取区域的代码(CoordinateConversion代码在IBM链接上面列出):

private Map<Integer, GeoPoint> vertices;

private Double getArea() {
    List<Integer> xpoints = new ArrayList<Integer>();
    List<Integer> ypoints = new ArrayList<Integer>();
    CoordinateConversion cc = new CoordinateConversion();
    for(Entry<Integer, GeoPoint> itm : vertices.entrySet()) {
        GeoPoint pnt = itm.getValue();
        String temp = cc.latLon2MGRUTM(pnt.getLatitudeE6()/1E6, pnt.getLongitudeE6()/1E6);
        // Example return from CC: 02CNR0634657742
        String easting = temp.substring(5, 10);
        String northing = temp.substring(10, 15);
        xpoints.add(Integer.parseInt(easting));
        ypoints.add(Integer.parseInt(northing));
    }

    int[] x = toIntArray(xpoints);
    int[] y = toIntArray(ypoints); 
    return polygonArea(x,y);
}

以下是点的示例列表:

44.80016800 -106.40808100
44.80016800 -106.72123800
44.75016800 -106.72123800
44.75016800 -106.80123800
44.56699100 -106.80123800

在ArcGIS和MS SQL服务器中,我获得90847.0英亩。 使用上面的代码我得到90817.4英亩。

另一个示例点列表:

45.78412600 -108.51506700
45.78402600 -108.67972100
45.75512200 -108.67949400
45.75512200 -108.69962300
45.69795400 -108.69929400

在ArcGIS和MS SQL服务器中,我获得15732.9英亩。 使用上面的代码我得到15731.9英亩。

2 个答案:

答案 0 :(得分:0)

您使用的区域公式仅在平面上有效。随着多边形变大,地球的曲率开始产生影响,使得面积大于使用此公式计算的面积。您需要找到适用于球体表面的公式。

Google搜索“球面上多边形区域”的简单搜索引发了一系列点击,其中最有趣的是Wolfram MathWorld Spherical Polygon

答案 1 :(得分:0)

事实证明,UTM无法获得我所寻求的极端准确性。将投影系统切换到像Albers或State Plane更精确的方式,可以提供更精确的计算。