2012-06-05 5 views
4

다각형의 면적을 계산하는 데 사용하려는 위도/경도 좌표 목록이 있습니다. 많은 경우 정확한 결과를 얻을 수 있지만 폴리곤이 커질수록 오류가 발생할 확률이 높아집니다.UTM 좌표를 사용한 면적 계산의 정확한 방법

하면 I가 제 I은 UTM 좌표의 면적을 계산하는 http://www.mathopenref.com/coordpolygonarea2.html를 사용하고, 거기에서

http://www.ibm.com/developerworks/java/library/j-coordconvert/

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; 
} 

은 내가 마이크로 소프트 SQL 서버와는 ArcGIS에 넣어 같은 좌표로이 지역을 비교,하지만 정확하게 모든 시간을 일치 수없는 것. 누구든지 이보다 더 정확한 방법을 알고 있습니까?

미리 감사드립니다. 1

편집은 의견을 주셔서 감사합니다. 는 ArcGIS와 MS SQL 서버 I에서

44.80016800 -106.40808100 
44.80016800 -106.72123800 
44.75016800 -106.72123800 
44.75016800 -106.8
44.56699100 -106.8

: 여기

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); 
} 

포인트의 예를 들어 목록은 다음과 같습니다 여기 (CoordinateConversion 코드는 IBM의 링크를 위한다) 영역을 점점 내 코드입니다 90847.0 에이커를 얻으십시오. 위 코드를 사용하면 90817.4 에이커가됩니다.

포인트의 또 다른 예를 들어 목록 :

는 ArcGIS와 MS SQL 서버에서
45.78412600 -108.51506700 
45.78402600 -108.67972100 
45.75512200 -108.67949400 
45.75512200 -108.69962300 
45.69795400 -108.69929400 

나는 15732.9 에이커를 얻을. 위의 코드를 사용하면 15731.9 에이커가됩니다.

+0

세계의 고도가 변동함에 따라 다각형의 면적이 변경됩니까? 캔자스와 같은 장소는 스위스와 같은 곳보다 헥타르에있는 "면적"이 적습니다. – sarnold

+0

나는 그것에 영향을 미칠 것이라고 생각 하겠지만, 시도하지 않은 것입니다. 제가 시도한 가장 큰 고도 차이는 300 미터에서 1200 미터 사이 였고 두 고도에서 정확한 정확도를 얻지 못했습니다. 그것은 내가이 운율이나 이유를 찾을 수 있는지 알 수있는 수천 개의 다각형들을 가지고 있기 때문에 좋은 지적을 불러 일으킨다. – Behr

+0

다음 양식의 예를 업로드 할 수 있습니까? 1. 좌표 집합 (또는 몇 개). 2. 영역을 계산하기 위해 실행하는 모든 코드. 3. 코드를 실행할 때 얻을 수있는 영역 4. SQL Server 및 ArcGIS에서 가져온 영역. 나는 그것들 중 하나에 접근 할 수는 없지만 이것을 시도하고 싶다. –

답변

0

그것은 UTM 그냥 극도의 정밀도를 얻을 수없는 것으로 나타났다 인의 히트 무리, 최대 회전 나는 찾고 있었다. Alves 나 State Plane과 같은 투영 시스템을보다 정확한 것으로 전환하면 훨씬 더 정확한 계산이 가능합니다.

0

사용중인 면적 공식은 평면에서만 유효합니다. 다각형이 커지면 지구의 곡률이 영향을 미치기 시작하여이 공식으로 계산 한 것보다 큰 면적이됩니다. 구의 표면에서 작동하는 수식을 찾아야합니다.

"구형 표면에 다각형의 영역"에 대한 간단한 구글 검색은 가장 흥미로운 Wolfram MathWorld Spherical Polygon

+0

게시 된 링크에서 수식을 사용하고 있으며 원하는 결과를 얻지 못하는 것 같습니다. 그래도 코드를 두 번 확인해 보겠습니다. – Behr