3

我在处理澳大利亚统计局以 MapInfo 格式提供的澳大利亚人口普查集合形状时遇到了问题。我正在使用ogr2ogr 工具将这些加载到 PostGIS 数据库中,该工具适用于大多数形状,但不是全部。

我面临的问题的一个简单示例是这样的查询(需要加载 NSW 数据集):

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

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

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

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

检索值“1291301”和“1291321”。如果我排除无效几何,则 st_union 成功。

Quantum GIS连接到数据库可以渲染两个有问题的形状。它们应该是几何联合的一部分,所以我需要以某种方式解决问题。

有没有更好的方法将 MapInfo 数据加载到 PostGIS 中?或者一些修复 PostGIS 中数据的方法?由于数据库数据呈现正常,应该可以保存它,不是吗?

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

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%'

没有(我之前尝试过小缓冲技巧,但没有将它推到这个水平)。

这对于修复来说似乎有点太多了。

4

2 回答 2

2

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

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

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

于 2011-01-26T23:20:33.863 回答
1

你好

您是否尝试过ST_IsValidReason(geometry)来了解问题所在?

/尼克拉斯

于 2011-01-28T22:40:08.733 回答