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

  • 相关阅读:
    java8新特性LocalDate、LocalTime、LocalDateTime的学习
    vue在移动端使用alloyfinger手势库操作图片拖拽、缩放
    移动端设置滚动后显示滚动条
    springboot使用swagger2生成开发文档
    学习Validator验证框架总结
    对于线程池ThreadPool的学习总结
    apache-commons和guava的工具类
    Mac中anaconda中创建虚拟python环境,配置flask
    ubuntu系统中解决桌面分辨率不适配问题
    Linux服务器命令说明
  • 原文地址:https://www.cnblogs.com/geiao2/p/8060300.html
Copyright © 2011-2022 走看看