【NetTopologySuite类库】C#生成Delaunay三角网、生成凹包ConcaveHull

本文主要是介绍【NetTopologySuite类库】C#生成Delaunay三角网、生成凹包ConcaveHull,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

介绍

三角网

生成三角网的API地址:https://nettopologysuite.github.io/NetTopologySuite/api/NetTopologySuite.Triangulate.ConformingDelaunayTriangulationBuilder.html#methods

凹包

生成凹包的API地址:
https://nettopologysuite.github.io/NetTopologySuite/api/NetTopologySuite.Algorithm.Hull.ConcaveHull.html

构造一组点的凹壳。凹壳可能是包含所有输入点的非凸多边形。给定的一组点具有由数值目标参数确定的凹陷度不断增加的外壳序列。

凹壳是通过去除点的Delaunay三角剖分的最长外边缘来构建的,直到达到目标标准参数。

【可见此处的凹包是基于三角网生成的】

两个参数:

  • Maximum Edge Length Ratio:凹包的最长边缘的长度不大于该值。
  • Maximum Edge Length Factor:将“最大边长”确定为Delaunay三角剖分中最长和最短边长之差的一小部分。这会将“最大边长”标准化为无标度。值为1将生成凸包;值0产生最大凹度。

优选的参数是使用Maximum Edge Length Factor(最大边长比),因为它是无标度的和局部的(因此不需要对存在的凹陷总量进行假设)。可以通过直接设置“最大边长”来使用其他长度标准。

生成三角网示例

  1. 先用wkt创建一个多边形(如下图所示,绿色点为特意标注的多边形顶点)
var wkt = "polygon((0 0,0 6,3 6,3 5,5 5,5 3,2 3,2 2,5 2,5 1,6 1,6 0,2 0,2 -1,7 -1,7 -2,-1 -2,-1 -1,0 -1,0 0))";
var geo = new WKTReader().Read(wkt);

在这里插入图片描述
2. 利用上述多边形创建三角网(本质上是使用多边形的顶点)。

var wkt = "polygon((0 0,0 6,3 6,3 5,5 5,5 3,2 3,2 2,5 2,5 1,6 1,6 0,2 0,2 -1,7 -1,7 -2,-1 -2,-1 -1,0 -1,0 0))";
var geo = new WKTReader().Read(wkt);
var tri = new ConformingDelaunayTriangulationBuilder();
tri.SetSites(geo);
var tris = tri.GetEdges(GeometryFactory.Default);
//自行将tris输出成shp文件,如下图所示

在这里插入图片描述

生成凹包

默认参数

如介绍中所言,凹壳是通过去除点的Delaunay三角剖分的最长外边缘来构建的。

下面,使用默认参数生成面积最小(删掉的三角边最多,再删就会导致丢失顶点了)的凹包:

var gconcaveHull = new ConcaveHull(geo);
gconcaveHull.MaximumEdgeLength = 0;//默认值就是0
var geo_concaveHull = gconcaveHull.GetHull();

参数MaximumEdgeLength的默认值就是0,此时所有长度大于0的边,在不丢失顶点的情况都会被删掉。删掉这些边后形成的多边形就是凹包了:

在这里插入图片描述

参数MaximumEdgeLength=3

修改参数MaximumEdgeLength=3,即提高边被删除的底线,边长必须大于3,才会被删除。

如下图所示,箭头所指的边不再被删除。

当提高MaximumEdgeLength的值后,更多的边会被保留。
在这里插入图片描述

参数MaximumEdgeLengthRatio=0.4

除了通过参数MaximumEdgeLength设置具体的长度限制,

还可以通过参数MaximumEdgeLengthRatio设置无标度的比例限制。

例如设置0.4的容差:

gconcaveHull.MaximumEdgeLengthRatio = 0.4;

在这里插入图片描述
MaximumEdgeLengthRatio参数的作用方式:

  1. 找到所有最长边L
  2. 对于任意边长K,如果1- K / L > MaximumEdgeLengthRatio则删除边K,否则保留边K。
    通过计算,得到结果:L1应被删除,L2应被保留。

这篇关于【NetTopologySuite类库】C#生成Delaunay三角网、生成凹包ConcaveHull的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1044300

相关文章

Maven项目中集成数据库文档生成工具的操作步骤

《Maven项目中集成数据库文档生成工具的操作步骤》在Maven项目中,可以通过集成数据库文档生成工具来自动生成数据库文档,本文为大家整理了使用screw-maven-plugin(推荐)的完... 目录1. 添加插件配置到 pom.XML2. 配置数据库信息3. 执行生成命令4. 高级配置选项5. 注意事

使用C#删除Excel表格中的重复行数据的代码详解

《使用C#删除Excel表格中的重复行数据的代码详解》重复行是指在Excel表格中完全相同的多行数据,删除这些重复行至关重要,因为它们不仅会干扰数据分析,还可能导致错误的决策和结论,所以本文给大家介绍... 目录简介使用工具C# 删除Excel工作表中的重复行语法工作原理实现代码C# 删除指定Excel单元

MybatisX快速生成增删改查的方法示例

《MybatisX快速生成增删改查的方法示例》MybatisX是基于IDEA的MyBatis/MyBatis-Plus开发插件,本文主要介绍了MybatisX快速生成增删改查的方法示例,文中通过示例代... 目录1 安装2 基本功能2.1 XML跳转2.2 代码生成2.2.1 生成.xml中的sql语句头2

C#使用MQTTnet实现服务端与客户端的通讯的示例

《C#使用MQTTnet实现服务端与客户端的通讯的示例》本文主要介绍了C#使用MQTTnet实现服务端与客户端的通讯的示例,包括协议特性、连接管理、QoS机制和安全策略,具有一定的参考价值,感兴趣的可... 目录一、MQTT 协议简介二、MQTT 协议核心特性三、MQTTNET 库的核心功能四、服务端(BR

C#继承之里氏替换原则分析

《C#继承之里氏替换原则分析》:本文主要介绍C#继承之里氏替换原则,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#里氏替换原则一.概念二.语法表现三.类型检查与转换总结C#里氏替换原则一.概念里氏替换原则是面向对象设计的基本原则之一:核心思想:所有引py

C#实现访问远程硬盘的图文教程

《C#实现访问远程硬盘的图文教程》在现实场景中,我们经常用到远程桌面功能,而在某些场景下,我们需要使用类似的远程硬盘功能,这样能非常方便地操作对方电脑磁盘的目录、以及传送文件,这次我们将给出一个完整的... 目录引言一. 远程硬盘功能展示二. 远程硬盘代码实现1. 底层业务通信实现2. UI 实现三. De

C#通过进程调用外部应用的实现示例

《C#通过进程调用外部应用的实现示例》本文主要介绍了C#通过进程调用外部应用的实现示例,以WINFORM应用程序为例,在C#应用程序中调用PYTHON程序,具有一定的参考价值,感兴趣的可以了解一下... 目录窗口程序类进程信息类 系统设置类 以WINFORM应用程序为例,在C#应用程序中调用python程序

基于C#实现MQTT通信实战

《基于C#实现MQTT通信实战》MQTT消息队列遥测传输,在物联网领域应用的很广泛,它是基于Publish/Subscribe模式,具有简单易用,支持QoS,传输效率高的特点,下面我们就来看看C#实现... 目录1、连接主机2、订阅消息3、发布消息MQTT(Message Queueing Telemetr

C#特性(Attributes)和反射(Reflection)详解

《C#特性(Attributes)和反射(Reflection)详解》:本文主要介绍C#特性(Attributes)和反射(Reflection),具有很好的参考价值,希望对大家有所帮助,如有错误... 目录特性特性的定义概念目的反射定义概念目的反射的主要功能包括使用反射的基本步骤特性和反射的关系总结特性

使用Python自动化生成PPT并结合LLM生成内容的代码解析

《使用Python自动化生成PPT并结合LLM生成内容的代码解析》PowerPoint是常用的文档工具,但手动设计和排版耗时耗力,本文将展示如何通过Python自动化提取PPT样式并生成新PPT,同时... 目录核心代码解析1. 提取 PPT 样式到 jsON关键步骤:代码片段:2. 应用 JSON 样式到