在使用ArcGIS绘制专题图中,会经常使用到“符号选择器”选择相应的符号,或者会选择“图层属性”中的“使用相同符号绘制所有要素”,按照已有图层的符号绘制新的图层。


但是在使用C# + ArcEngine进行绘制中,没有“使用相同符号绘制所有要素”的函数。为此,可以使用C#结合Python进行处理。
1. 首先将已有图层(参考图层)shp文件转为lyr文件,参考Python代码(shpfile2lyrfile.py)
import arcpy
from arcpy import env
import sys
def isfileExist(path):
if not os.path.exists(path):
sys.exit(0)
return False
else:
return True
def Shp2Lyr(shppath, shpname, workspace, inlyrname, referlyrpath, referlyrname, outlyrpath, outlyrname):
arcpy.env.workspace = workspace
in_features = shppath + shpname
where_clause = '"FID" >= 0'
referlyr = referlyrpath + referlyrname
out_layer_file = outlyrpath + outlyrname
arcpy.MakeFeatureLayer_management(in_features, inlyrname, where_clause)
arcpy.ApplySymbologyFromLayer_management(inlyrname, referlyr)
arcpy.SaveToLayerFile_management(inlyrname, out_layer_file, "RELATIVE")
return Ture
if __name__ == '__main__':
Shp2Lyr(sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4], sys.argv[5], sys.argv[6], sys.argv[7], sys.argv[8])
2. 在C#中调用Python文件(shpfile2lyrfile.py),可参考 传送门
public static void RunPythonScript(string sArgName, string args = "", params string[] teps)
{
Process p = new Process();
//string path = @"pythonfile\shpfile2lyrfile.py";// 待处理python文件的路径
string sArguments = sArgName;
foreach (string sigstr in teps)//添加参数
{
sArguments += " " + sigstr;//传递参数
}
sArguments += " " + args;
//下面为启动一个进程来执行脚本文件设置参数
p.StartInfo.FileName = @"C:\Python27\ArcGIS10.2\python.exe"; //注意路径
p.StartInfo.Arguments = sArguments;//这样参数就是merge.py 路径1 路径2 路径3....
Console.WriteLine(sArguments);
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = true;
p.Start();//启动进程
p.BeginOutputReadLine();
Console.ReadLine();
p.WaitForExit();
}
private void shp2lyr(object sender, EventArgs e)
{
string[] strArr = new string[8];
strArr[0] = "D://layersbase//base//";
strArr[2] = "D://layersbase//base";
strArr[4] = "D://layersbase//symbologyLayer//";
strArr[6] = "D://layersbase//mxd//";
strArr[1] = "road.shp";
strArr[3] = "Road";
strArr[5] = "_road.lyr";
strArr[7] = "baseRoad.lyr";
string sArguments = @"pythonfile/shpfile2lyrfile.py";
RunPythonScript(sArguments, "-u", strArr);
}
3. 最后使用C#加载lyr文件。
public void loadbaselyr()
{
axMapControl1.AddLayerFromFile(@"D:\layersbase\symbologyLayer\_road.lyr");
axMapControl1.ActiveView.Refresh();
}
欢迎大家批评指正。

本文介绍了一种使用C#结合Python在ArcGIS中实现特定符号绘制的方法。通过将现有图层的shp文件转换为lyr文件,并利用Python脚本应用参考图层的符号,最后在C#中加载这些lyr文件,以此解决ArcEngine中缺乏“使用相同符号绘制所有要素”功能的问题。

5827

被折叠的 条评论
为什么被折叠?



