ArcGIS Pro SDK (九)几何 7 多点

07-21 1678阅读

ArcGIS Pro SDK (九)几何 7 多点

文章目录

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

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

      ArcGIS Pro SDK (九)几何 7 多点
      (图片来源网络,侵删)

      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();
      
VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]