Bootstrap

openlayers4 wfs条件查询数据坐标投影无法转化投影的问题EPGS:4548

简答介绍一下,openlayers只支持两种投影一个是EPGS:3857和EPGS:4326

我的地图是EPGS:3857,而我的geoserver?地图⑩用EPGS:4548北京投影,我常用的经纬度就是根据EPGS:4326投影,所以当你网上搜索经纬度的时候要记得转化,当然你的地图用的epgs:4326就不用转化了。

例子:

 map = new ol.Map({
       // layers: [baseLayer] ,
        target: document.getElementById('map'),
        view: new ol.View({
            //center: ol.proj.fromLonLat([118.32, 32.30]),
            center: [118.32, 32.30],
            //center: [632486.5268999999,3559959.1864],
            projection: 'EPSG:4326',
            maxZoom: 19,
            zoom: 10
        })
    });

?在滁州,网上搜的经纬度是118.32,32.30(根据EPGS:4326来的),而?的地图坐标投影就是EPGS:4326,所以?不需要转化,当然要是转化了你地图就没了(不能说地图没了,你的界面地图就看不见了,你得移动),当然你也可以写成这样。

 map = new ol.Map({
       // layers: [baseLayer] ,
        target: document.getElementById('map'),
        view: new ol.View({
            center: ol.proj.fromLonLat([118.32, 32.30]),
           // center: [118.32, 32.30],
            //center: [632486.5268999999,3559959.1864],
            projection: 'EPSG:3857',
            maxZoom: 19,
            zoom: 10
        })
    });

把4326的经纬度进行投影成3857形式的。

接着我们来说这次遇到的错误,我使用wfs查询到了数据,也写了srcName

var featureRequest = new ol.format.WFS().writeGetFeature({
        srsName: 'EPSG:3857',
        featureNS: 'http://localhost:8080/',    //命名空间
        featurePrefix: 'map',               //工作区域
        featureTypes: ['两区地块'],       //图层名
        outputFormat: 'text/javascript',
        filter:
        // fcodeFilter
        //     areaFilter
        //组合两种过滤器
         new ol.format.filter.like('CJQYMC', '*双庙村*')    //todo 条件查询过滤

    });

    var body = new XMLSerializer().serializeToString(featureRequest);
    console.log(body);//http://localhost:8080/geoserver/ows?service=wfs&version=1.1.0&request=GetCapabilities
    //localhost:8080/geoserver/map/ows?service=WFS&version=1.0.0&
        // request=GetFeature&typeName=map%3A%E4%B8%A4%E5%8C%BA%E5%9C%B0%E5%9D%97&maxFeatures=50&outputFormat=text%2Fjavascript
    var wfsParams = {
        srs:'EPSG:3857',
        service : 'WFS',
        version : '1.0.0',
        request : 'GetFeature',
        typeName : name,//图层名称
       /* filter: ol.format.filter.equalTo('CJQYMC', '夏岗村'),*/
        outputFormat : 'text/javascript',  //重点,不要改变
        MAXFEATURES: 50,
        format_options : 'callback:loadFeatures'  //回调函数声明
    };
    var url = 'http://localhost:8080/geoserver/map/ows';
    console.log('http://localhost:8080/geoserver/map/wfs?'+$.param(wfsParams)+'&FILTER='+body);
    var ss = body.replace("xsi:schemaLocation=\"http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd\"","");
    var data1='';
    $.ajax({
        url: url,
        async:false,
        type : 'GET',
        data : $.param(wfsParams)+'&FILTER='+ss,
        //data : body,
       //  data : $.param(wfsParams)+'&FILTER='+"[ CJQYMC is like 水产研究所 ]",
        dataType: 'jsonp',   //解决跨域的关键
        jsonpCallback:'loadFeatures' , //回调
        success: function (data) {

            console.log(data.features);
}
})

数据是查出来 

但是数据全是4548投影的,因为我的源数据文件就是4548投影,所以显示出来的数据标记在图层上标记到了西伯利亚去了。

4548?用不了

解决思路:

1、想办法转化成3857的(我地图就是3857的wms服务转化成功了) 

我改srcName这么改加参数都不行,遂放弃,可能wfs不支持投影转化

2、自定义EPGS4548然后添加上去,把地图变成4548的形式不就行了。

但是现在想一下还是漏洞百出的,因为数据库中的数据本来就是4548的形式,你读出来数据在4548转化,不就错乱了吗,所以不能转化,但是我又不知道咋不转。难到? 了。

收获:

学会添加投影,不会的瞅瞅这个

https://blog.csdn.net/freeland1/article/details/78579813

3、遍历数据转化投影

?在凌晨三点的时候终于想到了,数据全都拿到了为什么不一个一个点的遍历转化 

用三层for循环写了一个转化: 

ol.proj.transform([118,32],'EPSG:4548','EPSG:3857);

把 4548转化为3857形式。

;