2014-05-20 6 views
0

저는 Postgis 9.1 및 rgeo를 사용하여지도 응용 프로그램을 개발하고 있습니다.Postgis ST_DWithin이 특정 반경과 일치하고 오른쪽에있는 점

포인트 중 하나는 현재 포인트에서 XXX 킬로미터이고 포인트 오른쪽에있는 모든 포인트를 찾습니다. 여기 [EDITED] SELECT "environments".* FROM "environments" WHERE (st_dwithin("environments"."location", ST_PointFromText('POINT(170 0)', 4326), 300000)) AND (ST_X(location::geometry) > 170);

I는 170 경도 판정 포인트를 하드 코딩 :

Environment.where{ st_dwithin(location, factory.point(170.0, 0), 300000) }.where('ST_X(location::geometry) > 170')

쿼리의 해당 SQL을 :

I는 다음의 쿼리를 시도했다.

이 문제는 [-170, -180] 경도의 포인트를 매치 할 수 없다는 것입니다.

포스트 기어 기능 만 사용하여이를 해결할 수있는 방법이 있습니까?

[편집] 이것은 전 세계의 포스트 그리 키 문제입니다. 이 응용 프로그램에서 나는 오른쪽과 특정 범위에서 포인트를 찾을 수 있습니다. 난 순수한 SQL과 솔루션을 찾을 수 없습니다 ...

고마워!

+1

제발하지 하드 코드 데이터. 나는 SO에서 아무도 HEXEWKB를 읽을 수 없다고 생각합니다. 정규 좌표로 편집 할 수 있습니까? – Patrick

+0

당신은 효과적으로 데카르트 거리 단위를도 단위로 사용하고 있다는 것을 알고 있습니까? –

+0

패트릭 나는 이진 형식으로 번역 된 루비 라이브러리 rgeo를 사용하고있다. ST_PointFromText ('POINT (-170 0)', 4326), 150000));) "환경"에서 SELECT. "환경"과 동일합니다. –

답변

0

geometry 유형 대신 geography 유형을 사용해보십시오. 바이너리 형식으로 What are the pros and cons of PostGIS geography and geometry types?

+0

감사합니다. 마이크. 관계 환경에서 열 위치에 지리 유형을 사용하고 있습니다. 포스트 지스 함수 ST_X는 기하학에서만 작동합니다. –

+0

geography 유형으로부터 좌표 데이터를 얻기 위해'ST_X (geog :: geometry)'또는'ST_AsLatLonText (geog :: geometry)'를 사용하십시오. –