2015-03-20 5 views
-1

я следующий документ в моей базе данных MongoDB:

{ 
    "_id": { 
     "$oid": "55002a7916157e6021de5708" 
    }, 
    "city": "Wellington New Zealand", 
    "location": [ 
     174.77623600000004, 
     -41.2864603 
    ] 
} 

Когда я пытаюсь найти его по следующему геопространственному запросу я не понимаю:

db.collection.find({ 
    "location": { 
     "$geoWithin": { 
      "$box": [ 
       [165.8694369, -52.61941849999999], 
       [-175.831536, -29.2313419] 
      ] 
     } 
    } 
}); 

Не могли бы вы объяснить, почему запрос выше не работает?

+1

Вы пытались изменить порядок своих аргументов в операторе $ box? Мог ли MongoDB интерпретировать вашу широту/долготу противоположно тому, как вы? Это то, что меня обмануло в прошлом. – Rich

+0

Да, я пробовал, но он не работает :( – Erik

+0

Какая версия MongoDB вы используете? – Rich

ответ

4

Эти координаты являются недопустимыми с долготой «вверху справа» сторнируется от того, что оно должно быть:

db.collection.find({ 
    "location": { 
     "$geoWithin": { 
      "$box": [ 
       [165.8694369, -52.61941849999999], 
       [175.831536, -29.2313419] 
      ] 
     } 
    } 
}) 

Это возвращает нужное место правильно. Я рекомендую вам использовать что-то вроде http://geojsonlint.com/ при тестировании функций.

Ваше «окно» выглядит следующим образом:

enter image description here

Что, конечно, охватывает все земли между широтами «за исключением» нужной области. Вот почему он терпит неудачу.

+0

Спасибо за помощь. Я получаю эти ограничения от GoogleMaps http://stackoverflow.com/questions/29168008/googlemaps-geocoder-results-wrong-bounds-of-new-zealand Возможно ли каким-либо образом обнаружить и исправить границы перед запросом в БД? – Erik

+0

@Erik. Я сформулировал «правильные оценки» для вашего запроса, а также полностью объяснил, почему ваши оценки «неправильны». начало вашего опроса, я хотел, чтобы вы поняли, почему ваши предположения неверны и что вы «должны» использовать «метаданные», такие как '(« страна »:« Новая Зеландия »}' на вашем хранилище, а не искать ограничивающие '$ box' или' "Polygon" на каждый GeoJSON, как ожидалось. Пожалуйста, посмотрите правильный способ моделирования. –

Смежные вопросы