简介:

这篇文件参考了很多网络上的其他文章,经过自己的实测加阅读源码才得以成功,特此记录。

对于曾经参考过的文件,并没有一一记录,在此对前辈表示感谢。


步骤:

取得arcgis切好的瓦片图

目前切换的目录如下,conf.cdi和conf.xml是必须的。

.├──_alllayers│├──L10│├──L11│├──L12│├──L13│├──L14│├──L15│└──L16├──conf.cdi├──conf.xml

里面的Lxx命名文件夹无需改动,网上资料有人说需要改为16进制,经查看源码并不需要。

上面的内容更正一下,阅读了源码发现是否转换为16进制有一个配置项,hexZoom,默认是false,不转换,在geowebcache.xml的arcgisLayer中配置,见下面的代码

<arcgisLayer><name>fj_base</name><gridSubsets/><expireCacheList><expirationRuleminZoom="0"expiration="-2"/></expireCacheList><expireClientsList><expirationRuleminZoom="0"expiration="7200"/></expireClientsList><backendTimeout>120</backendTimeout><cacheBypassAllowed>false</cacheBypassAllowed><enabled>true</enabled><tilingScheme>/data/geoserver/data/fujian/conf.xml</tilingScheme><tileCachePath>/data/geoserver/data/fujian/_alllayers</tileCachePath><hexZoom>false</hexZoom><storageFormat>esriMapCacheStorageModeExploded</storageFormat></arcgisLayer>

Stringlevel=(this.hexZoom)?Integer.toHexString(z):Integer.toString(z);level=zeroPadder(level,2);Stringrow=Long.toHexString(y);row=zeroPadder(row,8);Stringcol=Long.toHexString(x);col=zeroPadder(col,8);StringBuilderpath=getLayerPath();path.append(File.separatorChar).append('L').append(level).append(File.separatorChar).append('R').append(row).append(File.separatorChar).append('C').append(col);

2.安装geowebcache独立版

1.12.5

请参考网上其他文章。

arcgisLayer需要修改源码

源码中注释了说arcgis的xyz从左上夹开始计算,但是经过测试不需要改的y的取值。 原因目前未确认是否为arcgis切图时选择了左下角为原点。

重新打包arcgiscache的工程并替换。

//inverttheorderoftherequestedYordinate,sinceArcGIScachesaretop-leftto//bottom-right,andGWCcomputestilesinbottom-lefttotop-rightorder//finallongy=(coverageMaxY-tileIndex[1]);finallongy=tileIndex[1];

3.发布好之后无法预览

目前发布之后无法再geowebcache之上预览


4.openlayers访问

fj_base为图层名称

newol.layer.Tile({source:newol.source.XYZ({projection:ol.proj.get('EPSG:4326'),url:"http://gis.hezhang.yunlizhihui.com/geoserver/gwc/service/tms/1.0.0/fj_base/{z}/{x}/{y}.png"})}),

5.修改地图范围的bug

org.geowebcache.arcgis.layer.GridSetBuilder

原82-85行 xmin和ymax取得tileOrigin,即原点的坐标,现修改为直接取配置文件4个角点的坐标


6.瓦片行列号范围的bug

y轴的计算范围有错误,修改了源码

gwc-core

org.geowebcache.grid.GridSet

long[] closestRectangle(int level,BoundingBox rectangeBounds){

//270行

if(yBaseToggle){//TODOluhaiyouxy互相一下,并且需要取个绝对值longtmp=Math.abs(minY);minY=Math.abs(maxY);maxY=tmp;//minY=minY+grid.getNumTilesHigh();//maxY=maxY+grid.getNumTilesHigh();}


}




主要需要说明的是:

图层的Lxx文件夹并不需要修改为16进制

需要修改源码修改y的计算方式

conf.cdi的4个坐标范围需要修改为最大值,

<XMin>-180</XMin>

<YMin>-90</YMin>

<XMax>180</XMax>

<YMax>90</YMax>

因为目前geowebcache会判断请求的xyz是否在范围之内,但是实测计算的范围是错误的,会误拦截,所以改到最大,也可以修改源码去掉验证。

见上面修改源码的方法


最后本人声明:

本人并不是gis专业人士,才开始接触10几天,以上记录的是本人的错,可能是碰巧解决了问题,有些错误还不能从原理上解释原因。

写本篇文章的目的是帮助一下和我一样的小白。


大家如果觉得本文章有哪些不对的地方请留言指正,我会尽快修改。