2011-01-06 2 views
3

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

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

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

ответ

12

Эта проблема может быть решена в чистом 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 км зоне.

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

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

или django raw queries

+0

Спасибо jujule. Я думаю, это сработает. Я еще не хочу возиться с geodjango. Это просто отлично. – avatar

+0

Я только что посмотрел какую-то документацию postgis из любопытства и нашел это. http://postgis.refractions.net/documentation/manual-1.5/ST_DWithin.html Это кажется немного более простым, если вы уже используете postgis. – Keyo

+0

Спасибо, Кейо. Я думаю, что я должен переключиться на Postgres из MySQL, поскольку Postgres, похоже, больше поддерживает материал GIS. – avatar

 Смежные вопросы

  • Нет связанных вопросов^_^