OpenLayers投射到不同的位置Vs Bing Maps

时间:2016-05-17 10:09:51

标签: openlayers bing-maps openlayers-3

我正在使用带有bing map的OpenLayers。我添加了一个标记,但它显示在不同的位置。我在bing地图中使用的坐标相同,它显示在正确的位置。

此处bing search result

enter image description here

这是OpneLayers的结果

enter image description here

    $(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);

    });

我需要转换坐标吗?

1 个答案:

答案 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'))
        });