SharpMap和NetTopologySuite叠加分析问题

先附上实现的相交叠加分析的部分代码,然后请教个问题,希望能够得到解答。

/// <summary> 执行相交叠加分析 </summary>
private void ExecuteIntersection()
{
string path1 = @"xxxx.shp"; string path2 = @"xxx.shp"; SharpMap.Layers.VectorLayer layGeoms1 = new SharpMap.Layers.VectorLayer("Name1"); SharpMap.Layers.VectorLayer layGeoms2 = new SharpMap.Layers.VectorLayer("Name2"); //获得数据源 layGeoms1.DataSource = new ShapeFile(path1); layGeoms2.DataSource = new ShapeFile(path2); NtsProvider nts1 = new NtsProvider(layGeoms1.DataSource); NtsProvider nts2 = new NtsProvider(layGeoms2.DataSource); //将sharpMap数据转换为NTS数据,执行相交叠加 GisSharpBlog.NetTopologySuite.Geometries.Geometry g1; GisSharpBlog.NetTopologySuite.Geometries.Geometry g2; GisSharpBlog.NetTopologySuite.Geometries.GeometryFactory factory = new GisSharpBlog.NetTopologySuite.Geometries.GeometryFactory(); List<Geometry> sharpMapGeoms = new List<Geometry>(); for (uint i = 0; i < nts1.GetFeatureCount(); i++) { Geometry sharpMapgeom1 = nts1.GetGeometryByID(i); g1 = GeometryConverter.ToNTSGeometry(sharpMapgeom1, factory); for (uint j = 0; j < nts2.GetFeatureCount(); j++) { Geometry sharpMapgeom2 = nts2.GetGeometryByID(j); g2 = GeometryConverter.ToNTSGeometry(sharpMapgeom2, factory); if (g1.Intersects(g2)) { GisSharpBlog.NetTopologySuite.Operation.Overlay.OverlayOp o = new GisSharpBlog.NetTopologySuite.Operation.Overlay.OverlayOp(g1, g2); GisSharpBlog.NetTopologySuite.Geometries.Geometry g = o.GetResultGeometry(SpatialFunctions.Intersection); sharpMapGeoms.Add(GeometryConverter.ToSharpMapGeometry(g)); } } } }
//其中引用的GeometryConverter.cs和NtsProvider.cs文件在此省略。

由于本人想得到的是差异性叠加分析(标识叠加),但由于SharpMap和NTS中并未提供此方法,经询问,通过开源包中提供的方法间接得到差异性叠加分析结果,方法思路如下:

实现的步骤是通过获取图层,进行叠加分析,生成分析结果图层并导出。现在的问题是如图的简单多边形叠加(一个多边形与一个多边形)结果没错,但当叠加的两个图层中都是包汗多个多边形时就不正确了,比如多个多边形与多个多边形相交取反叠加,在叠加的过程中得到的多边形又会出现重复的部分。(开源包提供的方法是一个Geometry与另一个Geometry的叠加)如下图:

是不是这开源包只能实现在可视地图上框选两个Geometry,求这两Geometry的叠加?或者有没有其他开源(底层)方法可以实现差异性叠加分析。求助各位大侠,应该如何解决,不胜感激。

原文地址:https://www.cnblogs.com/geiao2/p/8060300.html