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

ArcGIS Pro SDK (九)几何 7 多点

ArcGIS Pro SDK (九)几何 7 多点

文章目录

  • ArcGIS Pro SDK (九)几何 7 多点
    • 1 构造多点 - 从映射点的枚举
    • 2 构造多点 - 使用 MultipointBuilderEx
    • 3 修改多点的点
    • 4 从多点检索点、2D 坐标、3D 坐标

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

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

// 使用 builderEx 的便捷方法或者使用 builderEx 构造函数。List<MapPoint> list = new List<MapPoint>();
list.Add(MapPointBuilderEx.CreateMapPoint(1.0, 1.0));
list.Add(MapPointBuilderEx.CreateMapPoint(1.0, 2.0));
list.Add(MapPointBuilderEx.CreateMapPoint(2.0, 2.0));
list.Add(MapPointBuilderEx.CreateMapPoint(2.0, 1.0));// 使用 builderEx 构造函数 - 不需要在 MCT 上运行。
// 使用 AttributeFlags.NoAttributes - 我们在列表中有 2d 点
MultipointBuilderEx builderEx = new MultipointBuilderEx(list, AttributeFlags.None);
Multipoint multiPoint = builderEx.ToGeometry() as Multipoint;
int ptCount = builderEx.PointCount;// builderEx 便捷方法不需要在 MCT 上运行
multiPoint = MultipointBuilderEx.CreateMultipoint(list);
// multiPoint.HasZ, HasM, HasID 将为 false - 属性是根据列表中点的属性状态确定的// 或者具体设置状态
multiPoint = MultipointBuilderEx.CreateMultipoint(list, AttributeFlags.None);
// multiPoint.HasM = falsemultiPoint = MultipointBuilderEx.CreateMultipoint(list, AttributeFlags.HasM);
// multiPoint.HasM = trueptCount = multiPoint.PointCount;

2 构造多点 - 使用 MultipointBuilderEx

Coordinate2D[] coordinate2Ds = new Coordinate2D[] { new Coordinate2D(1, 2), new Coordinate2D(-1, -2) };
SpatialReference sr = SpatialReferences.WGS84;MultipointBuilderEx builder = new MultipointBuilderEx(coordinate2Ds, sr);// builder.PointCount = 2builder.HasZ = true;
// builder.Zs.Count = 2
// builder.Zs[0] = 0
// builder.Zs[1] = 0builder.HasM = true;
// builder.Ms.Count = 2
// builder.Ms[0] = NaN
// builder.Ms[1] = NaNbuilder.HasID = true;
// builder.IDs.Count = 2
// builder.IDs[0] = 0
// builder.IDs[1] = 0// 设置为空
builder.SetEmpty();
// builder.Coords.Count = 0
// builder.Zs.Count = 0
// builder.Ms.Count = 0
// builder.IDs.Count = 0// 重置坐标
List<Coordinate2D> inCoords = new List<Coordinate2D>() { new Coordinate2D(1, 2), new Coordinate2D(3, 4), new Coordinate2D(5, 6) };
builder.Coordinate2Ds = inCoords;
// builder.Coords.Count = 3
// builder.HasZ = true
// builder.HasM = true
// builder.HasID = truedouble[] zs = new double[] { 1, 2, 1, 2, 1, 2 };
builder.Zs = zs;   
// builder.Zs.Count = 6double[] ms = new double[] { 0, 1 };
builder.Ms = ms;   
// builder.Ms.Count = 2// 坐标现在为   (x, y, z, m, id)
//  (1, 2, 1, 0, 0), (3, 4, 2, 1, 0) (5, 6, 1, NaN, 0)MapPoint mapPoint = builder.GetPoint(2);
// mapPoint.HasZ = true
// mapPoint.HasM = true
// mapPoint.HasID = true
// mapPoint.Z  = 1
// mapPoint.M = NaN
// mapPoint.ID = 0// 添加一个 M 到列表
builder.Ms.Add(2);
// builder.Ms.count = 3// 坐标现在为   (x, y, z, m, id)
//  (1, 2, 1, 0, 0), (3, 4, 2, 1, 0) (5, 6, 1, 2, 0)// 现在再次获取第二个点;它现在将有一个 M 值
mapPoint = builder.GetPoint(2);
// mapPoint.M = 2int[] ids = new int[] { -1, -2, -3 };
// 分配 ID 值
builder.IDs = ids;// 坐标现在为   (x, y, z, m, id)
//  (1, 2, 1, 0, -1), (3, 4, 2, 1, -2) (5, 6, 1, 2, -3)// 创建一个新点
MapPoint point = MapPointBuilderEx.CreateMapPoint(-300, 400, 4);
builder.SetPoint(2, point);// 坐标现在为   (x, y, z, m, id)
//  (1, 2, 1, 0, -1), (3, 4, 2, 1, -2) (-300, 400, 4, NaN, 0)builder.RemovePoints(1, 3);
// builder.PointCount = 1

3 修改多点的点

// 假设一个多点是由 4 个点构成的
// 修改后的多点将移除第一个点并移动最后一个点// 使用 builderEx 构造函数 = 不需要在 MCT 上运行。
MultipointBuilderEx builderEx = new MultipointBuilderEx(multipoint);
// 移除第一个点
builderEx.RemovePoint(0);
// 修改最后一个点的坐标
var ptEx = builderEx.GetPoint(builderEx.PointCount - 1);
builderEx.RemovePoint(builderEx.PointCount - 1);var newPtEx = MapPointBuilderEx.CreateMapPoint(ptEx.X + 1.0, ptEx.Y + 2.0);
builderEx.AddPoint(newPtEx);
Multipoint modifiedMultiPointEx = builderEx.ToGeometry() as Multipoint;

4 从多点检索点、2D 坐标、3D 坐标

ReadOnlyPointCollection points = multipoint.Points;
IReadOnlyList<Coordinate2D> coords2d = multipoint.Copy2DCoordinatesToList();
IReadOnlyList<Coordinate3D> coords3d = multipoint.Copy3DCoordinatesToList();
http://www.lryc.cn/news/403154.html

相关文章:

  • 服务器注意事项
  • 学生信息管理系统设计
  • Python求均值,方差,标准差
  • DDei在线设计器-HTML渲染
  • 【React Hooks原理 - useSyncExternalStore】
  • C++STL初阶(7):list的运用与初步了解
  • el-menu弹出菜单样式不生效
  • Springboot 3.x - Reactive programming (2)
  • WPF+Mvvm 项目入门完整教程(一)
  • [解决方法]git上传的项目markdown文件的图片无法显示
  • 【React】使用 antd 加载组件实现 iframe 的加载效果
  • Python爬虫(1) --基础知识
  • 云原生系列 - Jenkins
  • django踩坑(四):终端输入脚本可正常执行,而加入crontab中无任何输出
  • 计算机网络入门 -- 常用网络协议
  • 【LabVIEW作业篇 - 4】:属性节点赋值和直接节点赋值的区别体现
  • 【数据库系列】Parquet 文件介绍
  • A Survey on Multimodal Large Language Models综述
  • Leetcode3208. 交替组 II
  • 汇编教程2
  • 使用 git 和 GitHub 互动
  • 【Spring Boot 中的 `banner.txt` 和 `logback-spring.xml` 配置】
  • Python Linux环境(Centos8)安装minicoda3+jupyterlab
  • Python PDF Magic:合并和拆分随心所欲
  • Gmsh应用程序编程接口
  • DP 203 学习笔记
  • SQLite 事务
  • LabVIEW和Alicat Scientific质量流量计实现精确流量控制
  • 2024-07-19 Unity插件 Odin Inspector10 —— Misc Attributes
  • Go操作Redis详解