2011-11-27 5 views
3

사람들이 Google지도에서 위도/경도 좌표로 저장된 일부 장소를 볼 수있는 웹 사이트가 있습니다. 저장소는 mongodb입니다. 이제 사용자가지도를 탐색 할 때지도의 보이는 부분에있는 장소를 조회해야합니다.mongodb geospatial 최상의 전략으로 Google지도 검색

나는 몽고를 처음 사용하지만 공간 부분을 살펴 보았습니다. 내 질문은 이제이 조회를 수행하는 효과적인 방법입니다.

사용자가지도를 탐색 할 때마다 ensureIndex를 만들어야하고지도의 보이는 경계 내에있는 모든 장소를 어떻게 쿼리해야합니까?

+0

지도 경계 주위에서도 작동하는지 확인하십시오. 알래스카를 넘어서서 -180 °를 넘는 장소는 많지 않지만 여전히 누군가가 필요할 수도 있습니다. –

답변

5

몽고의 문서에 따르면, 당신이 그렇게

box = [[40.73083, -73.99756], [40.741404, -73.988135]] 
db.places.find({"loc" : {"$within" : {"$box" : box}}}) 

여기서 중요한 점처럼 경계 상자 내에서 조회 할 수있는 것은 경계 상자 내에서 조회 할 수 내 의 사용이다. 지도는 Google지도 객체 인 경우 너무

map.getBounds() 

처럼 구글지도의 경계를 얻을, 당신의 상자의 값을 얻기 위하여

. getBounds는 상자를 작성하여 mongo를 쿼리 할 수있는 LatLngBounds 개체를 반환합니다.

ensureIndex는 내가 아는 한 한 번 수행해야합니다.

+0

그러면 db.places.ensureIndex ({loc : "2d"})를 수행하고 min/max에 대해 아무 것도 지정하지 않아야합니까? –

+0

지구상에 위도/경도 값을 최소/최대 -180/180으로 매핑한다고 가정하면이로 : "2d"는 최소/최대 값 없이도 충분합니다. 다른 값 범위를 매핑하는 경우 최소/최대 값이지만 loc : 최소/최대 지정이없는 "2d"의 기본값은 -180/180입니다. – omarello