• 【ArcGIS Pro二次开发】(68):计算面要素的四至点


    这个工具的目的是计算面要素的四至点。

    四至点并不是要素的MaxX,MaxY,MinX,MinY四个值。如果要计算这四个字,可以直接使用系统自带的【计算几何属性】进行计算:

    这里要计算的是要素的最东、西、南、北的四个点坐标。

    因此首先要获取这四个点,再获取它的坐标。


    一、要实现的功能

     

    如上图所示,在待处理的要素上右键单击,在弹出的右键列表中,点击【CC工具箱——面要素计算四至】按钮即可。

    工具没有输入参数,点击后,要素会生成8个字段,并赋值四至坐标:


    二、实现流程

    工具的实现流程并不长。

    1、首先新建8个字段,直接调用GP工具即可。

    2、为了找出最东、西、南、北的四个点,先要找到要素的边界值,即最东、西、南、北的边界。

    3、再获取要素的所有点,循环比对,如果点的x坐标等于边界值最小x坐标,就表示这个点是最南的点。

    以此类推,可以找出剩下的最东、西、北三个点。

    4、最后将找到四个点的坐标写入字段值即可。

    完整代码如下:

    1. await QueuedTask.Run(() =>
    2. {
    3. Map map = MapView.Active.Map;
    4. // 获取图层
    5. FeatureLayer featureLayer = MapView.Active.GetSelectedLayers().FirstOrDefault() as FeatureLayer;
    6. // 如果选择的不是面要素或是无选择,则返回
    7. if (featureLayer.ShapeType != esriGeometryType.esriGeometryPolygon || featureLayer == null)
    8. {
    9. MessageBox.Show("错误!请选择一个面要素!");
    10. return;
    11. }
    12. pw.AddProcessMessage(20, "添加字段");
    13. // 添加字段
    14. Arcpy.AddField(featureLayer.Name, "东_X", "DOUBLE");
    15. Arcpy.AddField(featureLayer.Name, "东_Y", "DOUBLE");
    16. Arcpy.AddField(featureLayer.Name, "西_X", "DOUBLE");
    17. Arcpy.AddField(featureLayer.Name, "西_Y", "DOUBLE");
    18. Arcpy.AddField(featureLayer.Name, "南_X", "DOUBLE");
    19. Arcpy.AddField(featureLayer.Name, "南_Y", "DOUBLE");
    20. Arcpy.AddField(featureLayer.Name, "北_X", "DOUBLE");
    21. Arcpy.AddField(featureLayer.Name, "北_Y", "DOUBLE");
    22. pw.AddProcessMessage(30, time_base, "计算四至坐标");
    23. using (RowCursor rowCursor = featureLayer.Search())
    24. {
    25. while (rowCursor.MoveNext())
    26. {
    27. using (Feature feature = rowCursor.Current as Feature)
    28. {
    29. // 标记一个初始坐标
    30. double e_x = 0;
    31. double n_y = 0;
    32. double w_x = 100000000;
    33. double s_y = 100000000;
    34. Geometry geometry = feature.GetShape();
    35. if (geometry is Polygon polygon)
    36. {
    37. // 找出四至点
    38. foreach (var pt in polygon.Points)
    39. {
    40. if (pt.X > e_x) { e_x = pt.X; }
    41. if (pt.Y > n_y) { n_y = pt.Y; }
    42. if (pt.X < w_x) { w_x = pt.X; }
    43. if (pt.Y < s_y) { s_y = pt.Y; }
    44. }
    45. // 标记四至点
    46. foreach (var pt in polygon.Points)
    47. {
    48. if (pt.X == w_x)
    49. {
    50. feature["西_X"] = pt.X;
    51. feature["西_Y"] = pt.Y;
    52. }
    53. if (pt.X == e_x)
    54. {
    55. feature["东_X"] = pt.X;
    56. feature["东_Y"] = pt.Y;
    57. }
    58. if (pt.Y == n_y)
    59. {
    60. feature["北_X"] = pt.X;
    61. feature["北_Y"] = pt.Y;
    62. }
    63. if (pt.Y == s_y)
    64. {
    65. feature["南_X"] = pt.X;
    66. feature["南_Y"] = pt.Y;
    67. }
    68. }
    69. }
    70. feature.Store();
    71. }
    72. }
    73. }
    74. });

    三、工具文件分享

    我把工具都集合成工具箱,不再单独放单个工具,可以到这里下载完整工具箱,会不断更新:

    【ArcGIS Pro二次开发】:CC工具箱icon-default.png?t=N7T8https://blog.csdn.net/xcc34452366/article/details/131506345PS:可以直接点击...bin\Debug\net6.0-windows\下的.esriAddinX文件直接安装。

  • 相关阅读:
    L3-006 迎风一刀斩
    仿真数据检查器如何比较数据
    cookie加密8
    [2022 牛客多校4 C] Easy Counting Problem (生成函数 NTT)
    Linux下编译main.c文件,命令中的gcc -o -c是什么意思
    【uniapp】安装与使用uView组件库:
    推荐20套适合python下django框架的毕业设计毕设课题
    Macos文件图像比较工具:Kaleidoscope for Mac
    频域中的后门攻击论文笔记
    node.js环境安装及环境变量
  • 原文地址:https://blog.csdn.net/xcc34452366/article/details/133357840