데이터 저장소에 위치 정보를 저장하는 애플리케이션 엔진에서 애플리케이션을 개발 중입니다. 주어진 점의 지정된 반경 내에서 모든 점 (lat, long)을 가져 오려고합니다. 이와 비슷한 StackOverflow 질문입니다. GQL을 사용하여 동일한 결과를 얻을 수 있는지 알고 싶습니다.Google App Engine GQL을 사용하여 지정된 반경의 모든 위치 찾기
이
데이터 저장소에 위치 정보를 저장하는 애플리케이션 엔진에서 애플리케이션을 개발 중입니다. 주어진 점의 지정된 반경 내에서 모든 점 (lat, long)을 가져 오려고합니다. 이와 비슷한 StackOverflow 질문입니다. GQL을 사용하여 동일한 결과를 얻을 수 있는지 알고 싶습니다.Google App Engine GQL을 사용하여 지정된 반경의 모든 위치 찾기
이
하지 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)
에 500
와 100
및 좌표를 교체 너의 색인이 붙은 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)
희망
그래서 당신은이 같은 문서를 색인합니다.
500m 매우 작습니다! 그러나 적어도 그것이 극 탐험가가 아니라면 지구의 곡률을 무시할 수 있다는 것을 의미합니다. 이 경우 GeoPt를 두 개의 FloatProperty 필드로 분리하여 "일반"인덱싱을 쉽게 수행 할 수 있습니다. 그러면 bpunding-box 쿼리의 빠른 세트를 만들 수 있고,보다 큰 lat보다 작고 lat보다 작은 lat- , 길고 크고 작음, 보통보다 균등하게 분산되어 있다면 을 원하는 GeoPts (pi/4의 가치)의 대부분을으로 분리 한 다음 각 후보 점에 대해 적절한 삼각법 테스트를 수행하여 목록을 필터링하십시오 .
(나는 어쩌면 당신이 직접 서브 필드에 쿼리를 수행 할 수 인덱싱 GeoPts을 해본 적이)
감사 @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
고마워요, ,,, 지금 나는 명확한 그림을 가지고있어, 그것은 매우 도움이되었다. :) – sengar19