PostGIS ST_Buffer Radius 도움말


9

주어진 지점의 5 마일 반경 내에있는 모든 지점을 찾으려고합니다. 다음과 같은 쿼리가 있습니다.

SELECT * FROM table WHERE ST_Contains(ST_Buffer(geomFromText('POINT(0 0)', 4326), ?), latlon)

?5 마일을 얻기 위해 (반지름) 대신 무엇을 넣었는지 알 수 없습니다 . 모든 것은 EPSG 4326에 있으며 PostGIS 문서에 따르면 (내가 아는 한 최선의) 반경은 미터 단위 여야합니다. 12,070.0m (약 5 마일)를 넣으면 전국에서 절반의 경기를합니다. 내가 뭘 놓치고 있는지 아는 사람 있습니까?


4326은 dd (십진수)입니다. 12070은 라 트론으로 투영 될 때 상당히 큰 영역 (반지름)입니다.
브래드 네섬

1
잘못된-12070 미터 = 7.49995029 마일이므로 5 마일은 8046.72 미터이므로 (? = 8046.72)-데이터 지리 또는 형상입니까?
Mapperz

답변:


14

데이터가 프로젝션되지 않았기 때문에-그것은 회전 타원의 점입니다-선형 거리는 의미가 없습니다. 적도에서 5 마일은 북극에서 5 마일보다 훨씬 작은 각도입니다. 그러나 운 좋게도 PostGIS (> = 1.5)에는 원하는 답이 있습니다.

SELECT * FROM table WHERE ST_DWithin(ST_GeogFromText('SRID=4326;POINT(0,0)'), geography(latlon), 12070);

그것은 geography이런 종류의 것을 위해 설계된 유형을 가지고 있습니다. 지오메트리와 비슷하지만 EPSG : 4326 만 사용하며이 기능을 사용하는 기능은 훨씬 적습니다.

위의 I가 호출 한 샘플에서 ST_GeogFromText () (이 또한입니다 ST_GeographyFromText () , 나는 확실하지 않다 차이가있는 경우) 관심의 포인트는 SRID 매개 변수이기 때문에 (이, 일반 WKT 작동 할 수 중복) 및 latlon 컬럼을 지역 유형으로 캐스트하십시오. 이러한 작업을 많이 수행하는 경우 테이블에서 지역 열을 만들고 전송을 완전히 건너 뛰는 것이 더 효율적일 수 있습니다. 마지막으로 ST_DWithin () 은 지리 매개 변수를 사용할 수 있으며 선형 거리로 올바른 작업을 수행합니다.


도움을 주셔서 감사합니다. 나는 여전히 PostGIS를 처음 접합니다.
Nik

4

아마도 대신 ST_DWithin 함수를 원할 것입니다. st_buffer 문서의 참고 사항을 참조하십시오.
ST_ 버퍼

사람들은 종종 반경 검색을 시도하기 위해이 기능을 사용하는 실수를합니다. 반경 검색에 버퍼를 만드는 것은 느리고 무의미합니다. 대신 ST_DWithin 을 사용하십시오 .

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