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

  • 相关阅读:
    Vue里用moment.js
    回到顶部|回到底部功能的实现(Vue)
    Vue绑定下拉框型的树
    Excel导入数据库前后端代码
    Windows应用程序开发笔记-控制和获取其他程序窗口控件内容
    SQL Server查询、添加、修改表和字段的备注描述
    windows 共享文件夹,和共享打印机
    Visual Studio 2015安装过程卡住,解决办法
    python绘图 初识Python绘图
    GCC、LLVM、Clang
  • 原文地址:https://www.cnblogs.com/geiao2/p/8060300.html
Copyright © 2011-2022 走看看