删除多边形之间的小空间(条形)?[关闭]


51

我有一组代表行政区的多边形。区域是手工数字化的,在多边形之间应该接触多边形的地方有很小的空间(条子)。

如何使多边形对齐在一起,删除空格?

首选QGIS,但也可以选择ArcGIS和常规编程。

Answers:


27

使用消除(需要ArcInfo许可)

通过将多边形与具有最大面积或最长共享边界的相邻多边形合并来消除多边形。消除(Eliminate)通常用于去除重叠操作(例如相交或联合)产生的小条形多边形。

http://help.arcgis.com/zh-CN/arcgisdesktop/10.0/help/index.html#//00170000005p000000.htm

在此处输入图片说明

ArcGIS 10用户请注意,此工具的选项中有一项新增功能。

现在可以使用选项> ex_features保留原始的POLYGON或POLYLINE。(可选)定义多边形边界或其一部分的输入多义线或多边形要素类或图层,不应将其消除。


3
在动物园的情况下行得通吗?数据集中似乎没有碎片,只是多边形之间的间隙。
昏暗

3
我已成功使用此工具消除了多边形之间的间隙。但是,使用此工具存在问题。在地理处理过程中使多边形破裂时,会泛化新创建的多边形。因此,曲线不会那么平滑,而是具有尖锐的“锯齿状”线。嗯
amasephy 2011年

3
@underdark好点。但是,人们总是可以通过将数据与整体周围的多边形(例如数据集的边界框)结合来引入条。一个有趣的问题是“消除”如何选择将条合并到哪个多边形中。这可能会使结果产生偏差(尽管我怀疑这种偏差在大多数应用中是否很重要)。在这种特殊情况下,理想的解决方案是将条子分开或将误差平均化。
ub

该工具的选项之一是将条与相邻的多边形合并在一起,该多边形具有最长的边框(默认选项)或最大的面积。
kenbuja 2011年

4
如果您没有ArcInfo许可证,则位于arcscripts.esri.com/details.asp?dbid=14672处的脚本可通过Python自动执行此操作。几年前我成功使用了它。
斯蒂芬·李德

20

要在QGIS中手动执行此操作,请转到底部Settings|Project Properties...General选项卡上。Snapping options...检查要捕捉的图层,将模式to vertex设置为,并将公差设置为小于您两点之间的最短距离的某个值。如果不确定,请将单位设置为pixels,将公差设置为5之类的值,这样,如果存在一些细节问题,则可以直接放大并确保不捕捉到错误的顶点。

然后编辑矢量层,选择节点工具,然后将误差点移至其对应点。

自动执行操作比较麻烦。AFAIK QGIS没有插件可以使它自动化,尽管PostGIS是在具有捕捉功能的GEOS上构建的,但它们并未暴露于PostGIS。可能可以编写查询来检查多边形的每个点以查找捕捉距离内的邻居,但这目前超出了我的理解范围。

GRASS具有v.clean.snap,您可以通过QGIS对其进行访问,但是还有创建GRASS数据集的额外步骤。


您始终可以使用QGIS处理工具箱,并将v.clean.snap直接应用于shapefile。
SAnderka

v.clean.snap不可用。我使用v.clean,然后选择了捕捉工具,它给出了一个空层。文档说,捕捉是将线连接到顶点。我想将顶点连接到阈值内的另一个顶点。
neogeomat 2014年

17

如果您熟悉QGIS:在QGIS干线1.9(可以通过OSGEO安装程序作为qgis.dev安装,请参见qgis主页)中,它是矢量菜单中的一项新功能,称为“消除条形多边形”,它可以完成您的工作想。您可以选择有问题的多边形,然后根据共同的边界或面积比例将它们合并到相邻的多边形中。试试看!


3
要更新此答案,请在稳定的包装中找到QGIS 2.18.1中的“消除条形多边形”,该标签位于矢量->地理处理工具下。
瓦莱丽·安德森

这适用于主要主体之间的现有散条状多边形,而不适用于多边形之间的间隔。
stragu

15

如果您是QGIS用户,那么您将获得GRASS的全部功能,因为它是完全拓扑的GIS。在QGIS内激活GRASS插件,创建一个位置/地图集,以在其中导入数据。

打开地图集,然后使用v.in.ogr导入脏层:玩两个高级参数“边界捕捉阈值”和“要导入区域的最小大小”。

您也可以使用v.clean模块提供的选项。


10

ArcGIS具有拓扑规则,可帮助您识别和纠正数据中的空白,例如您所指的空白。为了创建拓扑规则,您将需要ArcEditor或ArcInfo许可,并将要素类存储在个人或文件地理数据库中的要素数据集中。

您最有可能希望实施“ 不得有缺口 ”规则。创建了您认为必要的所有规则的规则库后,您将需要验证拓扑,以识别数据中的所有错误。

然后,使用“ 错误检查器”和“ 修复拓扑错误工具”,您可以单独或批量选择要修复的错误以及修复方式(例如,创建新的多边形以填充空白或与附近的较大多边形合并) 。


7

QGIS 2.12(Lyon)工具箱中有一个“消除条形多边形”功能。我敢肯定它也在某些早期版本中。


2

好吧,我一直在使用PostGIS函数(我直接在QGIS上使用),该函数执行递归快照来解决此问题。结果是相当不错的,它只需要一个很好的公差值来获得最佳结果。如果您愿意尝试,请检查一下(在我的情况下,所有的几何都是多重的,因此在我的execute中为st_multi):

CREATE OR REPLACE FUNCTION dsgsnap(tabela text, snap float) RETURNS void AS 
        $BODY$
            DECLARE
            id int;
            BEGIN
                FOR id in execute('select id from '||tabela)
                LOOP
                    EXECUTE     
                'update '||tabela||' as classe set geom = st_multi(res.geom) 
                from 
                    (
                        select st_snap(a.geom, st_collect(b.geom), '||snap||') as geom, a.id as id 
                        from '||tabela||' a, '||tabela||' b 
                        where a.id != b.id and a.id = '||id||' 
                        group by a.id, a.geom
                    ) as res 
                where res.id = classe.id';
                END LOOP;
                RETURN;                        
            END
        $BODY$
        LANGUAGE plpgsql;

1

这不是一个完美的解决方案,但是在大多数情况下,以下两点之一对我有用:

  1. 在QGIS中,以GEOJSON格式保存图层。但是在保存之前,在“另存为”对话框中,将坐标精度设置为3(默认值为15)。这将具有将彼此非常靠近的顶点合并在一起的效果。

  2. 转到Mapshaper,上传文件,然后点击“简化”。在左上角,它将告诉您找到了多少个相交线,并提供了修复它们的选项。我发现此修复程序大约有一半的时间有效。


0

我没有使用过它,但是ET Geowizards将许多ArcEditor和仅ArcInfo处理工具带到ArcView级别许可证(又名ArcGIS Standard)中,具有消除向导,该向导“通过将不需要的多边形(条形图)合并到相邻的多边形或删除它们”。该向导工具包的价格为250美元(价格表)。


0

我遇到了同样的问题,尽管我不了解逻辑,但通过探索工具我可以很轻松地解决问题。![在工具中,转到数据管理工具框,转到要素类,然后通过双击运行集成脚本] [1]

在“脚本”窗口中选择有问题的要素类,然后在XY公差中借助测量工具在多个点上通过测量距离来添加变量,并获得一个平均值,将该值放入公差环境中并应用问题即可解决。现在不行了,但是可以以大约90%的精度解决。![在此处输入图片描述] [2]

我尝试了上述答案中描述的所有其他方法,但要对相邻多边形之间的间隙进行自动校正非常困难且麻烦。


1
如果粘贴链接到你是指图像我可以将它们添加。
DJQ
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.