【ArcGIS Pro二次开发】(37):图层一键应用村规、国空符号系统

在国空、村规的实际工作中,将要素类加载到地图中后,需要将图斑的符号系统修改成国空或村规的样式。一般的做法是使用样式库或已经做好的图层文件进行匹配,这个工具要实现的功能是直接应用特定的符号系统,其实用的方法也就是GP工具的【应用图层的符号设置】,并没有多少代码,但好处在于有了这个工具,就不用保存预制好的符号库或图层文件了,在任何场景下都可以运用自如。


一、要实现的功能

【ArcGIS Pro二次开发】(37):图层一键应用村规、国空符号系统_第1张图片

如上图所示,右击要素图层,点击【应用符号系统】按钮,在弹出的工具框中,选择要应用的符号类别,工具已经预制了2种符号【国空用地(市级)】和【村规用地】。

实际上随着工作的需要,以后可以增加更多的符号类别。

这里以【村规用地】为例,在右边根据输入要素的字段选择用地名称字段,点击执行即可。

生成结果如下:

【ArcGIS Pro二次开发】(37):图层一键应用村规、国空符号系统_第2张图片

以【国空用地(市级)】为例,生成结果如下:

【ArcGIS Pro二次开发】(37):图层一键应用村规、国空符号系统_第3张图片


二、实现流程

上面说过,实现流程很简单,就是应用了GP工具的【应用图层的符号设置】,基本没有什么细节可说的,直接看代码吧。

不过首先,需要先准备相对应的图层文件:

【ArcGIS Pro二次开发】(37):图层一键应用村规、国空符号系统_第4张图片

然后在代码中复制图层文件,并应用到图层即可:

                // 获取参数
                string field = combox_field.Text;
                // 符号系统选择
                string symbol = "";
                if (rb_gk.IsChecked == true) { symbol = "gk"; }
                else if (rb_cg.IsChecked == true) { symbol = "cg"; }

                await QueuedTask.Run(() =>
                {
                    // 获取工程默认文件夹位置
                    var def_path = Project.Current.HomeFolderPath;
                    // 获取当前地图
                    var map = MapView.Active.Map;
                    // 获取图层
                    FeatureLayer ly = MapView.Active.GetSelectedLayers().FirstOrDefault() as FeatureLayer;
                    // 如果选择的不是面要素或是无选择,则返回
                    if (ly.ShapeType != esriGeometryType.esriGeometryPolygon || ly == null)
                    {
                        MessageBox.Show("请选择一个面要素,否则不能执行!");
                        return;
                    }

                    if (symbol == "gk")
                    {
                        // 复制符号图层文件
                        ToolManager.CopyResourceFile(@"ApplySymbology.Data.Layers.国空用地.lyrx", def_path + @"\国空用地.lyrx");
                        // 应用符号系统
                        Arcpy.ApplySymbologyFromLayer(ly.Name, def_path + @"\国空用地.lyrx", "VALUE_FIELD 用地名称_统一 " + field);
                        File.Delete(def_path + @"\国空用地.lyrx");
                    }
                    else if (symbol == "cg")
                    {
                        // 复制符号图层文件
                        ToolManager.CopyResourceFile(@"ApplySymbology.Data.Layers.村规用地.lyrx", def_path + @"\村规用地.lyrx");
                        // 应用符号系统
                        Arcpy.ApplySymbologyFromLayer(ly.Name, def_path + @"\村规用地.lyrx", "VALUE_FIELD GHDLMC " + field);
                        File.Delete(def_path + @"\村规用地.lyrx");
                    }
                });

三、工程文件分享

 最后,放上工程文件的链接:

ApplySymbologyicon-default.png?t=N4P3https://pan.baidu.com/s/1HwMyhiSm0jHGTu8WatlVKw?pwd=m1d3PS:可以直接点击...bin\Debug\net6.0-windows\下的.esriAddinX文件直接安装。

你可能感兴趣的:(ArcGIS,ArcGIS,Pro,SDK,arcgis,c#,二次开发,Arcgis,Pro,SDK,符号系统)