0

嗨 Stackoverflow 人,

我无法理解 GeoDjango 中的 POINT 引用如何转换为查询语句。

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

使用 GeoDjango 将 lng、lat 点转换为 postgis 的正确方法是什么?

感谢您帮助更好地理解这件事!

4

2 回答 2

1

我远不是这方面的专家。但我曾经编写过一些代码,使用 Django 在 postgis 数据库中保存了某个点。

我这样做的方式是:

model_instance.coords = Point(geo_point.latitude, geo_point.longitude)
于 2012-01-31T13:29:54.630 回答
1

似乎错误消息源于一个小错误

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

可以在此处找到确切问题和补丁的说明:

我已经修补了 adapter.py 中的四行并且错误消失了。

谢谢你的帮助!

于 2012-02-01T12:08:37.997 回答