简答介绍一下,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形式。