Openlayers Projection致使經緯度顛倒問題

問題:

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

問題排查:

一、查看控制檯,發現報錯400,這個是因爲格式錯誤引發的瀏覽器

 

二、因而我把連接複製出來粘貼到瀏覽器觀察,發現是BBOX的經緯度反了。url

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

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

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

四、網上都沒找到緣由,實在不行了決定咬咬牙跟源碼吧。server

五、源碼跟到這裏發現了問題:獲取座標系的座標軸順序,若是是"ne"就把bbox構造經緯度反一反。爲啥呢?blog

六、原來openlayers在操做地圖時,若是用到座標系的,則會根據座標系先判斷一下座標順序,WGS84默認順序是(緯度,經度,高度),web墨卡託默認是(x,y,z)接口

七、咱們用的EPSG:4326的座標系,順序是neu,源碼中被if條件捕獲,bbox被轉了get

解決方案:

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

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

二、至此將修改完的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
            })
        });

 三、最後附上座標系可能的軸順序:經常使用的有(enu,neu,wnu)

相關文章
相關標籤/搜索