PostgreSQL + GeoDjango: лучшее понимание того, как переводятся ТОЧКИ - PullRequest
0 голосов
/ 31 января 2012

Привет, люди Stackoverflow,

У меня проблемы с пониманием того, как ссылки POINT в GeoDjango переводятся в операторы запросов.

совет jpic очень помог мне захватить операторы запроса в консоли, но распечатка не имеет никакого смысла для меня.

В моем view.pyФункция (сохранение формы), у меня есть следующая строка:

savedProject.geolocation = GEOSGeometry('POINT(%s %s)' %(u_lng,u_lat))

с u_lng и u_lat как пользователь координировал (взят из информации о сеансе).u_lat и u_lng являются значениями в градусах в виде десятичных дробей.

Однако, когда я проверяю инструкцию sql, как было предложено, я вижу, что POINT был переведен в

ST_GeomFromEWKB(E'\001\001\000\000 \346\020\000\000\352\036~\243\302\256H\300\352X\245\364L\3515\300'::bytea)

в операторе sql и который отклоненпо sql с сообщением об ошибке

ERROR:  invalid byte sequence for encoding "UTF8": 0x00

Как правильно перевести lng, lat указывает на postgis с GeoDjango?

Спасибо за вашу помощь, чтобы понятьэто дело лучше!

Ответы [ 2 ]

1 голос
/ 01 февраля 2012

Похоже, что сообщение об ошибке происходит из-за небольшой ошибки в

django/contrib/gis/db/backends/postgis/adapter.py

Объяснения для точной проблемы и патча можно найти здесь:

Я исправил четыре строки в файле adapter.py, и ошибка исчезла.

Спасибо за вашу помощь!

1 голос
/ 31 января 2012

Я далеко не эксперт по этому вопросу.Но однажды я написал некоторый код, который сохранил определенную точку в базе данных postgis, используя Django.

То, как я это сделал, было:

model_instance.coords = Point(geo_point.latitude, geo_point.longitude)
...