Google App Engine и Google Proximity Search в Python - PullRequest
1 голос
/ 12 мая 2011

Из-за ограничений движка GQL было предложено, чтобы люди, желающие выполнить поиск близости, каким-то образом обошли эти ограничения, используя предложенную геомодель. Это может быть не очень элегантное или быстрое решение, но есть что-нибудь, что может остановить кого-нибудь, использующего алгоритм отсюда:

SELECT id, ( 3959 * acos( cos( radians(lat_t) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(lng_t) ) + sin( radians(lat_t) ) * sin( radians( lat ) ) ) ) AS distance FROM Stores HAVING distance < 25 ORDER BY distance

как простой способ вычисления расстояния. То есть мы просто вычисляем расстояние вручную для каждой пары (lat, lng) и (lat_t, lng_t), циклически просматривая каждую запись в нашем хранилище данных и, таким образом, получая идентификатор для всех записей, которые находятся в пределах нашего целевого расстояния без прибегнуть к использованию команды HAVING? Таким образом, для подведения итогов мы сделаем простой поиск GQL, чтобы получить все записи и пройтись по всем парам lng / lat и сравнить с нашими целевыми значениями.

http://code.google.com/apis/maps/articles/geospatial.html

1 Ответ

2 голосов
/ 13 мая 2011

Очевидно, что фрагмент кода является разновидностью SQL и не совместим с гораздо более простым поиском в Datastore на основе индексов.

Если вы имеете в виду, что вы хотите просто выбрать ВСЕ ваши объекты и выполнить вычисления расстояния в памяти с помощью python; тогда это, безусловно, возможно, но вы будете ограничены в том, чтобы делать это на относительно небольшом наборе сущностей или делать это партиями с помощью задач.

Взгляните на GeoModel , которая предназначена именно для этого случая использования.

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