我正在使用带有bing map的OpenLayers。我添加了一个标记,但它显示在不同的位置。我在bing地图中使用的坐标相同,它显示在正确的位置。
这是OpneLayers的结果
$(function () {
var tileLayer = new ol.layer.Tile({
source: new ol.source.BingMaps({
key: 'Armnl..',
imagerySet: 'Aerial'
})
});
var map = new ol.Map({
layers: [tileLayer],
target: 'map',
view: new ol.View({
center: [-22.3869608, -49.7602708],
zoom: 5,
})
});
var p1 = new ol.Feature({
geometry: new ol.geom.Point([-22.3869608, -49.7602708])
});
var vectorSource = new ol.source.Vector({
features: [p1]
});
var vectorLayer = new ol.layer.Vector({
source: vectorSource
});
map.addLayer(vectorLayer);
});
我需要转换坐标吗?
答案 0 :(得分:1)
确实如此,您需要将您的坐标转换为EPSG:3857
。
您有2种不同的选择
1)使用epsg:4326构建地图。这意味着应该进行客户端磁贴重新投影。
这样做
var map = new ol.Map({
layers: [tileLayer],
target: 'map',
view: new ol.View({
projection:'EPSG:4326',
center: [-22.3869608, -49.7602708],
zoom: 5,
})
});
2)你从你的中心转移到'EPSG:3857'。应该使用此投影,因为您没有在ol.view配置中指定它。 (投影从附加到地图的第一个图块层自动获取)。
这样做
var map = new ol.Map({
layers: [tileLayer],
target: 'map',
view: new ol.View({
center: ol.proj.transform([-22.3869608, -49.7602708], 'EPSG:4326','EPSG:3857');
zoom: 5,
})
});
结束你的矢量点
var p1 = new ol.Feature({
geometry: new ol.geom.Point(ol.proj.transform([-22.3869608, -49.7602708], 'EPSG:4326','EPSG:3857'))
});