使用GeoWebCache發布ArcGIS切片地圖(實現高清電子地圖)
一、先看效果
圖1:geoserver發布的電子地圖(模糊)
圖2:GeoWebCache發布的ArcGIS切片電子地圖(高清)
二、版本信息
Centos系統:CentOS Linux release 7.3.1611 (Core)
Tomcat:apache-tomcat-8.5.65
GeoWebCache:geowebcache-1.18.1
三、下載安裝
1、Tomcat下載地址:https://tomcat.apache.org/download-80.cgi,安裝過程這里不再贅述,不懂的可以百度。
2、GeoWebCache下載地址:https://sourceforge.net/projects/geowebcache/files/geowebcache/1.18.1/
3、GeoWebCache部署:把下載好的 geowebcache.war文件直接放入Tomcat里webapp目錄,如:/usr/local/apache-tomcat-8.5.65/webapps
四、使用Bigemap下載ArcGIS瓦片數據
下載到的數據展示:
把下載好的數據上傳到服務器指定目錄:/usr/local/apache-tomcat-8.5.65/geowebcache
五、GeoWebCache的配置
1、新建緩存配置目錄(姑且這么叫),並修改/usr/local/apache-tomcat-8.5.65/webapps/geowebcache/WEB-INF文件夾下的文件web.xml,在</context-param>節點后添加如下節點,記錄新建的目錄:
<context-param> <param-name>GEOWEBCACHE_CACHE_DIR</param-name> <param-value>/usr/local/apache-tomcat-8.5.65/geowebcache/arcgis</param-value> </context-param>
param-value是你所建的文件夾,本文新建了個geowebcache和arcgis文件夾,可任意命名,只要與web.xml添加的節點中保持一致。
2、重啟tomcat服務
會發現該目錄下自動生成了幾個文件,注意這里的geowebcache.xml
3、添加ArcGIS切片的路徑
修改在上文出現的/usr/local/apache-tomcat-8.5.65/geowebcache/arcgis/geowebcache.xm文件,在<layer>…</layer>節點中添加如下節點:
注意:啟動服務時該配置文件中所有服務對應的切片方案和切片路徑必須都存在,否則打不開GeoWebCache主頁,顯示“503...”,要刪去不存在的arcgisLayer節點,並重啟服務!
<!-- tilingScheme:具體某個瓦片的配置文件的地址 tileCachePath:具體瓦片圖片的文件夾地址 -->
<arcgisLayer> <name>城關鎮_電子地圖_瓦片_ArcGis</name> <tilingScheme>/usr/local/apache-tomcat-8.5.65/geowebcache/城關鎮_電子地圖_瓦片_ArcGis/瓦片_ArcGis/conf.xml</tilingScheme> <tileCachePath>/usr/local/apache-tomcat-8.5.65/geowebcache/城關鎮_電子地圖_瓦片_ArcGis/瓦片_ArcGis/_alllayers</tileCachePath> <hexZoom>false</hexZoom> </arcgisLayer>
城關鎮_電子地圖_瓦片_ArcGis為服務名,GeoWebCache服務頁面中可看到改名字,這里隨便起的。conf.xml就是bigemap下載后的配置文件。
4、/usr/local/apache-tomcat-8.5.65/webapps/geowebcache/WEB-INF/geowebcache-core-context.xml 需要加以下代碼
<bean id="gwcArcGIGridsetConfigutation" class="org.geowebcache.arcgis.layer.ArcGISCacheGridsetConfiguration"/>

如果不添加此bean對象,啟動時則會報以下錯誤:
15 Apr 14:35:15 (localhost-startStop-1) WARN [support.XmlWebApplicationContext] - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gwcXmlConfig' defined in ServletContext resource [/WEB-INF/geowebcache-core-context.xml]: Invocation of init method failed; nested exception is java.lang.IllegalStateException: No ArcGISCacheGridsetConfiguration could be found 15 Apr 14:35:15 (localhost-startStop-1) ERROR [context.ContextLoader] - Context initialization failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gwcXmlConfig' defined in ServletContext resource [/WEB-INF/geowebcache-core-context.xml]: Invocation of init method failed; nested exception is java.lang.IllegalStateException: No ArcGISCacheGridsetConfiguration could be found at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1771) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:593) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:515) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:226) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:860) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:878) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550) at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:401) at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:292) at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:103) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4705) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5168) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:743) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:719) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:705) at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1015) at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1895) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) Caused by: java.lang.IllegalStateException: No ArcGISCacheGridsetConfiguration could be found at org.geowebcache.arcgis.layer.ArcGISCacheLayer.getGridsetConfiguration(ArcGISCacheLayer.java:256) at org.geowebcache.arcgis.layer.ArcGISCacheLayer.createGridSubsets(ArcGISCacheLayer.java:237) at org.geowebcache.arcgis.layer.ArcGISCacheLayer.initializeInternal(ArcGISCacheLayer.java:205) at org.geowebcache.layer.AbstractTileLayer.initialize(AbstractTileLayer.java:332) at org.geowebcache.config.XMLConfiguration.initialize(XMLConfiguration.java:891) at org.geowebcache.config.XMLConfiguration.afterPropertiesSet(XMLConfiguration.java:844) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1830) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1767) ... 25 more
再次重啟GeoServer,進入GeoWebCache主頁:http://192.168.8.190:8080/geowebcache
參考網站:
https://blog.csdn.net/hellfire2007/article/details/80876785
https://blog.csdn.net/wt346326775/article/details/53019487
https://my.oschina.net/u/4405061/blog/3327068