2012-06-05 43 views
4

我有一個我想用來計算多邊形面積的緯度/經度座標列表。在許多情況下,我可以得到確切的結果,但多邊形越大,出錯的可能性就越大。使用UTM座標計算面積的確切方法

我第一次轉換座標以UTM使用http://www.ibm.com/developerworks/java/library/j-coordconvert/

從那裏,我使用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.8
44.56699100 -106.8

在ArcGIS和MS SQL服務器I獲得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英畝。

+0

隨着世界高度的波動,多邊形的面積會發生變化嗎?像堪薩斯這樣的地方,公頃要比瑞士這樣的地方少一些「面積」。 – sarnold

+0

我認爲這會影響它,但這是我沒有嘗試過的。我嘗試過的最大海拔差異是在300米到1200米之間,我已經收到了兩者的確切信息,而且兩個海拔都沒有確切的信息。這確實帶來了一個很好的觀點,因爲如果我能找到一個韻律或理由,我會看到數以千計的這些多邊形。 – Behr

+0

你可以上傳下列表格的例子嗎? 1.一組座標(或幾個)。 2.所有你執行的代碼來計算一個區域。 3.執行代碼時獲得的區域 4.您從SQL Server和ArcGIS獲得的區域。 我無法訪問其中任何一個,但我仍然想嘗試解決這個問題。 –

回答

0

事實證明,UTM只是沒有能夠獲得極高的精度我在尋找。將投影系統切換到更精確的像Albers或State Plane提供更準確的計算。

0

您正在使用的面積公式僅在平面上有效。隨着多邊形變大,地球曲率開始產生影響,使得該區域大於您用此公式計算的區域。你需要找到一個適用於球體表面的公式。

一個簡單的谷歌搜索「球面多邊形的面積」變成了一堆命中,其中最有趣的是Wolfram MathWorld Spherical Polygon

+0

我在公佈的鏈接中使用公式,似乎沒有得到期望的結果。我會仔細檢查我的代碼。 – Behr