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

原文地址:https://www.cnblogs.com/xzbluemap/p/2852635.html