2014-12-08 2 views
1

포인트가 GEOJSON 다각형의 특정 거리 내에 있는지 확인하는 가장 좋은 방법은 무엇입니까? TurfJS 버퍼 방법 (https://github.com/Turfjs/turf-buffer#turf-buffer)을 사용해야합니까? 버퍼링 된 다각형에 대해 쿼리를 수행 할 수 있습니까?포인트가 GEOJSON 다각형의 특정 거리 내에 있는지 확인하는 가장 좋은 방법은 무엇입니까?

점이 다각형 내에 있는지를 확인하기 위해 TurfJS 내부 메서드 (https://github.com/Turfjs/turf-inside)를 사용할 수 있습니다. 나는 포인트가 버퍼링 된 다각형 내부에 있는지 아닌지를 찾는 가장 좋은 방법이 무엇인지 궁금 할 것입니다.

예 : GEOJSON 폴리곤 파일로 제공되는 여러 인접 지역이 있습니다. 또한 직원의 위치/주소 집합 (이미 위도/긴 좌표로 지오 코딩 됨)이 있습니다. 내 직원이 주어진 이웃 다각형에서 10 마일 이내에 살고 있는지 여부를 확인하는 가장 좋은 방법은 무엇입니까?

감사합니다.

+0

실제로 lib를 작업 한 사람을 끌어 들이기 위해 turjs 태그를 만들 자유를 얻었습니다. –

답변

3

예, 당신은

var pt = point(14.616599, -90.548630) 
var unit = 'miles' 
var buffered = buffer(pt, 10, unit) 
var ptTest = point(-1, 52) 
var bIn = inside (ptIn, buffer) 

것은 분명 거짓해야하는 기존의 예에 확장, 예를 들면 뭔가 다른, 10 마일 이내에 포인트를 찾기 위해 내부와 함께 버퍼를 사용할 수 있습니다.

일반적으로 버퍼링은 다소 비쌉니다. 따라서 쿼리를 실행할 때마다 버퍼링이 반드시 필요하지는 않습니다. 작업 속도를 높이기 위해 할 수있는 몇 가지 작업이 있습니다.

1). 검색 영역 사전 버퍼링

2). 경계 상자 교차점을 먼저 검사하고 다각형 작업에서 많은 불필요한 점을 피하는 R-tree 유형 색인을 사용합니다. 귀하의 게시물을 볼 때까지 들어 본 적이없는 turfjs는 버퍼링을 포함하여 많은 작업을 위해 jsts을 사용합니다. 이 라이브러리에는 잠재적으로 사용할 수있는 R-tree 인덱스가 구현되어 있습니다. 이것의 재미는 example입니다.

일반적으로 Postgres 위에 Postgis와 같이 공간적으로 사용 가능한 데이터베이스와 같이 공간 (R-tree 유형) 색인이있는 상황에서는 ST_Dwithin (geom1, geom2, distance) 연산자를 사용합니다.)를 사용하여 다른 지오메트리의 거리에서 모든 점을 찾으면 초기 경계 상자 테스트에 실패하여 많은 후보자가 거부되므로 매우 효율적입니다.

실제로 데이터의 크기와 쿼리 빈도에 따라 다릅니다. 원칙적으로 버퍼에 쿼리를 포함하는 것은 잘못된 것이 아닙니다. 나는 대답보다 더 많은 질문을하지 않기를 희망한다.

0

저는 JavaScript에서 이러한 종류의 계산을 수행하기 위해 GeoScript을 사용하고 있습니다. geom.Geometry 클래스에있는 distance 메소드는 두 기하학 간의 최소 거리를 리턴 할 수 있습니다. GitHub에서 the source을 사용하여 자신의 솔루션을 롤업하려는 경우 어떻게하는지 확인할 수 있습니다.