2010-06-30 15 views
2

Dans Django documentation, je lis ceci:Django & PostGIS: Distance recherche à l'aide ST_Distance_sphere

Sur chaque recherche à distance, mais dwithin, un troisième élément en option, 'sphéroïde', peuvent être inclus pour dire GeoDjango d'utiliser la fonctions de calcul de distance sphéroïde plus précises sur les champs avec un système de coordonnées géodésiques (par exemple, ST_Distance_Spheroid serait utilisé à la place de ST_Distance_Sphere).

Mais lorsque je tente d'exécuter une recherche à distance avec « distance_lte » sur une base de données PostGIS 1.5, la requête est exécutée avec « ST_Distance » au lieu de « ST_Distance_sphere ». Pourquoi ? Ai-je oublié quelque chose?

stations = Station.objects.filter(point__distance_lte=(pnt, D(km=10))).count() 
from django.db import connection 
print connection.queries 

qui imprime ceci:

[{'time': '0.144', 'sql': 
    'SELECT "spatial_ref_sys"."srid", "spatial_ref_sys"."auth_name", "spatial_ref_sys"."auth_srid", "spatial_ref_sys"."srtext", "spatial_ref_sys"."proj4text" FROM "spatial_ref_sys" WHERE "spatial_ref_sys"."srid" = 900913 '}, 
{'time': '0.903', 'sql': 
    'SELECT COUNT(*) FROM "prices_station" WHERE ST_Distance("prices_station"."point", ST_GeomFromEWKB(E\'\\\\001\\\\001\\\\000\\\\000 1\\\\277\\\\015\\\\000\\\\270\\\\036\\\\205\\\\353Q\\\\270\\\\372\\\\277H\\\\341z\\\\024\\\\256\\\\[email protected]\'::bytea)) <= 10000.0'}] 

Merci

+0

J'ai le même problème. Avez-vous déjà compris cela? –

Répondre

0

Eh bien, il n'a pas l'air comme vous avez oublié quelque chose! Le troisième paramètre qui spécifie que la fonction sphéroïde doit être utilisée.

stations = Station.objects.filter(
    point__distance_lte=(pnt, D(km=10), True)).count() 

Il est également intéressant de noter que l'utilisation de dwithin pourrait en fait être la meilleure option.