2013-12-12 5 views
1

Я пытаюсь получить геоиндекс в pymongo и asyncmongo с использованием $near вариантов. Но он всегда возвращает неправильные близлежащих мест. Может ли кто-нибудь помочь мне разобраться в проблеме.Запрос геоинформации AsyncMongo и PyMongoDB

self.application.db.citydetails.find({"loc":{"$near":(latitude, longitude)}}, limit=20, callback=self.loadMoreSearchResponse) 

ответ

1

Во-первых, убедитесь, что ваши данные citydetails.loc сохраняется как точка GeoJSON:

{loc: {type: "Point", coordinates: [ longitude, latitude ]}} 

Пожалуйста, обратите внимание, что при сохранении гео пространственных точек, долгота должны быть размещены на 0 индекс в массиве coordinates.

Затем измените код размещения долготы до того широтой в запросе:

self.application.db.citydetails.find({"loc":{"$near":(longitude, latitude)}}, limit=20, callback=self.loadMoreSearchResponse) 
+0

Спасибо Danypype. Это не работает. Но вы помогли мне создать структуру GeoIndex. – arthankamal

+0

+1 для создания структуры для 'GeoIndex' – arthankamal

0

Я не понимал, я вроде дурак здесь. Как только я получить POST аргументы, я пытаюсь передать его в запросе, как

coordinates = self.get_argument("coordinates", "") 
latitude = coordinates.split("_")[0] 
longitude = coordinates.split("_")[1] 
self.application.db.cityinfo.find({"loc":{"$near":(longitude, latitude)}}, limit=20, callback=self.loadMoreSearchResponse) 

Кажется, я передаю строку в запросе. Я просто превращали в float то его работает отлично

coordinates = self.get_argument("coordinates", "") 
latitude = float(coordinates.split("_")[0]) 
longitude = float(coordinates.split("_")[1]) 
self.application.db.cityinfo.find({"loc":{"$near":(longitude, latitude)}}, limit=20, callback=self.loadMoreSearchResponse) 

Надежда, это поможет кому-то другому в будущем.

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