Javascript 如何在谷歌地图上找到最靠近鼠标光标的lat/lon位置
我有很多马克笔 左边是谷歌地图上实际标记的标记抽象列表 我决定使用多段线Javascript 如何在谷歌地图上找到最靠近鼠标光标的lat/lon位置,javascript,google-maps-api-3,Javascript,Google Maps Api 3,我有很多马克笔 左边是谷歌地图上实际标记的标记抽象列表 我决定使用多段线 var flightPlanCoordinates = [ new google.maps.LatLng(near_cursor_lat, near_cursor_lon), new google.maps.LatLng(marker_lat, marker_lon) ]; var flightPath = new google.maps.Polyline({ path: fligh
var flightPlanCoordinates = [
new google.maps.LatLng(near_cursor_lat, near_cursor_lon),
new google.maps.LatLng(marker_lat, marker_lon)
];
var flightPath = new google.maps.Polyline({
path: flightPlanCoordinates,
strokeColor: "#FF0000",
strokeOpacity: 1.0,
strokeWeight: 2
});
flightPath.setMap(map);
其思想是用户将鼠标指向左侧的标记抽象框,然后在地图上显示从标记抽象到实际标记的线条。除了起点
(图像上的红点)之外,我已经拥有了所有东西
当鼠标指向左侧的框时,如何找到位于鼠标指针旁边的起始lat/long
一些细节:
当鼠标指向sais PERSON1的框时,我想要第一个红点的坐标。当鼠标指向sais PERSON2的框时,我想要第二个红点的坐标。等等有一个技巧部分-左框位于谷歌地图分区之外;此外,如果有许多包含人员的框,左div将允许上下滚动这些人员,因此人员框与红点之间的垂直相关性是动态的
理论上,我认为,我需要一个事件,当我指向其中一个框时触发。激发偶数时,我需要测量从顶部到鼠标指针的垂直距离(以像素为单位)。然后,当我有垂直距离时,我需要执行一些动作,在谷歌地图上测量相同的垂直距离,并以lat/lon坐标在地图上得到该点
这应该是您问题的答案: 您应该使用标记来表示(个人),然后在MouseOver上添加一个侦听器,如下面的帖子所示:
var overlay = new google.maps.OverlayView();
overlay.draw = function() {};
overlay.setMap(map); // 'map' is new google.maps.Map(...)
在侦听器中使用“覆盖”获取投影和像素坐标:
google.maps.event.addListener(marker, 'mouseover', function() {
var projection = overlay.getProjection();
var pixel = projection.fromLatLngToContainerPixel(marker.getPosition());
// use pixel.x, pixel.y ... (after some rounding)
});
抄袭自:
@MehdiKaramosly的答案非常恰当 仅稍微进一步,要获得不属于可见地图一部分的元素的lat lng(如果地图在那里可见),您可以将事件页面X/Y传递到行:
projection.fromLatLngToContainerPixel(marker.getPosition());
像这样:
var pixelLatLng = overlay.getProjection().fromContainerPixelToLatLng(new google.maps.Point(e.pageX,e.pageY));
我举了一个非常基本的例子:
如果您单击地图以外的任何位置(相当于单击覆盖它的div),您将在控制台日志中看到您单击的位置(即使它不在可见地图空间中)的lat/lng已被记录
干杯
C.使用 第二次更新 据我所知,您遇到的问题如下:
在上面的代码中,我在地图上显示了html以及id和数据mapid。现在,这个mapid可以是person1 person2,依此类推,这样您就可以使用列表将其关联回div。我使用ul和li将它们列在div中 将鼠标悬停在标记事件上,可以执行以下操作
我从3个位置复制粘贴了大量冗余代码,因此您可能只需要从中获得所需的内容 这可以使地图链接到列表和列表链接到地图。请在顶部查看我的第二次更新,或单击此。当您单击顶部的列表时,它会打开地图窗口,当您将鼠标悬停在地图图标上时,它会高亮显示列表
这也会通过列表而不是js中的硬编码lat long来填充地图。当您将鼠标悬停在侧菜单上时,是否有任何原因不希望地图在标记上平移和居中?它已经通过“居中图标”在那里了。我不明白您在问什么。试着把你的问题改写得更好。那些你称之为“标记抽象”的东西或按钮,它们是什么类型的对象?它们是覆盖层吗?它们是在地图上还是在地图旁边?从您的图像中,所有红点的经度都是相同的,而纬度是地图顶部的纬度减去按钮的高度乘以位置。(按钮1、按钮2等)。这就是您想要告诉的:当您在person 3框上悬停时,应该画一条线,从地图上3号人物框旁边的点到地图上相应的标记?我没有覆盖在人物上。这很难实现吗?这可能会有帮助是的,人员位于单独的部门,与mapsOK无关;你帮了很多忙;我添加了覆盖,在
div
鼠标悬停事件中,我获取了鼠标坐标。非常感谢。虽然每个人都帮了忙。当我点击“跑步”时,我看到了地图。它应该做什么?打开控制台日志,开始单击地图之外的任何地方。打开控制台日志,开始单击地图之外的任何地方。您将看到,即使未单击地图,纬度和经度仍将继续记录(我理解的操作是,您需要获取隐藏在div下的点的板条)。该lat/lng是与该点相关的lat/lng。我将在地图上用几个div更新演示,以供进一步参考,并添加一个新的linkseing@farrukk和answer。我可能误解了你的需要我在确定和找到标记物方面没有问题;我的问题是找到n
`jQuery("#gmap3ul li[data-gb='plist']").each(function(){
elemtopush = {
lat:jQuery(this).attr("data-lat"),
lng:jQuery(this).attr("data-long"),
data:{
"ht":jQuery(this).html(),
"id":jQuery(this).attr("data-mapid")
}
};
ulmarkerspgb.push(elemtopush);
});`
mouseover: function(marker, event, data)
{
clearalllist();
var listelement = jQuery("td[data-mapid='"+data.id+"']");
jQuery(listelement).attr('style','background-color:#ccc');
var map = jQuery(this).gmap3('get'),
infowindow = jQuery(this).gmap3({action:'get', name:'infowindow'});
if (infowindow){
infowindow.open(map, marker);
infowindow.setContent(data.ht);
google.maps.event.addListener(infowindow, 'closeclick', function(event) {
jQuery(listelement).attr('style','');
});
google.maps.event.addListener(infowindow, 'close', function(event) {
jQuery(listelement).attr('style','');
});
} else {
jQuery(this).gmap3({action:'addinfowindow', anchor:marker, options:{content: data.ht}});
infowindow = jQuery(this).gmap3({action:'get', name:'infowindow'});
google.maps.event.addListener(infowindow, 'closeclick', function(event) {
jQuery(listelement).attr('style','');
});
google.maps.event.addListener(infowindow, 'close', function(event) {
jQuery(listelement).attr('style','');
});
}
}