从ArcGIS Desktop或QGIS中的详细图层提取边界?


10

是否可以返回多边形图层的边界(外部)周长?

假设您有美国的地图,为简单起见,细分为县级地图,是否可以从该地图中返回整个国家的边界​​地图?


因此,以美国为例,您的意思是实际上得到了州的轮廓,而不是边界框,对吧?如果是这样,解散县层怎么样?
乍得·库珀

@Chad Cooper-当我分解图层时,我仍然会看到一些显示县和州的行。
dassouki 2010年

Answers:


6

您可以在县图层上进行溶解(请确保只选择了要溶解的县)。


我正在溶解时仍显示一些内部线。
dassouki 2010年

3
您可以缓冲两次以消除内部线路吗?取出,以“吃掉”线条,然后返回,以恢复原始大小。
mwalker 2010年

由于某种原因,这行得通。我知道这是最“棘手的”解决方案,但这是唯一摆脱限制的解决方案
dassouki 2010年

1
+1这实际上是一个很好的解决方案。它通过容纳多边形中的细小条和重叠来工作(并且还克服了软件中的许多固有错误)。
ub

1
我使用了mwalker的建议来进行缓冲。希望您可以将其包括在答案中。
dassouki 2010年

4

您可以使用GRASS模块:v.dissolve 您只需要将数据导入GRASS。是从QGis内部将数据传输到Grass的屏幕录像。


3

请允许我插入自己的项目... 边界生成器将为您提供每个多边形的外部和内部边界(作为线要素)。

共享该边界的两个多边形中的每个多边形的内部边界都带有FID。对于这两个边界之一,外部边界的FID应该为零,因此很容易从完整结果中进行选择。

与执行溶解相比,它的好处在于,我在精度上添加了一些旋钮,以便可以处理不太完美的数据。(两个多边形边界应该相隔多远才能视为一个共享边界?需要多少角度偏差?)

自从我解决了更新以来,它一直处于alpha状态。我很想听听它对您的影响!


2
 public static IPolygon getPolygonFromLayer(ILayer layer)
{
            IFeatureLayer FLayer = layer as IFeatureLayer;
            IFeatureClass FClass = FLayer.FeatureClass;
            return polygonMerge(FClass);
}

   private static IPolygon polygonMerge(IFeatureClass featureClass)
        {
            if (featureClass == null) return null;
            IGeoDataset geoDataset = featureClass as IGeoDataset;

            //You can use a spatial filter to create a subset of features to union together. 
            //To do that, uncomment the next line, and set the properties of the spatial filter here.
            //Also, change the first parameter in the IFeatureCursor.Seach method.
            //ISpatialFilter queryFilter = new SpatialFilterClass();

            IGeometry geometryBag = new GeometryBagClass();

            //Define the spatial reference of the bag before adding geometries to it.
            geometryBag.SpatialReference = geoDataset.SpatialReference;

            //Use a nonrecycling cursor so each returned geometry is a separate object. 
            IFeatureCursor featureCursor = featureClass.Search(null, false);

            IGeometryCollection geometryCollection = geometryBag as IGeometryCollection;
            IFeature currentFeature = featureCursor.NextFeature();

            while (currentFeature != null)
            {
                //Add a reference to this feature's geometry to the bag.
                //Since you don't specify the before or after geometry (missing),
                //the currentFeature.Shape IGeometry is added to the end of the geometryCollection.
                object missing = Type.Missing;
                geometryCollection.AddGeometry(currentFeature.Shape, ref missing, ref missing);
                currentFeature = featureCursor.NextFeature();
            }

            // Create the polygon that will be the union of the features returned from the search cursor.
            // The spatial reference of this feature does not need to be set ahead of time. The 
            // ConstructUnion method defines the constructed polygon's spatial reference to be the 
            // same as the input geometry bag.
            ITopologicalOperator unionedPolygon = new PolygonClass();
            unionedPolygon.ConstructUnion(geometryBag as IEnumGeometry);

            return unionedPolygon as IPolygon;
        }

    }

2

进行解散时获得的分界线是因为边界不是无缝的。

无论使用哪种软件产品,请执行以下操作:

做一个整合替代文字

然后溶解替代文字


我尝试了几次,但没有成功:(,我一直在丢失一些多边形,我也使用了很小的公差和很大的公差
dassouki 2010年

1

听起来好像在arcgis.com上发布的“ 边界容器”示例可以满足您的需求。


这是一个好主意,但这种解决方案不太可能在这种情况下起作用。它旨在通过查找包含特征的形状类别的最小成员(例如矩形,圆形,椭圆形或凸多边形)来提供有关特征的其他几何信息。结果始终是包含形状的结果之一。通常,除非边界已经具有所需的形状,否则它将不会与原始形状完全重合。
ub

1

我知道这是一个古老的问题,但是我认为我刚刚找到的答案是从前面的答案开始引入的,因此我将其分享给在搜索中找到该答案的人。

QGIS(至少从2.14版开始)在“处理”工具箱中的“ QGIS地理算法”>“矢量几何”工具下具有“填充孔”。我发现溶解形状然后在“最大面积”参数设置很高的情况下运行“填充孔”可以解决此问题。


0

您可能还正在寻找以前称为DROPLINE的功能。

尽管从ArcInfo Workstation过渡到ArcGIS Desktop仍然无法幸免,但是目前有一个ArcGIS Idea可以还原它:

最好选择在指定字段具有相同值的多边形之间放置线。此功能以前在ArcPlot中作为DROPLINE命令可用,并且被广泛用作避免使用dissolve命令创建新数据集的方法。


0

您可以使用ST_UNIONQGIS DB Manager中的PostGIS中的功能来聚合图层中的所有多边形(或将多组多边形合并为更大的多边形)。从文档中:

变体2是一个聚合函数,它采用一组几何并将它们合并为单个ST_Geometry,从而不会产生相交区域

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.