PostGIS에서 두 점 사이의 방위를 어떻게 계산할 수 있습니까?


19

PostGIS에서 두 지점 사이의 방위를 어떻게 찾을 수 있습니까?

회전 타원체에 베어링을 만드는 방법 또는 평면 베어링인지 여부를 답에 명시하십시오.

답변:


21

ST_Azimuth 사용

평면 베어링은 다음을 사용하여 계산할 수 있습니다 ST_Azimuth.

SELECT ST_Azimuth(ST_MakePoint(1,2), 
           ST_MakePoint(3,4))/(2*pi())*360 as degAz,
       ST_Azimuth(ST_MakePoint(3,4), 
           ST_MakePoint(1,2))/(2*pi())*360 As degAzrev

degaz   degazrev
------  ---------
45      225

구형 방위각 (Quoting potgis-users group )의 경우 :

PostGIS 방위 함수는 방위각을 결정하기 위해 간단한 arctan 함수를 사용하는 것 같습니다. 좌표를 투영 된 좌표 시스템으로 변환 한 다음 쿼리를 실행하면 결과가 FCC 사이트의 결과에 훨씬 더 가깝습니다.
UTM Zone 31 로의 빠른 전환은 다음과 같습니다.

select degrees(azimuth(
'POINT(634714.442133176 5802006.052402816)',
'POINT(634731.2410598891 5801981.648284801)'
));

145.457858825445의 방위각을 산출합니다. UTM 영역의 중앙에있는 점 또는보다 적합한 투사는 더 나은 결과를 제공합니다.

삼각 함수와 ST_distance_sphere 사용

이것이 주로 레거시 이유로 (이러한 방위각을 계산하는 Python 함수가 있음)이 문제를 처리해야 할 때 선택한 솔루션입니다. 먼저 두 점 사이의 정확한 거리를 알려주는 함수를 찾아야합니다. postgis 매뉴얼 인용 :

ST_distance_sphere (point, point) 두 위도 / 경도 지점 사이의 선형 거리를 미터 단위로 반환합니다. 구형 지구와 반경 6370986 미터를 사용합니다. distance_spheroid ()보다 빠르지 만 정확도는 떨어집니다. 포인트에 대해서만 구현됩니다.

점 사이의 경도 및 위도 거리를 측정하고 arctan함수를 사용 하여 각도를 검색하십시오.


나는 나중에 파이썬 코드를 게시하려고 시도하고 아마도 메소드들 사이에서 약간의 비교를 할 것이다.-만약 레거시 코드를 찾을 수 있다면 ...
Adam Matan

거리에서 각도로가는 방법을 명확히 할 수 있습니까 atan? 내 삼각법은 약간 흐릿합니다.
fmark

11

이 질문을 지금 접하는 사람이라면 PostGIS는 지리 (구형)에서 ST_Azimuth를 2.0.0부터 지원합니다.

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