2011-05-12 4 views
1

En raison des limitations du moteur GQL, il a été suggéré que les personnes souhaitant effectuer une recherche de proximité devraient contourner ces limitations en utilisant le géomodèle suggéré. Il pourrait ne pas être une solution très élégante ou rapide, mais il n'y a rien pour arrêter toute personne qui utilise l'algorithme d'ici:Google App Engine et Google Maps Proximity Search en Python

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

comme un moyen simple de calculer la distance. C'est à dire. nous calculons simplement la distance à la main pour chaque paire (lat, lng) et (lat_t, lng_t) en bouclant chaque enregistrement dans notre banque de données et obtenons ainsi l'identifiant de tous les enregistrements qui se trouvent dans notre distance cible sans recours à l'utilisation de la commande HAVING? Donc, pour résumer, nous ferions une simple recherche GQL pour obtenir tous les enregistrements et faire une boucle dans toutes les paires de lng/lat et les comparer avec nos valeurs cibles.

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

Répondre

2

De toute évidence cet extrait est un peu de saveur de SQL et non compatible avec recherche indicielle beaucoup plus simple magasin de données.

Si vous voulez dire que vous voulez simplement récupérer toutes vos entités et effectuer les calculs de distance en mémoire avec python; alors c'est certainement possible, mais vous serez limité à faire cela sur un ensemble relativement restreint d'Entités ou à le faire par lots en utilisant des Tâches.

Jetez un oeil à GeoModel qui est conçu pour ce cas d'utilisation très.