Google maps 在谷歌地图中获取(x,y)中的标记位置

Google maps 在谷歌地图中获取(x,y)中的标记位置,google-maps,Google Maps,我正在使用谷歌地图。我想在单击标记时显示自定义信息窗口。为此,自定义信息窗口的左上角应覆盖标记 问题是我无法获得地图上标记的准确(x,y)ie地图分区位置。这是我第一次可以通过以下方式获得: var mposition=map.fromLatLngToDivPixel(marker.getLatLng()); pos=新的GControlPosition(G_锚定_顶部_左侧,新的GSize(位置x,位置y)); 但当我拖动地图时,x,y中的标记位置保持不变,因此我的信息窗口出现在错误的位置。

我正在使用谷歌地图。我想在单击标记时显示自定义信息窗口。为此,自定义信息窗口的左上角应覆盖标记

问题是我无法获得地图上标记的准确(x,y)ie地图分区位置。这是我第一次可以通过以下方式获得:

var mposition=map.fromLatLngToDivPixel(marker.getLatLng());
pos=新的GControlPosition(G_锚定_顶部_左侧,新的GSize(位置x,位置y));
但当我拖动地图时,x,y中的标记位置保持不变,因此我的信息窗口出现在错误的位置。 请帮助我了解,即使在拖动/缩放后,如何获得地图上标记的确切div相关位置


谢谢。

看看这个基于jquery的映射,它将如何帮助您

Thanxs, 戈壁

var overlay=new google.maps.OverlayView();
overlay.draw=函数(){};
覆盖.setMap(map);
var proj=overlay.getProjection();
var pos=marker.getPosition();
var p=LatlNgtoContainerPixel(位置)项目;
现在可以通过p.x和p.y访问像素坐标


或者,您可以尝试将fromLatLngToDivPixel更改为fromLatLngToContainerPixel。在平移贴图之前,这两个函数将返回相同的值,但在移动或操纵贴图中的任何内容之后,DivPixel函数将返回一个关于其原始位置的更新值,即:+x/+y像素。ContainerPixel函数将返回与容器div左上角相关的值。

经过一段时间的努力后,阅读其他帖子和文档等,下面是一些更新的代码,所有内容都在正确的位置:

var演示={
覆盖:空,
map:null,
//路由请求到DirectionService的回调
显示方向:功能(dirResult、dirStatus){
//...
//设置覆盖
Demo.overlay=new google.maps.OverlayView();
Demo.overlay.draw=函数(){};
Demo.overlay.setMap(Demo.map);
//绘制贴图后,添加侦听器以获取x y
google.maps.event.addListener(Demo.map'idle',function(){
var proj=Demo.overlay.getProjection();
变量xy=LatlNgtoContainerPixel(位置)项目;
//...
});
},
}

这是我的代码,没有类:


按原样使用,api的V3中的覆盖代码将给出一个错误,该错误来自getPosition()返回的未定义值。请参阅此处,以获得对此的修复,我发布了类似的答案。在地图画布完成加载之前,覆盖将不会初始化。您需要添加一个侦听器,该侦听器在映射加载完成时触发。这个意见没有用,或者与问题无关。
var map = null;
var ERROR_MESSAGES = {
    GPS_OFF: "please turn on GPS from your settings.",
    GPS_TIME_OUT: "maybe you are in a building or something, get into an open area.",
    GPS_UNKOWN: "Error happened while getting location, please try again later."
};

var geolocationManager = new GeolocationManager();
function success(position) {
    var coords = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
    var options = {
        zoom: 18,
        center: coords,
        mapTypeControl: false,
        disableDefaultUI: true,
        navigationControlOptions: {
            style: google.maps.NavigationControlStyle.SMALL
        },
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    map = new google.maps.Map(document.getElementById("mapcontainer"), options);
    var marker = new google.maps.Marker({
      position: coords,
      map: map,
      icon:'e-pin.png',
      animation:google.maps.Animation.BOUNCE
    });
}

function findPosition(onSuccess) {
    geolocationManager.isLocationEnabled(function (isEnabled) {
        if (!isEnabled) {
            Util.Alert(ERROR_MESSAGES.GPS_OFF);
            return;
        }
    geolocationManager.find(onSuccess, function (e) {
            Util.Alert(ERROR_MESSAG`enter code here`ES.GPS_UNKOWN);
        });

    }, function (e) {
        geolocationManager.find(onSuccess, function (e) {
            Util.Alert(ERROR_MESSAGES.GPS_UNKOWN);
        });
    });
}
function watchPosition () {
    geolocationManager.watch();
}

findPosition(success);
function getLocation() {
    if (!map)
        findPosition(success);
    else
        findPosition(showPosition);

    /*if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(showPosition);
    } else { 
        x.innerHTML = "Geolocation is not supported by this browser.";
    }*/
}
function setCurrentPosition() {
    findPosition(function (position) {
        var coords = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
        map.panTo(coords);
    });
}
function showPosition(position) {
    map.setCenter(new google.maps.LatLng(position.coords.latitude,position.coords.longitude));
}