今天同事反饋我們的系統加載不了國家2000(4490)的WMTS服務,剛改完的功能,用別的地方的數據可以,新提供的數據卻不行,經過調試,發現確實不行。
然后也在百度上找了一下Cesium 4490 ,主要參考解決思路有下面這兩個
https://blog.csdn.net/chenguizhenaza/article/details/112003278
https://blog.csdn.net/A873054267/article/details/86652620
這兩篇文章,並沒有解決問題,可以肯定的是代碼並沒有問題,因為有4490的數據可以加載,網上也有其他人成功加載過,那問題肯定出在數據上。
整理了一下思路
1、核實數據坐標系,加載成功過的數據和加載不成功的數據坐標系都是4490,
2、向同事要了加載不成功服務的切片方案(2000.xml)和加載成功的服務的切片方案(Conf2000天地圖切片方案(5-16級).xml),通過比較發現
2000.xml 和2000天地圖切片方案(5-16級).xml 區別在於2000有21級切片,2000天地圖只有20級切片,2000的切片方案第0級是多出來的一級,其他級別與2000天地圖一致。
3、找了網上公開互聯網的天地圖切片方案,發現與2000天地圖切片方案除了原點不一致,其他都一致
會不會是級別導致的問題呢?
4、查看系統請求圖片的錯誤
如果是級別問題,那么請求的時候如果級別+1,會不會返回成功呢?
神奇的是竟然返回成功圖片了,隨機測試了幾個無法返回圖片的請求,在Level+1情況下,都返回了圖片
5、驗證整個服務,既然是級別問題,那如果我在服務器上直接修改切片的文件夾級別(可以看下ArcGISServer 切片規則,知道原由),把每個級別都減少1,比如L17改為L16
請求成功了
解決方案
1、修改Cesium 源碼WebMapTileServiceImageryProvider,判斷WMTS服務的切片級別,請求數據時調整級別,這個方案比較麻煩,對源碼的理解要比較深入,才能修改,暫時沒用這種方式
2、修改數據
1)重新發布數據,用2000天地圖的切片方案重新切片
2)如果客戶已經用2000的切片方案切好的服務,那可以重新發布一個服務,選擇2000的切片方案,但是不生成切片(生成切片會比較長的時間,對客戶來說也解釋不了,客戶只會認為你的系統支持不了2000坐標系的數據),把原來已經切好的切片目錄拷貝到新服務的切片目錄下,並把這些切片目錄的名稱級別都減少1,如果L21改為L20
加載代碼:
其他問題
互聯網2000的切片方案,原點是400,-400,似乎也加載不了,有數據的時候可以測試下