相当于Django GEOS中的PostGIS ST_MakeValid

ran*_*ser -5 gis

在使用时检查多边形对象的有效性时Objects.polygon.valid,它会抛出GEOS_NOTICE: Self-intersection错误.

我知道这可以通过使用ST_MakeValidPostGIS 的方法来解决.
我正在使用支持GEOS的Django 1.11,并且在Django文档中找不到它的等价物.

ST_MakeValid在Django中是否有任何等效功能?

Joh*_*fis 9

Django版本> = 1.10:

存在数据库方法: MakeValid

Django版本<1.10:

您可以通过扩展GeoFunc类来创建自定义数据库函数,该类本身扩展了Func()类:

from django.contrib.gis.db.models.functions import GeoFunc

class MakeValid(GeoFunc):
    function='ST_MakeValid'
Run Code Online (Sandbox Code Playgroud)

MakeValid(field_name)应用ST_MakeValid与现场field_name.


用法:

YourModel.objects.get(id=an_id).update(the_geom=MakeValid('the_geom'))
Run Code Online (Sandbox Code Playgroud)

以下是使用F()表达式执行更新的等效查询:

YourModel.objects.get(id=an_id)
                 .update(the_geom=GeoFunc(
                     F('the_geom'), 
                     function='ST_MakeValid'
                 ))
Run Code Online (Sandbox Code Playgroud)

注意: the_geom表示几何体字段(点,多边形等)

  • @ajaysingh请不要ping人,这样他们就可以帮助你解决其他问题.这是Stack非常糟糕的形式. (14认同)
  • @ajaysingh我确实认为这超出了这个问题的范围.你可以就此问题提出一个不同的问题.如果我的答案解决了您的初始问题,请考虑接受它. (2认同)