无法使用openlayers 3在正确的坐标位置放置标记

7

我正在开发openlayers 3,希望实现一个搜索功能,能够根据地点名称在地图上定位标记。我已经可以获取坐标,但是当我想要将其标记添加到地图上时,总是得到不同的位置。输入地点的标记没有被放置在地图的实际坐标上。

以下是我正在处理的代码:

function addmarker(lat, long, pointerimgsrc){

    var iconFeature = new ol.Feature({      
        geometry: new ol.geom.Point(ol.proj.transform([lat, long], 'EPSG:4326', 'EPSG:3857')),
        name: 'NULL'
        });


    var iconStyle = new ol.style.Style({
        image: new ol.style.Icon(({
        anchor: [0.5, 46],
        anchorXUnits: 'fraction',
        anchorYUnits: 'pixels',
        opacity: 0.75,
        //src: 'data/icon.png'
        src: pointerimgsrc
        }))
    });

    iconFeature.setStyle(iconStyle);

    vectorSource = new ol.source.Vector({
        features: [iconFeature]
    });

    vectorLayer = new ol.layer.Vector({
        source: vectorSource
    });

    map.addLayer(vectorLayer);

}// END addmarkerr()

我希望我已经清楚地解释了我的问题,期待解决方案。非常感谢您事先的时间和支持。
1个回答

8
EPSG:4326 坐标顺序为经度、纬度,而不是纬度、经度。因此,您应该将执行EPSG:4326到EPSG:3857转换的代码行更改一下。
ol.proj.transform([lon, lat], 'EPSG:4326', 'EPSG:3857')

仍然存在同样的问题,我输入了慕尼黑的实际经纬度(48.1372719,11.5754815),但它将标记放置在经纬度为11.557617187499996,-41.60722821271713的位置。 - Amir
但是,如果我写硬编码的值,它可以工作。如下所示:ol.proj.transform([11.5754815, 48.1372719], 'EPSG:4326', 'EPSG:3857') - Amir
6
也许你的经纬度数值是字符串。在传递给 transform 函数之前,使用 +lon+lat 将它们转换为数字。请注意,这样做不会改变原来的意思,只是使内容更加通俗易懂。 - erilem

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接