无效的几何动物园


9

由于无效的几何形状,我经常花费很多时间来处理怪异的bug。症状差异很大,包括:

  • 数据库变慢
  • 错误\空查询结果
  • 日志文件超载了错误和警告
  • 与几何算子不一致的结果(例如,交集)

我想对无效几何的类型进行分类,以帮助这里的每个人清理其数据。

请以您最喜欢的无效几何类型回答(每个答案一种)。欢迎使用屏幕截图,说明和解决方案-但请尽量简短。

Answers:



3

零长度段

例:

SELECT geomFromEWKT('LINESTRING(1 1, 1 1)');

                                    geomfromewkt                                    
------------------------------------------------------------------------------------
 0102000000020000000000000000000840000000000000104000000000000008400000000000001040

问题:存储零长度段会在计算长度比(除以零)或尝试计算方位角和三角函数时引起错误。

检测: 在PostGIS中,可以使用来检测零长度段isValid()

解决方案: 尝试将零长度线段保留为点。


3

自相交多边形

在此处输入图片说明

例:

SELECT isValid(geomFromEWKT('POLYGON((0 0, 1 1, 1 0, 0 1, 0 0))'));
NOTICE:  Self-intersection at or near point 0.5 0.5
 isvalid 
---------
 f
(1 row)

问题:错误的计算,例如area()

SELECT area(geomFromEWKT('POLYGON((0 0, 1 1, 1 0, 0 1, 0 0))'));
 area 
------
    0
(1 row)

这可能会导致调用函数出现零除错误。

检测:在PostGIS中,可以使用以下方法检测自相交的线段isValid()

解决方案:转换为MULTIPOLYGON(请参阅评论)。


相同的形状等效于有效的形状:MULTIPOLYGON(((0 0, 0 1, 0.5 0.5, 0 0)),((1 1, 1 0, 0.5 0.5, 1 1)))
Mike T

@Mike Toews:正确,转换为MULTIPOLYGON是一个很好的解决方案。
亚当·马坦
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.