先附上實現的相交疊加分析的部分代碼,然后請教個問題,希望能夠得到解答。
/// <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的疊加?或者有沒有其他開源(底層)方法可以實現差異性疊加分析。求助各位大俠,應該如何解決,不勝感激。