简介:
这篇文件参考了很多网络上的其他文章,经过自己的实测加阅读源码才得以成功,特此记录。
对于曾经参考过的文件,并没有一一记录,在此对前辈表示感谢。
步骤:
取得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> <expirationRule minZoom="0" expiration="-2"/> </expireCacheList> <expireClientsList> <expirationRule minZoom="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>
String level = (this.hexZoom) ? Integer.toHexString(z) : Integer.toString(z); level = zeroPadder(level, 2); String row = Long.toHexString(y); row = zeroPadder(row, 8); String col = Long.toHexString(x); col = zeroPadder(col, 8); StringBuilder path = 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的工程并替换。
// invert the order of the requested Y ordinate, since ArcGIS caches are top-left to // bottom-right, and GWC computes tiles in bottom-left to top-right order // final long y = (coverageMaxY - tileIndex[1]); final long y = tileIndex[1];
3.发布好之后无法预览
目前发布之后无法再geowebcache之上预览
4.openlayers访问
fj_base为图层名称
new ol.layer.Tile({ source: new ol.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) { // TODO luhaiyou xy互相一下,并且需要取个绝对值 long tmp = 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几天,以上记录的是本人的错,可能是碰巧解决了问题,有些错误还不能从原理上解释原因。
写本篇文章的目的是帮助一下和我一样的小白。
大家如果觉得本文章有哪些不对的地方请留言指正,我会尽快修改。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。