zoukankan      html  css  js  c++  java
  • ArcMap2Sld:一个将MXD中图层配图样式转换为OGC的SLD文件的开源工具

    在一个项目中,用户采用GeoServer做为GIS服务器(原因嘛当然是免费能省钱,经过验证可能还会在性能和稳定性等表现力也有优越性),但是手上收集的数据都是ESRI格式的,这倒不打紧,因为GeoServer直接能够支持ESRI的shape file和ArcSDE两种数据格式,要命的是用户的配图也是用ESRI,mxd中40个左右的图层组织和专题图样式都配好了。在网上查了大部分关于在GeoServer中发布服务的样式都是建议在uDig中重新配置,然后导出SLD文件,添加到GeoServer中。由于时间紧张,也不想花大量的精力做这种重复性工作,于是就想难道没有工具能直接把MXD中的layer转成SLD吗,于是百度一下,事遂人愿,还真是找着了!大概花了1小时间,就把这个工具下下来搞定,所有的样式文件转完1分钟妥妥地转完了,添加到GeoServer,拿数据一测试,完全正解。

    下面专门介绍下这个工具:

    1.ArcMap2SLD,开源工具

    这个工具最早是在2006年由慕尼黑工业大学的一个学生做毕业论文的开发的,这位同学名叫Albrecht Weiser,同时这个项目又是一个地理信息开发协会赞助支持的,所以源码开放出来。这个版本开发时是支持ArcGIS 9.0版本的,后来经过又一个德国人lat/lon, Bonn补充,可以支持到ArcView3.3版本,目胶这个工具最新的版本是1.3.0,可以支持到ArcGIS 10。这个工具仍然由原作者在开发维护。

    关于这个工具更多的介绍可以参看网站:http://arcmap2sld.i3mainz.hs-mainz.de/ArcMap2SLDConverter_Eng.htm

    工具下载的地址:http://wald.intevation.org/projects/arcmap2sld/,根据自己的情况下载不同的版本

    2、下载调试

    我下了最新版本后,在机子上用VS 2012打开,运行报错,因为我的机器上装的是ArcGIS 10.1,而且我只装了DeskTop,工程里引用的应该是10.0的DLL,所以报一个授权时ProductCode的错误,发现这个错误是由于Version dll 引用不对造成的,后来让一个精熟微软的同事把所有相关的组件都重新引用了下,相关的配置文件放对位置,由于德文转换引起的一些编码也调整了,大概花了30分钟,就跑出来了,运行后大概是这样的:

     

    3、测试结果

    工具运行的时候,需要打开一个MXD(注意,只能打开一个),会自动读取MXD里面的图层,在这个界面中,只需要指定一个转换出来的SLD文件存放的路径即可,点击左下角那个按纽,就会启动转换工作(不知道是哪个地方控制了,运行以后的大小和开发工程里不太一样,反正能运行,我也就没调这个了),对于转换文件的保存方式,有两种 ,所有样式存放在一个文件中,按图层分开存储,这个设置在左上角"Extras"菜单中,由于GeoServer发布服务需要单独的样式文件,所以我选择了分开存储,转换后的样式文件大概是这样的:

    classBreaks Render
    <?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
    <sld:StyledLayerDescriptor version="1.0.0" xmlns:sld="http://www.opengis.net/sld" xmlns:ogc="http://www.opengis.net/ogc" xmlns:xlink="http://www.w3.org/1999/xlink">
      <sld:NamedLayer>
        <sld:Name>grid200_avg</sld:Name>
        <sld:UserStyle>
          <sld:Name>Style1</sld:Name>
          <sld:FeatureTypeStyle>
            <sld:FeatureTypeName>grid200_avg</sld:FeatureTypeName>
            <sld:Rule>
              <sld:Name>.00 - .10</sld:Name>
              <sld:Title>.00 - .10</sld:Title>
              <ogc:Filter>
                <ogc:PropertyIsBetween>
                  <ogc:PropertyName>BCOVERWH_4</ogc:PropertyName>
                  <ogc:LowerBoundary>
                    <ogc:Literal>0</ogc:Literal>
                  </ogc:LowerBoundary>
                  <ogc:UpperBoundary>
                    <ogc:Literal>0.0994</ogc:Literal>
                  </ogc:UpperBoundary>
                </ogc:PropertyIsBetween>
              </ogc:Filter>
              <sld:PolygonSymbolizer>
                <sld:Fill>
                  <sld:CssParameter name="fill">#FFFF80</sld:CssParameter>
                  <sld:CssParameter name="fill-opacity">1</sld:CssParameter>
                </sld:Fill>
              </sld:PolygonSymbolizer>
            </sld:Rule>
            <sld:Rule>
              <sld:Name>.11 - .20</sld:Name>
              <sld:Title>.11 - .20</sld:Title>
              <ogc:Filter>
                <ogc:PropertyIsBetween>
                  <ogc:PropertyName>BCOVERWH_4</ogc:PropertyName>
                  <ogc:LowerBoundary>
                    <ogc:Literal>0.099401</ogc:Literal>
                  </ogc:LowerBoundary>
                  <ogc:UpperBoundary>
                    <ogc:Literal>0.200012496477616</ogc:Literal>
                  </ogc:UpperBoundary>
                </ogc:PropertyIsBetween>
              </ogc:Filter>
              <sld:PolygonSymbolizer>
                <sld:Fill>
                  <sld:CssParameter name="fill">#FAD155</sld:CssParameter>
                  <sld:CssParameter name="fill-opacity">1</sld:CssParameter>
                </sld:Fill>
              </sld:PolygonSymbolizer>
            </sld:Rule>
            <sld:Rule>
              <sld:Name>.21 - .35</sld:Name>
              <sld:Title>.21 - .35</sld:Title>
              <ogc:Filter>
                <ogc:PropertyIsBetween>
                  <ogc:PropertyName>BCOVERWH_4</ogc:PropertyName>
                  <ogc:LowerBoundary>
                    <ogc:Literal>0.200013496477616</ogc:Literal>
                  </ogc:LowerBoundary>
                  <ogc:UpperBoundary>
                    <ogc:Literal>0.351116688634112</ogc:Literal>
                  </ogc:UpperBoundary>
                </ogc:PropertyIsBetween>
              </ogc:Filter>
              <sld:PolygonSymbolizer>
                <sld:Fill>
                  <sld:CssParameter name="fill">#F2A72E</sld:CssParameter>
                  <sld:CssParameter name="fill-opacity">1</sld:CssParameter>
                </sld:Fill>
              </sld:PolygonSymbolizer>
            </sld:Rule>
            <sld:Rule>
              <sld:Name>.36 - .50</sld:Name>
              <sld:Title>.36 - .50</sld:Title>
              <ogc:Filter>
                <ogc:PropertyIsBetween>
                  <ogc:PropertyName>BCOVERWH_4</ogc:PropertyName>
                  <ogc:LowerBoundary>
                    <ogc:Literal>0.351117688634112</ogc:Literal>
                  </ogc:LowerBoundary>
                  <ogc:UpperBoundary>
                    <ogc:Literal>0.5</ogc:Literal>
                  </ogc:UpperBoundary>
                </ogc:PropertyIsBetween>
              </ogc:Filter>
              <sld:PolygonSymbolizer>
                <sld:Fill>
                  <sld:CssParameter name="fill">#AD5313</sld:CssParameter>
                  <sld:CssParameter name="fill-opacity">1</sld:CssParameter>
                </sld:Fill>
              </sld:PolygonSymbolizer>
            </sld:Rule>
            <sld:Rule>
              <sld:Name>.51 - 1.00</sld:Name>
              <sld:Title>.51 - 1.00</sld:Title>
              <ogc:Filter>
                <ogc:PropertyIsBetween>
                  <ogc:PropertyName>BCOVERWH_4</ogc:PropertyName>
                  <ogc:LowerBoundary>
                    <ogc:Literal>0.500001</ogc:Literal>
                  </ogc:LowerBoundary>
                  <ogc:UpperBoundary>
                    <ogc:Literal>1</ogc:Literal>
                  </ogc:UpperBoundary>
                </ogc:PropertyIsBetween>
              </ogc:Filter>
              <sld:PolygonSymbolizer>
                <sld:Fill>
                  <sld:CssParameter name="fill">#730000</sld:CssParameter>
                  <sld:CssParameter name="fill-opacity">1</sld:CssParameter>
                </sld:Fill>
              </sld:PolygonSymbolizer>
            </sld:Rule>
          </sld:FeatureTypeStyle>
        </sld:UserStyle>
      </sld:NamedLayer>
    </sld:StyledLayerDescriptor>
    ---------------------
    作者:xinyuxiong
    来源:CSDN
    原文:https://blog.csdn.net/comb_august/article/details/46565317
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    摩拜单车--获地球卫士奖
    项目经理--读书静心的日子
    20165219 Exp1 PC平台逆向破解
    2018-2019-2 20165219《网络对抗技术》Exp0 Kali安装 Week1
    2018-2019-1 20165219《信息安全系统设计基础》实验五
    ### 2018-2019-1 20165219《信息安全系统设计基础》实验四
    实现mypwd
    mybash的实现
    2018-2019-1 20165219 实验三 实时系统
    2018-2019-1 20165219 《信息安全系统设计基础》第七周学习总结
  • 原文地址:https://www.cnblogs.com/telwanggs/p/10711397.html
Copyright © 2011-2022 走看看