arcgis中面积计算_gis中用面要素切割面「建议收藏」

arcgis中面积计算_gis中用面要素切割面「建议收藏」如上图所示,在待处理的要素上右键单击,在弹出的右键列表中,点击【CC工具箱——面要素计算四至】按钮即可

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

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

arcgis中面积计算_gis中用面要素切割面「建议收藏」

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

arcgis中面积计算_gis中用面要素切割面「建议收藏」

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


一、要实现的功能

 arcgis中面积计算_gis中用面要素切割面「建议收藏」

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

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

arcgis中面积计算_gis中用面要素切割面「建议收藏」


二、实现流程

工具的实现流程并不长。

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

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

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

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

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

完整代码如下:

await QueuedTask.Run(() =>
{
    Map map = MapView.Active.Map;
    // 获取图层
    FeatureLayer featureLayer = MapView.Active.GetSelectedLayers().FirstOrDefault() as FeatureLayer;

    // 如果选择的不是面要素或是无选择,则返回
    if (featureLayer.ShapeType != esriGeometryType.esriGeometryPolygon || featureLayer == null)
    {
        MessageBox.Show("错误!请选择一个面要素!");
        return;
    }

    pw.AddProcessMessage(20, "添加字段");
    // 添加字段
    Arcpy.AddField(featureLayer.Name, "东_X", "DOUBLE");
    Arcpy.AddField(featureLayer.Name, "东_Y", "DOUBLE");
    Arcpy.AddField(featureLayer.Name, "西_X", "DOUBLE");
    Arcpy.AddField(featureLayer.Name, "西_Y", "DOUBLE");
    Arcpy.AddField(featureLayer.Name, "南_X", "DOUBLE");
    Arcpy.AddField(featureLayer.Name, "南_Y", "DOUBLE");
    Arcpy.AddField(featureLayer.Name, "北_X", "DOUBLE");
    Arcpy.AddField(featureLayer.Name, "北_Y", "DOUBLE");

    pw.AddProcessMessage(30, time_base, "计算四至坐标");

    using (RowCursor rowCursor = featureLayer.Search())
    {
        while (rowCursor.MoveNext())
        {
            using (Feature feature = rowCursor.Current as Feature)
            {
                // 标记一个初始坐标
                double e_x = 0;
                double n_y = 0;
                double w_x = 100000000;
                double s_y = 100000000;

                Geometry geometry = feature.GetShape();
                if (geometry is Polygon polygon)
                {
                    // 找出四至点
                    foreach (var pt in polygon.Points)
                    {
                        if (pt.X > e_x) { e_x = pt.X; }
                        if (pt.Y > n_y) { n_y = pt.Y; }
                        if (pt.X < w_x) { w_x = pt.X; }
                        if (pt.Y < s_y) { s_y = pt.Y; }
                    }
                    // 标记四至点
                    foreach (var pt in polygon.Points)
                    {
                        if (pt.X == w_x)
                        {
                            feature["西_X"] = pt.X;
                            feature["西_Y"] = pt.Y;
                        }
                        if (pt.X == e_x)
                        {
                            feature["东_X"] = pt.X;
                            feature["东_Y"] = pt.Y;
                        }
                        if (pt.Y == n_y)
                        {
                            feature["北_X"] = pt.X;
                            feature["北_Y"] = pt.Y;
                        }
                        if (pt.Y == s_y)
                        {
                            feature["南_X"] = pt.X;
                            feature["南_Y"] = pt.Y;
                        }
                    }
                }
                feature.Store();
            }
        }
    }
});

三、工具文件分享

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

【ArcGIS Pro二次开发】(68):计算面要素的四至点PS:可以直接点击…bin\Debug\net6.0-windows\下的.esriAddinX文件直接安装。

今天的文章arcgis中面积计算_gis中用面要素切割面「建议收藏」分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/88040.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注