Openlayers Projection導致經緯度顛倒問題


問題:

openlayers3調用TileWMS接口,實現Openlayers加載Geoserver轉發的ArcGIS切片時,web墨卡托(wkid3857)沒有問題,但是WGS84(wkid4326)就不行。

問題排查:

1、查看控制台,發現報錯400,這個是由於格式錯誤引起的

 

2、於是我把鏈接復制出來粘貼到瀏覽器觀察,發現是BBOX的經緯度反了。

&BBOX=39.387925644409165%2C115.94328881619128%2C39.99706766190172%2C116.55243083368384

變成了BBOX=緯度&經度&緯度&經度了

3、我把BBOX修正,再放到瀏覽器打開,發現可以正常加載。看來問題找到了,就是構造的時候bbox的問題,可這是怎么造成的呢?

4、網上都沒找到原因,實在不行了決定咬咬牙跟源碼吧。

5、源碼跟到這里發現了問題:獲取坐標系的坐標軸順序,如果是"ne"就把bbox構造經緯度反一反。為啥呢?

6、原來openlayers在操作地圖時,如果用到坐標系的,則會根據坐標系先判斷一下坐標順序,WGS84默認順序是(緯度,經度,高度),web墨卡托默認是(x,y,z)

7、我們用的EPSG:4326的坐標系,順序是neu,源碼中被if條件捕獲,bbox被轉了

解決方案:

1、最終找到問題,就要把他消滅,我們用openlayers自定義坐標系的方法,重寫一下"EPSG:4326",將它的axisOrientation改為enu

var projection = new ol.proj.Projection({
        code: 'EPSG:4326',
        axisOrientation: 'enu'
    });

2、至此將修改完的projection傳給ol.map.view,再加載,就可以了

map = new ol.Map({
            target: "map",
            layers: [new ol.layer.Tile({
                source: new ol.source.TileWMS({
                    url: "http://10.19.151.238:8080/geowebcache/service/wms",
                    params: { 'LAYERS': 'beijing', format: 'image/png', SRS: 'EPSG:4326' },
                    tileGrid: tileGrid
                })
            })],
            view: new ol.View({
                center: [116.47202, 40.291],
                resolutions: resolutions,
                resolution: 0.00475892201166056,
                projection: projection,
                extent: fullExtent
                //zoom: 3
            })
        });

 3、最后附上坐標系可能的軸順序:常用的有(enu,neu,wnu)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM