Django & Postgis: поиск расстояния с использованием ST_Distance_sphere - PullRequest
2 голосов
/ 30 июня 2010

В Django документации , я прочитал это:

При каждом поиске расстояния, кроме dwithin, может быть включен необязательный третий элемент, 'spheroid', чтобы сказать GeoDjango использовать более точные функции вычисления расстояния по сфероиду в полях с геодезической системой координат (например, вместо ST_Distance_Spheroid ST_Distance_Sphere).

Но когда я пытаюсь выполнить поиск расстояния с помощью «distance_lte» в базе данных Postgis 1.5, запрос выполняется с «ST_Distance» вместо «ST_Distance_sphere». Зачем ? Я что-то забыл?

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

Что печатает это:

[{'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\\\\007H@\'::bytea)) <= 10000.0'}]

Спасибо

1 Ответ

0 голосов
/ 30 апреля 2016

Ну, похоже, ты что-то забыл!Третий параметр, который указывает, что следует использовать функцию сфероида.

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

, также стоит отметить, что использование dwithin может быть лучшим вариантом.

...