• 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

  • 相关阅读:
    使用FileReader在浏览器读取预览文件(image和txt)
    移动端Vue图片获取,压缩,预览组件-upload-img(H5+获取照片,压缩,预览)
    文件(图片)转base64
    Vue单页面应用打包app处理返回按钮
    hbuilder/hbuilderx 无法检测到模拟器
    不启动AndroidStudio直接启动其模拟器
    ES6,箭头函数 (=>)注意点
    ES6,扩展运算符
    strcmp使用注意
    android11 gc5035前置摄像头当作后置使用左右镜像问题
  • 原文地址:https://www.cnblogs.com/xzbluemap/p/2852635.html
Copyright © 2020-2023  润新知