지리적 좌표에서 면적을 측정하려면 어떻게해야합니까?


12

지리적 좌표 (WGS84)에 다각형이있는 경우 지구의 곡률을 고려하여 지구 표면에서 차지하는 총 면적을 어떻게 측정합니까?

답변:


7

PostGIS 1.5에는 새로운 GEOGRAPHY 유형이 도입되었습니다 . 이 GEOGRAPHY유형을 사용하면 스페 로이드의 투영되지 않은 좌표를 PostGIS 테이블에 저장하고 일부 분석 기능을 수행 할 수 있습니다.

ST_Area GEOGRAPHY 유형 다각형에 대해 쿼리를 수행하여 면적을 제곱미터로 계산할 수 있습니다.

다음 쿼리 WGS-84GEOGRAPHY유형을 사용하여 저장되어 있다고 가정 할 때 스페 로이드를 사용하여 모든 다각형의 영역을 출력합니다 (현재는 스페 로이드 만 지원됨) .

SELECT ST_Area(the_geom) FROM table_of_polygons;

스페 로이드의 면적을 계산하는 데 사용되는 알고리즘은 source-code 에서 파생 될 수 있습니다 .


멋있는. 정보에 대해서 감사드립니다. 이것을 시도해야합니다.
glennon

PostGIS는 어떤 기능을 수행합니까?
mwalker

@mwalker 나는 배우는 데 시간이 걸리지 않았지만 원한다면 소스 코드에 대한 링크를 추가했습니다. :)
fmark

훈련받지 않은 눈으로 PostGIS는 합계를 사용하여 영역을 스트립으로 조각하고 모두 합산합니다.
mwalker

10

: 여기에 (원래 세계 풍력 포럼에서) 단순 다각형의 영역을 얻을 수 있습니다 몇 가지 코드에 대한 링크입니다 http://forum.worldwindcentral.com/showthread.php?t=20724은 . 이것은 대략 관계에 따라 구체의 문제를 해결합니다.

대체 텍스트

S = 다각형의 면적; 세타는 라디안 단위의 내부 각도의 합입니다. n은 꼭짓점의 개수입니다. r은 구의 반지름입니다.

참조 (공식 이미지 소스) : http://www.geom.uiuc.edu/docs/reference/CRC-formulas/node59.html

편원 스페 로이드에서 다각형 영역에 대한 링크 및 / 또는 코드를 보게되어 기쁩니다.


1
@glennon 스페 로이드의 측지선 다각형 영역에 대한 코드는 GeographicLib 에서 사용할 수 있습니다 . 코드에는 알고리즘이 파생 된 논문에 대한 링크가 포함되어 있습니다.
cffk

Gauss-Bonnet 공식을 기반으로하는이 방법은 수학적 관심이 많지만 지구상의 작은 인물에게는 거의 쓸모가 없습니다. 괄호 안에 작은 "과도한"을 찾기 위해 엄청난 취소가 발생하여 종종 치명적인 정밀도 손실이 발생합니다. 배정도 산술로 작업 할 때도 거의 모든 정밀도를 잃기 쉽습니다. 일상적인 GIS 계산의 경우 작동하지 않습니다.
whuber

7

OpenLayers에서 수행 하는 단순화 된 계산소스는 다음과 같습니다 . 이 방법은 "구체상의 다각형에 대한 일부 알고리즘" (Robert. G. Chamberlain 및 William H. Duquette, NASA JPL Publication 07-03) 에서 나온 것 입니다. 위에 링크 된 코드는 (지리 좌표를 가진) 선형 링의 면적을 결정하기위한 것입니다. 다각형과 다중 다각형의 영역이 링에서 합산됩니다.

var area = 0.0;
var len = ring.components && ring.components.length;
if (len > 2) {
    var p1, p2;
    for (var i=0; i<len-1; i++) {
        p1 = ring.components[i];
        p2 = ring.components[i+1];
        area += OpenLayers.Util.rad(p2.x - p1.x) *
            (2 + Math.sin(OpenLayers.Util.rad(p1.y)) +
            Math.sin(OpenLayers.Util.rad(p2.y)));
    }
    area = area * 6378137.0 * 6378137.0 / 2.0;
}

링 구성 요소는 위 코드에서 x, y (lon, lat) 좌표의 두 요소 배열입니다. OpenLayers.Util.rad 메소드는도를 라디안으로 변환합니다 (deg * PI / 180).


1
사용하는 반지름 6378137.0m는 지구의 적도 반경에 해당합니다. 그 이유가 있습니까? 중간 반경을 사용하는 것이 더 정확하지 않습니까?
FredB

Math.radians = 함수 (도) {return degree * Math.PI / 180.0; }; x = 위도, y = 경도
Stefan Steiger

4

지리 좌표를 직교 수학을 사용하여 면적을 계산할 수있는 좌표계가있는 투영으로 변환해야합니다.

위도 및 경도를 기반으로 영역을 선택하는 것이 매우 간단하고 영역 전체에서도 왜곡이 최소화되므로 UTM 이 허용되는 표준 투영법 이라고 생각 합니다. 따라서 텍사스 크기의 다각형을 사용하는 경우 UTM Zone 14 N을 사용할 수 있으며 여전히 정확합니다.

다각형이 북극 또는 남극에 있는 경우 UTM 투영이 극에 대해 정확도가 떨어 지므로 대신 UPS 를 사용해야 하며 경계선이 작을수록 신속하게 순회합니다.

점이 직교 친화적 인 좌표계에 있으면 점을 다각형으로 취급하고 면적을 계산할 수 있습니다.


3

2011-07 년에 PolygonArea 클래스가 GeographicLib에 추가되었습니다. 가장자리가 측지선 인 다각형의 실제 타원 영역을 계산합니다. PostGIS와 달리이 방법에는 수치 적분이 수반되지 않습니다. 문서화 (및 수식이 파생 된 논문에 대한 링크)는 다음을 참조하십시오.

http://geographiclib.sf.net/html/classGeographicLib_1_1PolygonAreaT.html

(PolygonArea의 일반화를 템플릿 클래스에 반영하도록 링크가 수정되었습니다.)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.