2009-12-23 4 views
0

내 응용 프로그램 위치의 모든 사용자에 대해 YQL WOEID (Where on earth id)를 저장합니다. 이제 주어진 WOEID에서 x 마일 이내에있는 모든 사용자를 검색 할 방법이 필요합니다. YQL을 사용하면 가능합니까?YQL Geo 2 WOID의 거리

Alternativly은 내가 위도와 경도를 저장하는 응용 프로그램을 변경할 수도 있겠죠,하지만 potentialy 사용자의 thousends가있을 수 있기 때문에 나는 가능한 거리의 계산이 빨리 필요합니다.

편집 : 내가 정말로 찾고있는 것은 Stackoverflow Careers의 직원 검색과 같은 것으로 장소를 입력 한 다음 검색 결과에 포함하려는 공간 주변 거리를 말하십시오.

답변

2

내가 알 수있는 한, 이것은 YQL에서 지원하는 것이 아닙니다. 가장 가까운 것은 neighbors of a given WOEID을 반환하는 방법입니다.

주어진 WOEID의 X 마일 내의 사용자를 찾는 문제는 WOEIDs 다른 센터와 경계 상자 임의의 크기가 될 수 있다는 것입니다. 비록 더 복잡하지만, 위도와 경도를 저장하면 찾고있는 결과를 얻을 수 있습니다. 이것에 대해 최소한 두 가지 방법이 있습니다.

시작점에 Haversine distance을 계산하여 위도 및 경도에 직접 질의한다. 특히 수천 개의 행을 처리 할 때 이것은 매우 느릴 수 있습니다. 어쨌든 데이터베이스가 지형 공간 데이터를 지원하는지 확인해야합니다. MySQLPostgreSQL에는 모두 지형 공간 확장이 있습니다.

두 번째로 널리 사용되는 방법은 geohash을 사용하는 것입니다. 이렇게하면 가까운 지점을 쿼리하는 데 사용할 수있는 문자열 집합이 생성됩니다. 예를 들어 NYC의 Rockefeller Center에 대한 Lat: 40.7571397, Lon: -73.9891705 좌표를 가져옵니다.

  • 9
  • 9A
  • 9ac
  • 9ac7
  • 9ac7b
  • 9ac7be
  • 9ac7be2
  • : 이러한 좌표 (구글 AppEngine에 대한) geohash와 하나의 구현은 다음 생산 9ac7be2e
  • 9ac7be2e4
  • 9ac7be2e4e
  • 9ac7be2e4ed
  • 9ac7be2e4ed4
  • 9ac7be2e4ed4e

그래서 당신은, 당신이 9ac7be2e4ed4e 일치 다른 점을 찾을 수 있습니다 정말 가까운 지점을 찾으려면, 일반 지역을 원할 경우 9ac7be2e4e 등을 시도 할 수 있습니다. 포인트의 서브 세트를 얻은 후에는 더 작은 데이터 세트에서 거리 계산을 수행 할 수 있습니다.