2013-08-29 7 views

답변

3

하지 GQL와 함께, 귀하의 제안을 기대하지만, 이것은 당신이 검색 문서 등을 별도로 색인 기관이 필요 의미뿐만 아니라 much more expensive 비록 당신의 Search API를 사용하여이 작업을 수행 할 수 있습니다 (this article I found 유사) (데이터 저장소 쿼리의 경우 $ 0.06/100k이고 모든 geopoint 검색 쿼리가있는 복잡한 검색 쿼리의 경우 $ 0.6/10,000입니다.

편집은 COMMENT IN 질문에 답 : 이 문제를 해결 않습니다 예처럼 날 것으로 보인다 :

"distance(survey_marker, geopoint(35.2, 40.5)) < 100" 

중심의 좌표와 geopoint(35.2, 40.5)500100 및 좌표를 교체 너의 색인이 붙은 GeoPt 재산의 이름을 가진 survey_marker.

from google.appengine.api import search 

query = #something 
index = search.Index(name="myIndex") 
for entity in query: 
    my_document = search.Document(
     doc_id = entity.key, 
     fields=[ 
      search.GeoField(name='location', value=search.GeoPoint(entity.point)) 
      ]) 
    index.put(document) 

당신과 같이 쿼리를 작성합니다 :이 도움이

coords = (lat, long) 
query_string = "distance(location, geopoint(%s, %s)) < 500" % (lat, long) 
index.search(query.string) 

희망

그래서 당신은이 같은 문서를 색인합니다.

+0

감사 @Roman 레빈이 특정 반경 기능을 실현하려 사용될 수있는 API를 검색 할 수 있습니다 : [링크] (HTTP : //housing.co.in/bangalore/buy/flats-near=koramangala:12.931656:77.622696:2900;apartment-types=3bhk;sort-by=distance:true?gclid=CPeg6YOs0rgCFfF34godVFcAEA). 나는 500 미터 반경 아래의 사용자의 geolocation에 따라지도에 매핑 될 데이터 저장소에 특정 좌표를 저장합니다. 반경은 동적 인 위의 링크와 달리 정적입니다. 다시 감사드립니다. :) .. 답장을 기다리겠습니다. :) – sengar19

+0

고마워요, ,,, 지금 나는 명확한 그림을 가지고있어, 그것은 매우 도움이되었다. :) – sengar19

1

500m 매우 작습니다! 그러나 적어도 그것이 극 탐험가가 아니라면 지구의 곡률을 무시할 수 있다는 것을 의미합니다. 이 경우 GeoPt를 두 개의 FloatProperty 필드로 분리하여 "일반"인덱싱을 쉽게 수행 할 수 있습니다. 그러면 bpunding-box 쿼리의 빠른 세트를 만들 수 있고,보다 큰 lat보다 작고 lat보다 작은 lat- , 길고 크고 작음, 보통보다 균등하게 분산되어 있다면 을 원하는 GeoPts (pi/4의 가치)의 대부분을으로 분리 한 다음 각 후보 점에 대해 적절한 삼각법 테스트를 수행하여 목록을 필터링하십시오 .

(나는 어쩌면 당신이 직접 서브 필드에 쿼리를 수행 할 수 인덱싱 GeoPts을 해본 적이)

+0

나중에 나는 그것을 시험해 보았다. 그러나 나의 위치와 같은 midpoint와 함께 원의 원주 좌표를 얻고있다. .. 그러나 대답하는 남자를위한 감사. ,,,, – sengar19

+0

당신이 삼각법을 잘못하고있는 것처럼 들리는 사운드 :-) – bjorke