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

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

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

#1 楼

使用消除(将其与面积最大或共享边界最长的相邻多边形合并)来消除多边形(使用ArcInfo许可)。消除(Eliminate)通常用于去除由叠加操作(如“相交”或“并集”)导致的小条形多边形。

http://help.arcgis.com/en/arcgisdesktop/10.0/help/index .html#// 00170000005p000000.htm



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

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

评论


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

– Underdark♦
2011年6月14日14:46

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

–amasephy
2011年6月14日14:57

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

– hu
2011年6月14日的15:00

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

– kenbuja
2011年6月14日在16:04



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

–斯蒂芬·李
2011年6月15日在2:12

#2 楼

要在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
2014年4月29日在6:56



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

–neogeomat
2014年6月6日下午5:25

#3 楼

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

评论


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

– Valerie Anderson
16 Dec 27 '17:39

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

– Stragu
17年4月21日在4:31

#4 楼

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

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

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

#5 楼

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

您很可能希望实现“必须有间隙”规则。创建了您认为必要的所有规则的规则库后,您将需要验证拓扑,该拓扑将识别数据中的所有错误。

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

#6 楼

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

#7 楼

好吧,我一直在使用PostGIS函数(我直接在QGIS上使用),该函数执行递归快照来解决此问题。结果是相当不错的,它只需要一个很好的公差值就可以得到最好的结果。如果您愿意尝试,请检查一下(在我的情况下,所有的几何图形都是多重的,因此在我的执行程序中为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;


#8 楼

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


在QGIS中,将图层保存为GEOJSON格式。但是在保存之前,在“另存为”对话框中,将坐标精度设置为3(默认值为15)。这将具有团结彼此非常接近的顶点的效果。
转到Mapshaper,上传文件,然后点击“简化”。在左上角,它将告诉您找到了多少个相交线,并提供了修复它们的选项。我发现此修复程序大约有一半的时间有效。


#9 楼

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

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

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

评论


如果将链接粘贴到您要引用的图像,则可以添加它们。

– djq
2012年11月21日在21:32

#10 楼

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