在国空、村规的实际工作中,将要素类加载到地图中后,需要将图斑的符号系统修改成国空或村规的样式。一般的做法是使用样式库或已经做好的图层文件进行匹配,这个工具要实现的功能是直接应用特定的符号系统,其实用的方法也就是GP工具的【应用图层的符号设置】,并没有多少代码,但好处在于有了这个工具,就不用保存预制好的符号库或图层文件了,在任何场景下都可以运用自如。
一、要实现的功能
如上图所示,右击要素图层,点击【应用符号系统】按钮,在弹出的工具框中,选择要应用的符号类别,工具已经预制了2种符号【国空用地(市级)】和【村规用地】。
实际上随着工作的需要,以后可以增加更多的符号类别。
这里以【村规用地】为例,在右边根据输入要素的字段选择用地名称字段,点击执行即可。
生成结果如下:
以【国空用地(市级)】为例,生成结果如下:
二、实现流程
上面说过,实现流程很简单,就是应用了GP工具的【应用图层的符号设置】,基本没有什么细节可说的,直接看代码吧。
不过首先,需要先准备相对应的图层文件:
然后在代码中复制图层文件,并应用到图层即可:
// 获取参数
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");
}
});
三、工程文件分享
最后,放上工程文件的链接:
ApplySymbologyhttps://pan.baidu.com/s/1HwMyhiSm0jHGTu8WatlVKw?pwd=m1d3PS:可以直接点击...bin\Debug\net6.0-windows\下的.esriAddinX文件直接安装。