【发布时间】:2021-02-15 06:38:45
【问题描述】:
我有一个安装了 GIS 扩展的 Django 3.1.2PostgreSQL 12 和 PostGIS 3。
在我的模型中,我尝试使用 PointField 和 geography=True 来存储真实世界坐标:
location = models.PointField(geography=True, srid=4326, blank=False, null=False, verbose_name=_("Lat/Lon coordinates"))
在管理菜单中,我使用 OSMWidget 输入坐标:
location = forms.PointField(widget=forms.OSMWidget(attrs={'map_width': 800, 'map_height': 500, 'default_zoom': 15}))
保存后,Django 会遇到以下 SQL 错误:
INSERT INTO "challenges_point" ("track_id", "sortkey", "name", "location") VALUES (15, 10, 'Start', ST_Transform(ST_GeogFromWKB('\x...'::bytea), 4326)) RETURNING "challenges_point"."id";
ERROR: function st_transform(geography, integer) does not exist
LINE 1: ...", "location") VALUES (15, 10, 'Start', ST_Transfo...
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
ST_Transform() 用于转换几何点(如果geography=False 用于PointField,则用作数据类型)。但我不确定要使其适用于地理环境需要什么。
【问题讨论】:
-
您可以尝试将 srid=4326 添加到您的表单域吗?
-
您的意思是:“forms.OSMWidget(attrs={'srid': 4326, 'map_width': 800 ...”?我添加了,但结果相同。
标签: django gis geospatial postgis