之前一直想弄这个东西,只不过需求一直没跟上,但是这次有需求了,就实际操作了下。下面将实现过程记录下来:
1:下载最新版的Geoserver与geowebcache插件,虽然最新版的Geoserver已经自带集成了geowebcache,但是网上都说不能正常使用Arcgis切片,我也就没折腾,直接操作稳妥的方式。然后这两个软件的下载地址我就不贴出来了,直接百度就能搜到,下载最新版的就对了。还有直接使用geowebcache+tomcat的方式我也尝试了,但是修改了geowebcache配置文件之后启动服务之后就一直404.搞了半天也没解决。后来放弃了,而且项目中本来也都使用了Geoserver,如果在使用tomcat的话还需要额外增添端口,也是一个不好的方案(为没能力解决问题找了个接口.....),geowebcache就是找了个承载,将它以服务的形式启动,理论上nginx应该也可以搞定,这里不做研究。
2:言归正传,开始。首先将下载好的geowebcache.war包拷贝到Geoserver目录县的webapps目录。
这个时候启动Geoserver,访问http://localhost:8080/(默认Geoserver端口),这个时候就已经成功启动了Geoserver与geowebcache。
但是网上有的文章说这个时候geowebcache.war包就已经自动解压成文件夹了,但是我实际操作的时候没有解压出来文件夹,然后我这里的文件夹是通过tomcat解压出来的.....可能这里我操作的有些笨拙,确实了解不多。。。
下一步,修改配置文件,在</context-param>节点下增加代码片段(为了让后边的修改是实时生效,咱们每次改动配置文件之后都重启下Geoserver)
<context-param>
<param-name>GEOWEBCACHE_CACHE_DIR</param-name>
<param-value>D:\ArcgisWPtest</param-value>
</context-param>
这个地址可以随意修改,但是需要咱们手动建立一个对应路径位置的空文件夹,一般就跟你的数据放在一个物理路径下就可以。
修改第二个配置文件
<bean id="gwcArcGIGridsetConfigutation" class="org.geowebcache.arcgis.layer.ArcGISCacheGridsetConfiguration"/>
增加了这个就可以让后边的配置修改知道你发布的图层是Arcgis的切片图层了,不改这里的话访问服务的时候会503。。加上就完事了。
还记得上边咱们填写的那个路径吧,当你启动服务之后那个路经下会对应生成一些文件。
上边的文件就是咱们准备发布的切片文件,在这一步修改geowebcache.xml配置文件。
<arcgisLayer>
<name>arcgistest</name>
<tilingScheme>D:\ArcgisWPtest\arcgiscache\conf.xml</tilingScheme>
<tileCachePath>D:\ArcgisWPtest\arcgiscache\_alllayers</tileCachePath>
<hexZoom>false</hexZoom>
<storageFormat>esriMapCacheStorageModeExploded</storageFormat>
</arcgisLayer>
在layers节点下增加此代码段。
这两个路径跟你的数据是对应的。
在这里就完成了全部的配置项的修改,切记这里一定是要标准的Arcgis切片文件,完成的文件内容就是上边两张截图的内容。
然后重启Geoserver服务,看下成果。
按理说在这里是可以预览的,但是我这里不知道为啥看不到预览效果,经纬度跟比例尺都是NaN,但是这里不纠结,咱们最终是要用到项目里的,这里看不看没啥用。
然后geowebcache这个插件发布完的数据都是完全遵守OGC标准的,所以不管在任何一个地图框架中都是可以加载的。请大家各自查阅自己使用的地图框架api看是如何加载的,这里我以Leaflet举例。
let ArcGISLayer = L.tileLayer.wms('http://localhost:8080/geowebcache/service/wms', {
layers: 'arcgistest', // 需要加载的图层
format: 'image/jpeg', // 返回的数据格式
transparent: true
})
map.addLayer(ArcGISLayer);
最后Demo效果图:
写的比较急,可能有些细节丢失,希望能够帮助有类似需求的同学,也是对自己工作学习的一个记录,从事GIS工作也挺久了,但是一直没有好好记录过,希望能从这个作为开始,记录工作学习中的点击,目前重点方向在三维,
Cesium与其他的WenGL技术,目前针对学习Three.js。之后也会记录不同类型的文章。因该会比较杂。不一定只存在开发方面的,也有可能包含数据处理的东西,只要是我认为有价值的我可能就会记录下来。希望这种方式也能
带给我成长。