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)

相关文章
相关标签/搜索