来自DivPixelToLatLng的Google Maps API V3不一致

pin*_*ksy 5 javascript maps google-maps google-maps-api-3 google-maps-markers

我需要在地图div的固定像素位置放置一个标记.要实例化标记,您需要一个LatLng.我知道fromDivPixelToLatLng()是从像素坐标转换为LatLng的方法,但我不能让它表现得一致.

我在http://www.pinksy.co.uk/newsquare/overlaytest.html上发布了一个简单的问题示例.单击地图以200px/200px放置标记.拖动地图并再次单击.我期待每次将标记放置在200px/200px,但事实并非如此.

首先,我像往常一样设置地图,在600px乘300px div:

var london = new google.maps.LatLng(51.501904,-0.130463);
var mapOptions = {
    zoom: 15,
    center: london,
    mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
Run Code Online (Sandbox Code Playgroud)

然后我创建一个叠加层:

var overlay = new google.maps.OverlayView();
overlay.draw = function() {};
overlay.setMap(map);
Run Code Online (Sandbox Code Playgroud)

为了测试fromDivPixelToLatLng(),我在地图上创建了一个点击事件,它试图在200像素/ 200像素的像素位置放置一个标记.无论你在哪里拖动地图,我都希望标记总是放在200px/200px:

google.maps.event.addListener(map, 'click', function(event) {

    var pixelLatLng = overlay.getProjection().fromDivPixelToLatLng(new google.maps.Point(200,200));

    var marker = new google.maps.Marker({
        position: pixelLatLng,
        map: map
    });
});
Run Code Online (Sandbox Code Playgroud)

但是,拖动地图,您会看到标记并不总是放在200px/200px处.有任何想法吗?

谢谢!

pin*_*ksy 3

经过实验,我发现 fromContainerPixelToLatLng() 就是我正在寻找的。为了其他人的利益,我在 http://www.pinksy.co.uk/newsquare/overlaytest2.html上发布了一个示例。

(郑重声明,我仍然不确定为什么 fromDivPixelToLatLng 的行为方式如此,但没关系!)