我正在面临处理澳大利亚人口普查收集形状的问题 澳大利亚统计局以Mapinfo格式提供. 。我将它们加载到PostGIS数据库中 OGR2OGR工具, ,它适用于大多数形状,但并非全部。

我面临的问题的一个简单示例是这样的查询(需要加载新南威尔士州数据集):

SELECT st_union(wkb_geometry) FROM cd06answ WHERE cd_code_2006 LIKE '1291%'

此查询的结果不是预期的形状,而是无效。

表中没有空值,但是有无效的几何形状。例如

SELECT cd_code_2006 FROM cd06answ 
WHERE cd_code_2006 LIKE '1291%' AND NOT st_isvalid(wkb_geometry)

检索“ 1291301”和“ 1291321”的值。如果我排除了无效的几何形状,那么ST_UNION会成功。

连接 量子GIS 到数据库允许呈现两个形状。它们应该是几何结合的一部分,因此我需要以某种方式解决问题。

是否有更好的方法将MapInfo数据加载到PostGIS中?还是在PostGIS中修复数据的某些方法?由于数据库数据渲染正常,因此应该可以保存它,不是吗?

编辑:根据Christophe的反馈,我对ST_Buffer和ST_SNAPTGRID进行了更多的实验。此查询的结果:

SELECT 
    cd_code_2006, 
    st_isvalid(st_buffer(wkb_geometry,0)), 
    st_isvalid(st_snaptogrid(wkb_geometry, 0.00000001)),
    st_isvalid(st_snaptogrid(wkb_geometry, 0.0000001)) 
FROM
    cd06answ 
WHERE 
    cd_code_2006 LIKE '1291%' 
AND
    NOT st_isvalid(wkb_geometry)

对于两种受影响的几何形状而言,第一个st_isvalids中的第一个和最后一个是正确的,中间不是。

不幸的是,这两个方法都没有解决联盟,只有一个

SELECT st_union(st_buffer(wkb_geometry,0.4)) FROM cd06answ 
WHERE cd_code_2006 LIKE '1291%'

导致几何形状,但

SELECT st_union(st_buffer(wkb_geometry,0.3)) FROM cd06answ 
WHERE cd_code_2006 LIKE '1291%'

没有(我早些时候尝试过小型缓冲措施,但没有将其推到此级别)。

对于解决方案来说,这似乎太多了。

有帮助吗?

解决方案

尝试运行 st_buffer (首先使用半径0,然后是0.000000001等)或 st_snaptogrid 在这些无效的几何形状上以“修复”它们(链接到文档 这里这里).

从Mapinfo导入或其他来源,我已经看到这些错误弹出 ogr2ogr2 (基本上是由更高的精度和/或圆形问题引起的)。我认为PostGIS开发人员计划包括一个特定的精度还原功能,但如果我没记错的话,则1.4中没有一个功能。

如果没有帮助,请发布您当前的PostGIS版本以及多边形和投影的WKT版本。多边形还有其他可能的原因。

其他提示

哈罗

你有没有尝试过 ST_ISVALIDREASON(几何) 要了解什么问题?

/尼克拉斯

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top