中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》
  • 首頁 > 
  • 教程 > 
  • 開發技術 > 
  • geowebcache發布arcgislayer圖層,并且修改行列號范圍計算錯誤的bug

geowebcache發布arcgislayer圖層,并且修改行列號范圍計算錯誤的bug

發布時間:2020-07-18 15:47:25 來源:網絡 閱讀:1652 作者:rumeng_you 欄目:開發技術

簡介:

    這篇文件參考了很多網絡上的其他文章,經過自己的實測加閱讀源碼才得以成功,特此記錄。

對于曾經參考過的文件,并沒有一一記錄,在此對前輩表示感謝。


步驟:

  1. 取得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幾天,以上記錄的是本人的錯,可能是碰巧解決了問題,有些錯誤還不能從原理上解釋原因。

寫本篇文章的目的是幫助一下和我一樣的小白。


大家如果覺得本文章有哪些不對的地方請留言指正,我會盡快修改。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

呼图壁县| 万全县| 东乡| 津南区| 沭阳县| 沧源| 舟山市| 东港市| 固始县| 遵化市| 闽清县| 习水县| 资阳市| 天津市| 闸北区| 宁远县| 罗平县| 海南省| 嵊州市| 睢宁县| 阳东县| 宁河县| 宁远县| 汽车| 宁陵县| 巴里| 江油市| 本溪市| 松阳县| 新建县| 曲靖市| 西吉县| 湾仔区| 湘西| 琼结县| 长阳| 赤峰市| 哈尔滨市| 四平市| 邮箱| 申扎县|