您好,登錄后才能下訂單哦!
簡介:
這篇文件參考了很多網絡上的其他文章,經過自己的實測加閱讀源碼才得以成功,特此記錄。
對于曾經參考過的文件,并沒有一一記錄,在此對前輩表示感謝。
步驟:
取得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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。