2015-09-24 6 views
1

Я начинаю веб-приложение в Django, которое должно обеспечить одну простую задачу: получить все записи из базы данных, которые достаточно близки к другой записи.Должен ли я использовать предварительные библиотеки GeoDjango для одного простого вычисления?

Например: Iam in latlang (50, 10), и мне нужно получить все записи с помощью латланга ближе, чем 5 км от меня.

Я обнаружил, что предмет geodjango называется GeoDjango, но он содержит много других зависимостей и библиотек, таких как GEOS, POSTGIS и другие материалы, которые мне действительно не нужны. Мне нужна только эта функциональность диапазона.

Должен ли я использовать GeoDjango или просто написать свой собственный запрос расчета диапазона?

+0

Просто потому, что они вам не нужны, это не значит, что «GeoDjango» им не нужен. Они называются «зависимостями» по какой-либо причине: «GeoDjango» построен с этими строительными блоками. Библиотека сэкономит вам много времени в определенных вещах, а также со временем улучшится. Так как это не повредит вам, если вы его используете, почему бы и нет :)? –

+0

Мне очень больно. Я использую Windows в разработке, а Ubuntu в Prod ... У меня уже была проблема с: Postgree, поддержкой python posgre в Django и GEOS. Поэтому я не могу представить, насколько я буду безумен, когда он не будет устанавливать мягко на Ubuntu .. Я также просто тестирую свою концепцию (я ИТ-студент, а не компания) – ziomagic

+0

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

ответ

2

Определенно не пишите самостоятельно. По мере ознакомления с географическими данными вы поймете, что этот конкретный расчет совсем не прост, см., Например, this question для подробного обсуждения. Однако большинство решений (ответов), заданных в этом вопросе, дают приблизительные результаты. Отчасти из-за того, что земля не является идеальной сферой.

С другой стороны, если вы используете геопространственные расширения для mysql (5.7 или выше) или postgresql, вы можете использовать функцию ST_DWithin.

ST_DWithin - Возвращает true, если геометрия находится на заданном расстоянии друг от друга. Для единиц геометрии находятся в единицах пространственной привязки, а для единиц географии - в метрах, а измерение по умолчанию - use_spheroid = true (измерение вокруг сфероида), для более быстрой проверки use_spheroid = false для измерения по сфере.

ST_DWithin использует пространственные индексы, которые домашние решения не смогут. WHEN GeoDjango включен, ST_DWithin становится доступным в качестве фильтра для запросов django в виде dwithin

Последнее, но не менее важное, если вы пишете свой собственный код, вам придется написать много кода, чтобы проверить его. В то время как dwithin тщательно протестирован.