Postgis로 근접 검색을 수행하려면 어떻게합니까?


9

Geonames 데이터베이스 (cities1000)를 다운로드하고 작은 Ruby 프로그램을 작성하여 내 테이블로 가져 왔습니다 ( geo_cities). 그런 다음이라는 지리 열을 추가했습니다 geog.

그런 다음 모든 위도 / 경도 숫자를 다음을 사용하여 geog 열로 변환했습니다.

update public.geo_cities set geog = st_GeogFromText('SRID=4326;POINT(' || longitude || ' ' || latitude || ')');

상황이 좋아 보입니다. 이제 내가하고 싶은 것은 프라하에서 100 마일 이내에있는 모든 도시를 찾는 것입니다.

그래서 프라하를 얻을 수 있습니다 :

select * from geo_cities where asciiname = 'Prague' and countrycode = 'CZ';

나는 여전히 GIS와 Postgres를 배우고 있는데 누군가 간단한 쿼리로 나를 도울 수 있습니까?

답변:


13

먼저 지리 열에 색인이 있는지 확인하십시오. 공간 검색 속도가 빨라집니다.

CREATE INDEX geo_cities_geog_idx ON geo_cities USING GIST geog;
VACUUM ANALYZE geo_cities(geog);

그런 다음 자체 조인 쿼리에서 ST_DWithin (마일에서 미터로 변환)을 사용할 수 있습니다 .

SELECT gc.*, ST_Distance(gc.geog, pt.geog)/1609.344 AS distance_miles
FROM geo_cities gc, geo_cities pt
WHERE pt.asciiname = 'Prague' and pt.countrycode = 'CZ'
  AND ST_DWithin(gc.geog, pt.geog, 160934.4)
ORDER BY ST_Distance(gc.geog, pt.geog);

좋은 책을 사러 온 다면 PostGIS in Action을 확인하십시오 .

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