ArcEngine9.3和10如何获取符号库文件路径

符号化是ArcGIS体系中一个非常重要的概念,也是我们在做ArcEngine二次开发时所碰到的问题。一般情况下,我们都会做一个符号选择器,做符号选择器,我们就要得到符号库文件。因为ArcEngine系统的运行环境必须依赖于Engine Runtime,而Engine Runtime的安装目录下会有一个符号库文件夹,里面会有很多符号库文件。其实我们也可以把这些符号库文件拷到系统的运行目录下,这样我们还得去维护一个文件夹,为了系统的简介,我们还是希望能直接访问Runtime安装目录下得样式文件,毕竟要想运行Engine开发的系统,必须要安装Engine Runtime。

Engine使用的符号库文件其实就是扩展名为.serverstyle的文件,我们只要获取到这些文件的路径即可。要想获得这些文件的路径,首先我们要获取到本地ArcEngine Runtime安装的路径在什么地方。下面我们就以9.3和10.0为例分别说。

在使用ArcEngine 9.3的时候,我们获取Runtime的安装路径是通过读取Runtime的安装注册表的信息获取的。Runtime安装之后,会在注册表对应的位置写入安装路径,我们就可以读取该注册表项值,获取安装路径,代码如下:

        /// <summary>

        /// 得到默认的样式文件

        /// </summary>

        /// <returns></returns>

        public static List<string> GetDefaultServerStyleFilePaths()

        {

            List<string> myServerStylePaths = new List<string>();



            //得到ArcGIS的安装位置,加载默认的样式文件

            string myInstall = RoutinReadRegistry("SOFTWARE\\ESRI\\CoreRuntime");

            //向图标容器中加载ESRI server样式文件

            string myPath = myInstall + "\\Styles";



            string[] myFielNameList = System.IO.Directory.GetFiles(myPath);



            foreach (string myFielPath in myFielNameList)

            {

                if (System.IO.Path.GetExtension(myFielPath).ToLower() == ".serverstyle")

                {

                    myServerStylePaths.Add(myFielPath);

                }

            }

            return myServerStylePaths;

        }





        /// <summary>

        /// 使用关键字得到ArcGIS的安装路径

        /// </summary>

        /// <param name="pKay"></param>

        /// <returns></returns>

        private static string RoutinReadRegistry(string pKay)

        {

            //打开关键字目录,并读取

            Microsoft.Win32.RegistryKey myRk = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(pKay, true);

            if (myRk == null)

            {

                return "";

            }

            else

            {

                //使用key,从指定的清单中得到数据

                return myRk.GetValue("InstallDir").ToString();

            }

        }

当我们升级到ArcEngine 10之后,在运行之前的代码时,运行到读取注册表信息时,就会报错,查了一下注册表,发现注册表里面已经没有该信息了,找了其他的选项也没找到。刚开始一直还以为是因为没有装Runtime,只装了桌面版和开发包的原因。但想想之前在开发9.3的时候也是只安装桌面版和开发包就可以的。

在几天找不到原因的情况下,偶尔在Engine 10安装目录下面的例子中看到了如果读取样式文件的代码。原来Engine10中提供了方法可以直接获取Engine运行时的安装目录,代码如下:

string installationFolder = ESRI.ArcGIS.RuntimeManager.ActiveRuntime.Path;

            axSymbologyControl1.LoadStyleFile(installationFolder + "\\Styles\\ESRI.ServerStyle");

通过上面的方法,我们就能获取到Engine runtime的安装路径以及下面的样式文件了。

这个代码来自于Engine10下面的例子,路径为:

..\Program Files (x86)\ArcGIS\DeveloperKit10.0\Samples\ArcObjectsNet\ControlsCommandsEnvironment\CSharp\CommandsEnvironment.cs

你可能感兴趣的:(ArcEngine)