以前进行符化的时候一般都是自定义Symbol,或者使用SymbologyControl进行选择,由于实际需要,我们来读取一下样式管理器中的样式。在ArcMap中打开如下:style下有很多样式类,每个类下面有各种样式。
读取Style符号库样式的步骤如下:
第一步,获取Style的位置,通常在ArcGIS安装目录下,有个Sytles文件夹。关于获取ArcGIS的安装路径请参考:获取ArcGIS安装路径
第二步,新建样式管理集工具StyleGallery,并指定样式文件位置;
第三步,遍历获取样式文件类,即样式管理器ESRI.Style下的22个类,这里我们要获取名称为"Fill Symbols";
第四步,遍历样式文件类下名为"10% Simple hatch"样式文件,并返回为Symbol。
第五步,符号化要素图层:将Symbol赋给SimpleRenderer的Symbol属性,将图层转为GeoFeatureLayer,将SimpleRenderer赋给GeoFeatureLayer的Renderer属性,在Map中加载显示GeoFeatureLayer。
/// <summary>
/// 从Style符号库获取指定的符号
/// </summary>
/// <param name="sServerStylePath">符号库路径</param>
/// <param name="sGalleryClassName">样式类名称</param>
/// <param name="symbolName">样式名称</param>
/// <returns>Symbol</returns>
public ISymbol GetSymbol(string sServerStylePath, string sGalleryClassName, string symbolName)
{
//1.加载样式文件
ISymbol pSymbol = null;
IStyleGallery pStyleGaller = new ServerStyleGallery();//样式管理集工具
IStyleGalleryStorage pStyleGalleryStorage = pStyleGaller as IStyleGalleryStorage;//样式文件管理
pStyleGalleryStorage.TargetFile = sServerStylePath;//serverStylePath为一字符串型,表示ServerStyle文件位置
//2.获取样式子类
//可通过遍历样式文件里的子类,然后找到与目标子类名称相同的样式子类即可
IStyleGalleryClass pStyleGalleryClass = null;//样式子类对象
for (int i = 0; i < pStyleGaller.ClassCount; i++)
{
pStyleGalleryClass = pStyleGaller.get_Class(i);
if (pStyleGalleryClass.Name != sGalleryClassName)
continue;
IEnumStyleGalleryItem pEnumSyleGalleryItem = pStyleGaller.get_Items(sGalleryClassName, sServerStylePath, "");//获取样式子类
pEnumSyleGalleryItem.Reset();
//3.遍历pEnumSyleGalleryItem
IStyleGalleryItem pStyleGallerItem = null;
pStyleGallerItem = pEnumSyleGalleryItem.Next();
while (pStyleGallerItem != null)
{
Console.WriteLine(pStyleGallerItem.Name);
if (pStyleGallerItem.Name == symbolName)
{
//4.获取符号
pSymbol = pStyleGallerItem.Item as ISymbol;
break;
}
pStyleGallerItem = pEnumSyleGalleryItem.Next();
}
}
return pSymbol;
}
调用:
GetSymbol(ESRI.ArcGIS.RuntimeManager.ActiveRuntime.Path + @"\Styles\ESRI.ServerStyle", "Fill Symbols", "10% Simple hatch");
当然,使用SymbologyControl来进行交互体验效果会更好!
本文参考: