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)