gpt4 book ai didi

geospatial - 将 MapInfo 数据导入 PostGIS 时如何避免几何问题?

转载 作者:行者123 更新时间:2023-12-02 00:35:26 26 4
gpt4 key购买 nike

我在处理澳大利亚人口普查收集形状时遇到问题 provided in MapInfo format by the Australian Bureau of Statistics .我正在使用 ogr2ogr tool 将这些加载到 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_isvalid 中的第一个和最后一个是否为真,中间那个不是。

不幸的是,这两种方法都不能修复联合,只有一个

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 以“修复”它们(链接到文档 herehere)。

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

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

关于geospatial - 将 MapInfo 数据导入 PostGIS 时如何避免几何问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4811207/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com