将MapInfo数据导入PostGIS时,如何避免几何问题?
-
25-10-2019 - |
题
我正在面临处理澳大利亚人口普查收集形状的问题 澳大利亚统计局以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%'
没有(我早些时候尝试过小型缓冲措施,但没有将其推到此级别)。
对于解决方案来说,这似乎太多了。
其他提示
不隶属于 StackOverflow