当前位置: 首页 > news >正文

ArcGIS Pro SDK (九)几何 5 多边形

ArcGIS Pro SDK (九)几何 5 多边形

文章目录

  • ArcGIS Pro SDK (九)几何 5 多边形
    • 1 构造多边形 - 从映射点的枚举
    • 2 构造多边形 - 从包络
    • 3 获取多边形的点
    • 4 获取多边形的各个部分
    • 5 枚举多边形的各个部分
    • 6 获取多边形的线段
    • 7 构建圆环多边形
    • 8 创建 N 侧正多边形
    • 9 获取多边形的外环

环境:Visual Studio 2022 + .NET6 + ArcGIS Pro SDK 3.0

1 构造多边形 - 从映射点的枚举

// 使用 builderEx 便捷方法或使用 builderEx 构造函数。MapPoint pt1 = MapPointBuilderEx.CreateMapPoint(1.0, 1.0);
MapPoint pt2 = MapPointBuilderEx.CreateMapPoint(1.0, 2.0);
MapPoint pt3 = MapPointBuilderEx.CreateMapPoint(2.0, 2.0);
MapPoint pt4 = MapPointBuilderEx.CreateMapPoint(2.0, 1.0);List<MapPoint> list = new List<MapPoint>() { pt1, pt2, pt3, pt4 };Polygon polygon = PolygonBuilderEx.CreatePolygon(list, SpatialReferences.WGS84);
// polygon.HasZ 将为 false - 它由列表中点的 HasZ 标志决定// 或者特别使用 AttributeFlags.NoAttributes
polygon = PolygonBuilderEx.CreatePolygon(list, AttributeFlags.None);// 使用 AttributeFlags.None 因为我们有 2D 点
PolygonBuilderEx polygonBuilder = new PolygonBuilderEx(list, AttributeFlags.None);
polygonBuilder.SpatialReference = SpatialReferences.WGS84;
polygon = polygonBuilder.ToGeometry();

2 构造多边形 - 从包络

// 使用 builderEx 便捷方法或使用 builderEx 构造函数。MapPoint minPt = MapPointBuilderEx.CreateMapPoint(1.0, 1.0);
MapPoint maxPt = MapPointBuilderEx.CreateMapPoint(2.0, 2.0);// 创建包络
Envelope env = EnvelopeBuilderEx.CreateEnvelope(minPt, maxPt);Polygon polygonFromEnv = PolygonBuilderEx.CreatePolygon(env);PolygonBuilderEx polygonBuilderEx = new PolygonBuilderEx(env);
polygonBuilderEx.SpatialReference = SpatialReferences.WGS84;
polygonFromEnv = polygonBuilderEx.ToGeometry() as Polygon;

3 获取多边形的点

// 获取点作为只读集合
ReadOnlyPointCollection pts = polygon.Points;// 获取点的枚举
IEnumerator<MapPoint> enumPts = polygon.Points.GetEnumerator();// 获取点坐标作为只读的 Coordinate2D 列表
IReadOnlyList<Coordinate2D> coordinates = polygon.Copy2DCoordinatesToList();// 获取点坐标作为只读的 Coordinate3D 列表
IReadOnlyList<Coordinate3D> coordinates3D = polygon.Copy3DCoordinatesToList();

4 获取多边形的各个部分

// 获取部分作为只读集合
ReadOnlyPartCollection parts = polygon.Parts;

5 枚举多边形的各个部分

int numSegments = 0;
IEnumerator<ReadOnlySegmentCollection> segments = polygon.Parts.GetEnumerator();
while (segments.MoveNext())
{ReadOnlySegmentCollection seg = segments.Current;numSegments += seg.Count;foreach (Segment s in seg){// 处理线段}
}

6 获取多边形的线段

List<Segment> segmentList = new List<Segment>(30);
ICollection<Segment> collection = segmentList;
polygon.GetAllSegments(ref collection);
// segmentList.Count = 4
// segmentList.Capacity = 30// 使用线段构建另一个多边形
Polygon polygonFromSegments = PolygonBuilderEx.CreatePolygon(collection);

7 构建圆环多边形

List<Coordinate2D> outerCoordinates = new List<Coordinate2D>();
outerCoordinates.Add(new Coordinate2D(10.0, 10.0));
outerCoordinates.Add(new Coordinate2D(10.0, 20.0));
outerCoordinates.Add(new Coordinate2D(20.0, 20.0));
outerCoordinates.Add(new Coordinate2D(20.0, 10.0));// 定义内部多边形为逆时针方向
List<Coordinate2D> innerCoordinates = new List<Coordinate2D>();
innerCoordinates.Add(new Coordinate2D(13.0, 13.0));
innerCoordinates.Add(new Coordinate2D(17.0, 13.0));
innerCoordinates.Add(new Coordinate2D(17.0, 17.0));
innerCoordinates.Add(new Coordinate2D(13.0, 17.0));PolygonBuilderEx pbEx = new PolygonBuilderEx(outerCoordinates);
Polygon donutEx = pbEx.ToGeometry() as Polygon;
double areaEx = donutEx.Area;       // 面积 = 100pbEx.AddPart(innerCoordinates);
donutEx = pbEx.ToGeometry() as Polygon;areaEx = donutEx.Area;    // 面积 = 84.0areaEx = GeometryEngine.Instance.Area(donutEx);    // 面积 = 84.0

8 创建 N 侧正多边形

// <summary>
// 创建一个 N 边正多边形。 正多边形是等角(所有角度相等)
// 和等边(所有边长相等)的多边形。 请参阅 https://en.wikipedia.org/wiki/Regular_polygon
// </summary>
// <param name="numSides">多边形的边数。</param>
// <param name="center">多边形的中心。</param>
// <param name="radius">从多边形中心到顶点的距离。</param>
// <param name="rotation">多边形起点的旋转角度(以弧度为单位)。起点将
// 从正 x 轴逆时针旋转。</param>
// <returns>N 边正多边形。</returns>
// <exception cref="ArgumentException">边数小于 3。</exception>
public Polygon CreateRegularPolygon(int numSides, Coordinate2D center, double radius, double rotation)
{if (numSides < 3)throw new ArgumentException();Coordinate2D[] coords = new Coordinate2D[numSides + 1];double centerX = center.X;double centerY = center.Y;double x = radius * Math.Cos(rotation) + centerX;double y = radius * Math.Sin(rotation) + centerY;Coordinate2D start = new Coordinate2D(x, y);coords[0] = start;double da = 2 * Math.PI / numSides;for (int i = 1; i < numSides; i++){x = radius * Math.Cos(i * da + rotation) + centerX;y = radius * Math.Sin(i * da + rotation) + centerY;coords[i] = new Coordinate2D(x, y);}coords[numSides] = start;return PolygonBuilderEx.CreatePolygon(coords);
}

9 获取多边形的外环

public void GetExteriorRings(Polygon inputPolygon)
{if (inputPolygon == null || inputPolygon.IsEmpty)return;// 多边形部分数int partCount = inputPolygon.PartCount;// 多边形外环数int numExtRings = inputPolygon.ExteriorRingCount;// 获取多边形的外环集IList<Polygon> extRings = inputPolygon.GetExteriorRings();// 测试每个部分是否为“外环”for (int idx = 0; idx < partCount; idx++){bool isExteriorRing = inputPolygon.IsExteriorRing(idx);var ring = inputPolygon.GetExteriorRing(idx);}
}

相关文章:

ArcGIS Pro SDK (九)几何 5 多边形

ArcGIS Pro SDK &#xff08;九&#xff09;几何 5 多边形 文章目录 ArcGIS Pro SDK &#xff08;九&#xff09;几何 5 多边形1 构造多边形 - 从映射点的枚举2 构造多边形 - 从包络3 获取多边形的点4 获取多边形的各个部分5 枚举多边形的各个部分6 获取多边形的线段7 构建圆环…...

Docker 镜像使用和安装

​ 1、简介 Docker是一个开源的应用容器引擎&#xff1b;是一个轻量级容器技术&#xff1b; Docker支持将软件编译成一个镜像&#xff1b;然后在镜像中各种软件做好配置&#xff0c;将镜像发布出去&#xff0c;其他使用者可以直接使用这个镜像&#xff1b; 运行中的这个镜像…...

JAVA:Filer过滤器+案例:请求IP访问限制和请求返回值修改

JAVA&#xff1a;Filer过滤器 介绍 Java中的Filter也被称为过滤器&#xff0c;它是Servlet技术的一部分&#xff0c;用于在web服务器上拦截请求和响应&#xff0c;以检查或转换其内容。 Filter的urlPatterns可以过滤特定地址http的请求&#xff0c;也可以利用Filter对访问请求…...

FastAPI -- 第三弹(自定义响应、中间件、代理、WebSockets)

路径操作的高级配置 OpenAPI 的 operationId from fastapi import FastAPIapp FastAPI()# 通过 operation_id 参数设置 app.get("/items/", operation_id"some_specific_id_you_define") async def read_items():return [{"item_id": "F…...

网安小贴士(16)网络安全体系

前言 网络安全体系是一个综合性的系统&#xff0c;旨在保护网络系统中的硬件、软件和数据免受未经授权的访问、泄露、破坏或篡改。这个体系涉及多个方面&#xff0c;包括网络安全策略、安全技术和安全管理等。 一、网络安全体系概述 网络安全体系通常包括以下几个关键组成部分…...

UCOSIII 中断管理接口剖析

引言 在实时操作系统中&#xff0c;中断处理是一个非常重要的环节。理解和掌握中断处理流程对提高系统实时性和稳定性至关重要。本文将详细解析uCOS-III内核中的中断管理接口&#xff0c;包括 OSIntEnter() 和 OSIntExit() 函数的流程&#xff0c;并结合流程图对各个步骤进行说…...

windows 11 PC查询连接过的wlan密码

1:管理员打开cmd 2:输入netsh wlan show profiles 3:netsh wlan show profiles Shw2024-5G keyclear 密码关键内容&#xff1a;12345678...

npm install 出现canvas错误

npm install canvas2.8.0 --ignore-scripts只要是&#xff1a;npm ERR! Failed at the XXXX.X.X install script 这种错误 都可以&#xff1a;npm install XXXX.X.X --ignore-scripts进行更改 https://blog.csdn.net/YXWik/article/details/119039561...

Python爬虫入门篇学习记录

免责声明 本文的爬虫知识仅用于合法和合理的数据收集&#xff0c;使用者需遵守相关法律法规及目标网站的爬取规则&#xff0c;尊重数据隐私&#xff0c;合理设置访问频率&#xff0c;不得用于非法目的或侵犯他人权益。因使用网络爬虫产生的任何法律纠纷或损失&#xff0c;由使用…...

怎样对 PostgreSQL 中的慢查询进行分析和优化?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01;&#x1f4da;领书&#xff1a;PostgreSQL 入门到精通.pdf 文章目录 怎样对 PostgreSQL 中的慢查询进行分析和优化&#xff1f;一、理解慢查询的危害二、找出慢查询&#x…...

Springboot项目远程部署gitee仓库(docker+Jenkins+maven+git)

创建一个Springboot项目&#xff0c;勾选web将该项目创建git本地仓库&#xff0c;再创建远程仓库推送上去 创建TestController RestController RequestMapping("/test") public class TestController { GetMapping("/hello") public String sayHelloJe…...

Chromium CI/CD 之Jenkins实用指南2024- Windows节点开启SSH服务(七)

1.引言 在现代软件开发和持续集成的过程中&#xff0c;自动化部署和远程管理是不可或缺的关键环节。SSH&#xff08;Secure Shell&#xff09;协议以其强大的安全性和灵活性&#xff0c;成为连接和管理远程服务器的首选工具。对于使用Windows虚拟机作为Jenkins从节点的开发者而…...

阿里大数据面试题集锦及参考答案(3万字长文:持续更新)

目录 MapReduce Shuffle为什么要将数据写入环形缓冲区 MapReduce Shuffle为什么容易发生数据倾斜 Hadoop HA当一个Namenode挂掉,会有数据丢失吗 数据倾斜发生的位置 Combiner了解吗? 什么情况下不能用Combiner? Sum、Count、Count(distinct)哪些能用、哪些不能用Comb…...

springboot 配置 spring data redis

1、在pom.xml引入父依赖spring-boot-starter-parent&#xff0c;其中2.7.18是最后一版支持java8的spring <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.18</…...

Numpy基础用法

Numpy基础用法 numpy.all()num.sun() numpy.all() numpy 中的 all() 函数用于测试 NumPy 数组中所有元素是否都满足指定条件。它接受一个 NumPy 数组作为输入&#xff0c;并返回一个布尔值&#xff0c;指示数组中所有元素是否都满足条件。让我们通过具体的代码示例来深入探讨 n…...

设计模式--享元模式

享元模式&#xff08;Flyweight Pattern&#xff09;是一种结构型设计模式&#xff0c;它通过共享大量细粒度的对象来减少内存消耗。这个模式的核心思想是把对象的状态分为内在状态和外在状态&#xff0c;其中内在状态是可以共享的&#xff0c;而外在状态是需要独立维护的。 享…...

可视化剪辑,账号矩阵,视频分发,聚合私信一体化营销工具 源----代码开发部署方案

可视化剪辑&#xff1a; 为了实现可视化剪辑功能&#xff0c;可以使用流行的视频编辑软件或者开发自己的视频编辑工具。其中&#xff0c;通过设计用户友好的界面&#xff0c;用户可以简单地拖拽和放大缩小视频片段&#xff0c;剪辑出满足需求的视频。在开发过程中&#xff0c;可…...

CCF-CSP认证考试 202406-2 矩阵重塑(其二) 100分题解

更多 CSP 认证考试题目题解可以前往&#xff1a;CSP-CCF 认证考试真题题解 原题链接&#xff1a; 202406-2 矩阵重塑&#xff08;其二&#xff09; 时间限制&#xff1a; 1.0 秒 空间限制&#xff1a; 512 MiB 题目背景 矩阵转置操作是将矩阵的行和列交换的过程。在转置过程…...

初阶数据结构的实现1 顺序表和链表

顺序表和链表 1.线性表1.1顺序表1.1.1静态顺序表&#xff08;不去实现&#xff09;1.1.2动态顺序表1.1.2.1 定义程序目标1.1.2.2 设计程序1.1.2.3编写代码1.1.2.3测试和调试代码 1.1.2 顺序表的问题与思考 1.2链表1.2.1链表的概念及结构1.2.1.1 定义程序目标1.2.1.2 设计程序1.…...

破解反爬虫策略 /_guard/auto.js(一) 原理

背景 当用代码或者postman访问一个网站的时候&#xff0c;访问他的任何地址都会返回<script src"/_guard/auto.js"></script>&#xff0c;但是从浏览器中访问显示的页面是正常的&#xff0c;这种就是网站做了反爬虫策略。本文就是带大家来破解这种策略&…...

消息防撤回方案:RevokeMsgPatcher的通讯内容保护实践

消息防撤回方案&#xff1a;RevokeMsgPatcher的通讯内容保护实践 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁&#xff08;我已经看到了&#xff0c;撤回也没用了&#xff09; 项目地址: https://gitcode.com…...

【DexGraspNet与多指手抓取算法详解】第六章 运动规划与轨迹优化

目录 第六章 运动规划与轨迹优化 6.1 从静态姿态到动态轨迹 6.1.1 抓取前运动规划 6.1.1.1 快速扩展随机树 (RRT) 6.1.1.1.1 状态空间采样 6.1.1.1.2 碰撞检测机制 6.1.1.2 轨迹平滑处理 6.1.1.2.1 B样条插值 6.1.1.2.2 速度与加速度约束 6.2 基于优化的轨迹生成 6.…...

手把手教你学Simulink——基于Simulink的无差拍控制三相整流器高精度电流跟踪

目录 手把手教你学Simulink ——基于Simulink的无差拍控制三相整流器高精度电流跟踪 一、问题背景 二、系统建模与控制原理 1. 三相整流器拓扑 2. dq 轴数学模型(同步旋转坐标系) 3. 无差拍控制律推导 三、整体控制架构 四、Simulink 建模步骤 第一步:搭建三相整流…...

阿里开源Z-Image镜像体验:ComfyUI可视化生成汉服美女实战

阿里开源Z-Image镜像体验&#xff1a;ComfyUI可视化生成汉服美女实战 1. 开篇&#xff1a;当汉服遇见AI绘画 想象一下&#xff0c;你只需要输入"一位穿着汉服的中国女性站在樱花树下"&#xff0c;AI就能在几秒钟内生成一张细节精致的写实风格图像。这不再是科幻场景…...

告别虚拟机!Windows WSL2+GNU Radio玩转HackRF-One无线接收(避坑指南)

告别虚拟机&#xff01;Windows WSL2GNU Radio玩转HackRF-One无线接收&#xff08;避坑指南&#xff09; 在软件定义无线电&#xff08;SDR&#xff09;领域&#xff0c;HackRF-One因其开源设计和亲民价格成为入门首选。然而传统虚拟机方案常因性能损耗、驱动兼容性问题让新手望…...

Z-Image-Turbo-辉夜巫女惊艳效果:神社鸟居背景+巫女舞动姿态动态构图

Z-Image-Turbo-辉夜巫女惊艳效果&#xff1a;神社鸟居背景巫女舞动姿态动态构图 想看看AI如何将“辉夜巫女”的古典神秘与神社鸟居的庄严宁静完美融合&#xff0c;并赋予其灵动的舞姿吗&#xff1f;今天&#xff0c;我们就来深度体验一个名为“Z-Image-Turbo-辉夜巫女”的专属…...

保姆级教程:用华为eNSP复现一个能跑通的企业网毕业设计(含VRRP、OSPF、防火墙策略)

华为eNSP企业网实战&#xff1a;从零构建高可用网络架构 刚接触网络工程的学生或初级工程师&#xff0c;面对企业级网络设计时常常陷入配置迷雾——为什么这里要用VRRP&#xff1f;OSPF区域划分的依据是什么&#xff1f;防火墙策略如何与NAT协同工作&#xff1f;本文将以华为eN…...

如何通过开源数据集创造商业价值:Awesome Public Datasets全攻略

如何通过开源数据集创造商业价值&#xff1a;Awesome Public Datasets全攻略 【免费下载链接】awesome-public-datasets A topic-centric list of HQ open datasets. 项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-public-datasets 在数据驱动决策的时代&a…...

从内核事件到业务洞察:手把手教你用sysdig + Lua脚本定制专属监控看板

从内核事件到业务洞察&#xff1a;用sysdig与Lua脚本构建定制化监控体系 当你的微服务集群每天处理数十亿次API调用时&#xff0c;标准监控指标如CPU使用率或内存消耗早已无法满足需求。真正的挑战在于&#xff1a;当某个关键业务接口的99线突然飙升时&#xff0c;如何快速定位…...

别再只加Mask了!手把手教你用FlashAttention实现真正的Sliding Window Attention(附代码)

突破传统误区&#xff1a;用FlashAttention实现高效滑动窗口注意力的实战指南 在Transformer模型优化领域&#xff0c;许多开发者对滑动窗口注意力(Sliding Window Attention, SWA)存在一个普遍误解——认为只需在注意力矩阵上添加滑动窗口掩码就能实现线性复杂度。这种错误认…...