Насколько сложно модифицировать модели Django? - PullRequest
1 голос
/ 31 марта 2010

Я занимаюсь геолокацией, а у Джанго нет PointField. Итак, я вынужден писать в RAW SQL. GeoDjango, библиотека Django, не поддерживает следующий запрос для баз данных MYSQL (может кто-нибудь проверить это для меня?)

 cursor.execute("SELECT id FROM l_tag WHERE\
               (GLength(LineStringFromWKB(LineString(asbinary(utm),asbinary(PointFromWKB(point(%s, %s)))))) < %s + accuracy + %s)\

Я не знаю, почему библиотека GeoDjango не может сделать это в базе данных MYSQL. Я ненавижу писать RAW SQL для расчета расстояний между двумя точками. Есть ли способ, которым я могу создать свою собственную библиотеку для Django, которая справится с этим? Если да, то насколько это тяжело?

Ответы [ 2 ]

0 голосов
/ 10 апреля 2010

GeoDjango действительно имеет PointField.

Похоже, вы пытаетесь выполнить поиск в поле dwithin, которое не работает в MySQL (по состоянию на апрель 2010 г.), но работает в Postgres:

тег класса (модель): point = PointField ()

Tag.objects.filter (point__dwithin = (точка D (мили = 4)))

Осторожнее с этим типом запроса, так как он требует сканирования таблицы. Если вы можете допустить выделение всех точек в прямоугольной области, вы можете использовать ограничивающий прямоугольник, содержащий запрос:

Tag.objects.filter (point__contained = geom)

где geom - многоугольник.

0 голосов
/ 31 марта 2010

Почему бы вам просто не расширить класс, который уже существует? Просто любопытно и хотелось бы помочь тебе конкретно.

...