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 list = new List(); 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 = false multiPoint = MultipointBuilderEx.CreateMultipoint(list, AttributeFlags.HasM); // multiPoint.HasM = true ptCount = 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 = 2 builder.HasZ = true; // builder.Zs.Count = 2 // builder.Zs[0] = 0 // builder.Zs[1] = 0 builder.HasM = true; // builder.Ms.Count = 2 // builder.Ms[0] = NaN // builder.Ms[1] = NaN builder.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 inCoords = new List() { 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 = true double[] zs = new double[] { 1, 2, 1, 2, 1, 2 }; builder.Zs = zs; // builder.Zs.Count = 6 double[] 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 = 2 int[] 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 coords2d = multipoint.Copy2DCoordinatesToList(); IReadOnlyList coords3d = multipoint.Copy3DCoordinatesToList();
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。