读取Style符号库样式的方法

以前进行符化的时候一般都是自定义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来进行交互体验效果会更好!

本文参考:

http://blog.csdn.net/rrrrssss00/article/details/6167497#

http://blog.sina.com.cn/s/blog_694deb730100nhna.html

posted @ 2015-04-15 16:47  我也是个傻瓜  阅读(2230)  评论(0编辑  收藏  举报