C# + ArcEngine使用相同符号绘制所有要素

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

在使用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();
}

欢迎大家批评指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

A-Chin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值