Más

La búsqueda de distancia GeoDjango / PostGIS no funciona

La búsqueda de distancia GeoDjango / PostGIS no funciona


Estoy construyendo una API para realizar búsquedas a distancia usando Django 1.8, GeoDjango, Django REST Framework y PostGIS.

Localmente estoy usando PostGIS 2.1.7, mi host (PythonAnywhere) usa 2.1.4… No puedo instalar una versión anterior localmente (no es tan fuerte con la creación y la instalación).

El problema es que localmente una solicitud de API como http: // localhost: 8000 / v1 / test-entries / 8.5513076999999988% 2055.6684179999999955 / no devuelve nada, como debería. Pero al hacer la misma solicitud (usando las mismas coordenadas) en la versión en vivo en PythonAnywhere, se devuelven todas las entradas en la base de datos. El código es el mismo tanto a nivel local como en PA. El código de búsqueda de distancia es así:

return TestEntry.objects.filter (pnt__distance_lte = (pnt, 10))

La única diferencia que veo es la versión PostGIS, pero parece poco probable que una funcionalidad tan básica no funcione en una versión anterior.

¿Alguien tiene experiencia con este tipo de tecnologías y me da algunas pistas sobre lo que podría estar mal?


Para explicar lo que sucedió en los comentarios anteriores:

pnt__distance_ltesegún el manual traduce

pnt__distance_lte = (pnt, 10)

en

ST_Distance (poli, pnt) <= 10

ST_Distanceen postgis se comporta de manera diferente para la geografía y la geometría:

Para el tipo de geometría Devuelve la distancia mínima cartesiana bidimensional (basada en la referencia espacial) entre dos geometrías en unidades proyectadas. Para el tipo de geografía, los valores predeterminados devuelven la distancia mínima esferoidal entre dos geografías en metros

El problema puede estar en la operación de un sistema en geom y el otro en geog o en ambos geom pero con diferentes SRID.

Al final, un sistema fue seleccionando objetos en un radio de 10 metros y el otro en un radio de 10 grados (4326 unidades).


Ver el vídeo: Como hacer deploy a tu proyecto de django usando aws, nginx, gunicorn y supervisor En español