修复django中的无效几何(没有数据库)

时间:2017-12-12 17:17:57

标签: python django postgis geos

我有多边形,我从外部来源。多边形无效。

In [36]: p
Out[36]: <Polygon object at 0x7fec6bea6ac0>

In [37]: p.valid
[12/Dec/2017 19:13:19] WARNING [django.contrib.gis:85] GEOS_NOTICE: Hole lies outside shell at or near point 260561.40600000042 776052

我知道我可以使用MakeValid()django函数在DB中修复多边形。

有没有办法在将多边形插入数据库之前修复多边形,只需使用地理API?

感谢。

2 个答案:

答案 0 :(得分:0)

我不知道这是否一定能解决您的孔错误,但是我很幸运通过执行宽度为0的缓冲区来消除自相交的几何图形:

p = p.buffer(0)

答案 1 :(得分:0)

不幸的是,ST_MakeValid函数没有使用geos函数,但是a custom function在PostGIS自己的liblwgeom库中。

我不知道liblwgeom的任何python绑定,因此,如果要调用该函数,则必须使用ctypes进行自己的绑定。参见this similar question以获得灵感。

但是,如果有任何一种方法足够好,那么按照spatialbits' answer的建议使用buffer(0)也是成功的。