Django - определение, находятся ли географические координаты внутри круга - PullRequest
3 голосов
/ 06 января 2011

Есть ли у django что-нибудь, что будет смотреть на географическую координату (десятичный лат / долгота) и определять, находится ли внутри круга с определенным радиусом (скажем, 100 км)?

У меня есть определенный тип данных, каждый из которых имеет широту / длину, и я хотел бы выполнить поиск в базе данных, чтобы увидеть, расположены ли эти данные внутри круга с указанным размером радиуса.

Возможно, я мог бы написать что-нибудь сам, чтобы справиться с этим, но я бы побродил, если уже есть что-то написанное, чтобы справиться с этим.

1 Ответ

12 голосов
/ 06 января 2011

Эта проблема может быть решена в чистом SQL, если вы не возражаете против очень хорошей точности.

Вы можете найти точки вокруг позиции GPS с помощью этого конкретного запроса SQL:

# find point around :
latitude = 46.2037010192871
longitude = 5.20353984832764
query= "SELECT ID, NOM, LAT, LON, 3956 * 2 * ASIN(SQRT(POWER(SIN((%s - LAT) * 0.0174532925 / 2), 2) + COS(%s * 0.0174532925) * COS(LAT * 0.0174532925) * POWER(SIN((%s - LON) * 0.0174532925 / 2), 2) )) as distance from POI  having distance < 50 ORDER BY distance ASC " % ( latitude, latitude, longitude)

Это даст вам все записи с записями GPS в 50-километровой зоне.

Вы можете легко подключить это в django с помощью:

from django.db import connection
cursor = connection.cursor()
cursor.execute( query )
rows = cursor.fetchall()

или необработанные запросы django

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