首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用GeoDjango/PostGIS满足"enforce_srid_coordinate“约束?

如何使用GeoDjango/PostGIS满足"enforce_srid_coordinate“约束?
EN

Stack Overflow用户
提问于 2012-05-08 01:10:41
回答 2查看 989关注 0票数 1

我使用的是GeoDjango,并且有一个带有PointField的Django模型:

代码语言:javascript
复制
class ArchivrItem(models.Model):
    ...
    coordinate = models.PointField(srid=4326)

当我尝试使用纬度和经度插入一个新的ArchivrItem时,我得到了这个错误:

代码语言:javascript
复制
ERROR:  new row for relation "archivr_archivritem" violates check constraint "enforce_srid_coordinate"

通过尝试这样做,我可以避免Django,并在postgresql中直接得到相同的错误:

代码语言:javascript
复制
INSERT INTO archivr_archivritem (coordinate) VALUES ('POINT(51.520667 -0.094833)');

我可能对SRID和积分系统有点天真和无知……我遗漏了什么?谢谢。

更新:我应该添加约束是什么。表上的约束是:

代码语言:javascript
复制
"enforce_dims_coordinate" CHECK (st_ndims(coordinate) = 2)
"enforce_geotype_coordinate" CHECK (geometrytype(coordinate) = 'POINT'::text OR coordinate IS NULL)
"enforce_srid_coordinate" CHECK (st_srid(coordinate) = 4326)
EN

回答 2

Stack Overflow用户

发布于 2012-05-08 23:21:41

听起来你是想通过这样做来添加一个新的ArchivrItem:

代码语言:javascript
复制
item = ArchivrItem(coordinate='POINT(51.520667 -0.094833)')
item.save()

由于某些我不确定的原因,这并没有得到正确的默认SRID。但是,显式指定它应该是可行的,例如:

代码语言:javascript
复制
from django.contrib.gis.geos import Point
item = ArchivrItem(coordinate=Point(-0.094833, 51.520667, srid=4326))
item.save()

我要说的是,如果srid与模型定义相匹配,那么它是可选的,但指定它并没有什么坏处,而且您可以看到,如果简单地使用对象方式就可以修复它。https://docs.djangoproject.com/en/dev/ref/contrib/gis/db-api/#creating-and-saving-geographic-models有更多的例子。

另外,请注意POINT()是X,然后是Y,也就是说,后面是后面,而不是后面/后面。如果扩展WKT为"SRID=4326;POINT(-0.094833 51.520667)“,则可以添加一个SRID。

票数 1
EN

Stack Overflow用户

发布于 2013-02-16 01:57:23

在一位同事遇到同样的问题后,我们似乎已经追踪到了安装的GEOS版本的问题。使用存在此问题的版本时,如果p是django.contrib.gis.geos.Point,p.wkb和p.ewkb将返回相同的数据- EWKB缺少SRID信息。由于Django使用EWKB构造导入到PostGIS的SQL,这就是它失败的原因,无论创建的构造如何。

我之前的评论是使用Debian的3.2.0,它根本没有显示这个问题。3.2.3是在这里显示此问题的版本。升级到3.3.6修复了这个问题(也测试了3.3.3,这是很好的)。今天晚些时候,当我有更多的时间尝试进一步追踪它的时候,我会尝试其他版本。

您可以使用以下命令查看您的GEOS版本:

代码语言:javascript
复制
from django.contrib.gis.geos.libgeos import geos_version
geos_version()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10486149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档