zoukankan      html  css  js  c++  java
  • 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的叠加?或者有没有其他开源(底层)方法可以实现差异性叠加分析。求助各位大侠,应该如何解决,不胜感激。

  • 相关阅读:
    WWF中关于External Data Exchange Service的错误
    通用异常处理框架(转载)
    追MM和23种设计模式(转载)
    编译:XAML与程序代码结合(转载)
    异步编程*(转载)
    出糗~又是工作流!
    由WorkflowOwnershipException 异常,联想出的部署犯案
    Nullable类型,C#溢出检查,typeof运算符和运算符的重载 分类: C# 20121028 19:50 648人阅读 评论(0) 收藏
    我的程序员之路(九)参加郑州微软MVP宣讲会后的一些思考
    C#结构的学习
  • 原文地址:https://www.cnblogs.com/geiao2/p/8060300.html
Copyright © 2011-2022 走看看