Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
相当于Django GEOS中的PostGIS ST_MakeValid_Gis - Fatal编程技术网

相当于Django GEOS中的PostGIS ST_MakeValid

相当于Django GEOS中的PostGIS ST_MakeValid,gis,Gis,在使用Objects.polygon.valid检查多边形对象的有效性时,它抛出了一个GEOS_通知:自相交错误 我知道这可以通过使用PostGIS的ST_MakeValid方法来解决。 我使用的Django 1.11支持GEOS,在Django文档中找不到它的等价物 Django中是否有ST_MakeValid的等效函数?Django版本>=1.10: 存在数据库方法: Django版本

在使用Objects.polygon.valid检查多边形对象的有效性时,它抛出了一个GEOS_通知:自相交错误

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

Django中是否有ST_MakeValid的等效函数?

Django版本>=1.10:

存在数据库方法:

Django版本<1.10:

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

MakeValidfield_名称将ST_MakeValid应用于具有field_名称的字段

用法:

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

YourModel.objects.get(id=an_id)
                 .update(the_geom=GeoFunc(
                     F('the_geom'), 
                     function='ST_MakeValid'
                 ))

注意:_geom表示几何体场点、多边形等。

使用此函数还有一个疑问:当我执行new_polygon_obj=MakeValid时,它不会返回新的多多边形对象。我遗漏了什么?你真的像这里显示的那样写作吗?如果是这样的话,你用错了,你应该按照我在回答中的建议使用它@ajaysingh@ajaysingh我确实认为这超出了这个问题的范围。在这件事上,你可以提出不同的问题。如果我的答案解决了你最初的问题,考虑接受它。AjaySigh请不要ping人,这样他们就可以帮助你解决其他问题。这是一个非常糟糕的堆栈形式。@Patrice是的,我应该在发布之前彻底检查文档。我不会再重复了。谢谢
YourModel.objects.get(id=an_id).update(the_geom=MakeValid('the_geom'))
YourModel.objects.get(id=an_id)
                 .update(the_geom=GeoFunc(
                     F('the_geom'), 
                     function='ST_MakeValid'
                 ))