Jquery 控制键+;点击谷歌地图上的事件
我想在谷歌地图上添加一个点击事件,该事件基于lat/lng获取地址。click事件可以正常工作,但是当我添加对按下alt键的检查时,地理代码逻辑不再工作Jquery 控制键+;点击谷歌地图上的事件,jquery,google-maps,listener,Jquery,Google Maps,Listener,我想在谷歌地图上添加一个点击事件,该事件基于lat/lng获取地址。click事件可以正常工作,但是当我添加对按下alt键的检查时,地理代码逻辑不再工作 google.maps.event.addListener(map, 'click', function(event) { if (event.altKey) { var geocoder= new google.maps.Geocoder
google.maps.event.addListener(map, 'click', function(event) {
if (event.altKey) {
var geocoder= new google.maps.Geocoder();
var myLat = event.latLng.lat().toFixed(5);
var myLng = event.latLng.lng().toFixed(5);
var arrAddress = "";
var thisAddress = "Latitude :" + myLat + "<br/>" +
"Longitude: " + myLng + "<br/>";
var i;
geocoder.geocode({'latLng': event.latLng}, function(results, status){
if (status == google.maps.GeocoderStatus.OK) {
arrAddress = results[0]['address_components'];
$.each(arrAddress, function (i, address_component) {
if (address_component.types[0] == "route" ||
address_component.types[0] == "street_number" ||
address_component.types[0] == "locality" ||
address_component.types[0] == "postal_code" ||
address_component.types[0] == "administrative_area_level_1") {
thisAddress += address_component.types[0] +":" + address_component.long_name + "<br/>";
}
});
fnPlaceMarkers(event.latLng,thisAddress,"adhoc");
};
});
};
});
}
google.maps.event.addListener(映射,'click',函数(事件){
if(event.altKey){
var geocoder=new google.maps.geocoder();
var myLat=event.latLng.lat().toFixed(5);
var myLng=event.latLng.lng().toFixed(5);
var arrAddress=“”;
var thisAddress=“纬度:+myLat+”
+
“经度:”+myLng+“
”;
var i;
geocoder.geocode({'latLng':event.latLng},函数(结果,状态){
如果(status==google.maps.GeocoderStatus.OK){
arrAddress=results[0]['address_components'];
$.each(数组地址、函数(i、地址\组件){
如果(地址\u组件类型[0]=“路由”||
地址组件。类型[0]=“街道编号”||
地址\u组件。类型[0]=“位置”||
地址组件。类型[0]=“邮政编码”||
地址\u组件。类型[0]=“管理\u区域\u级别\u 1”){
thisAddress+=地址组件。类型[0]+“:“+地址组件.long\u名称+”
”;
}
});
FNPlaceMarkets(事件时间,本地址为“临时”);
};
});
};
});
}
如果查看Google Maps发送给我们的onClick事件,则没有altKey值。这就是为什么它总是返回false并跳过您的逻辑
解决方法是使用jquery提供的keydown和keyup回调来存储正在按下的键
keys = {};
$(document).keydown(function (event) {
keys[event.which] = true;
});
$(document).keyup(function (event) {
delete keys[event.which];
});
因此,您可以检查是否按了值为
18
的alt键来替换事件。altKey
一个选项是在map DOM对象上使用google.maps.event.addDomListener,这是一个本机DOM click事件,具有altKey属性
根据本机单击事件(clientX,clientY)中的X/Y坐标,您可以使用以下公式计算Lat/Lng:
fromDivPixelToLatLng(pixel:Point,nowrap?:boolean)LatLng根据保存可拖动地图的div中的像素坐标计算地理坐标
代码段:
var地理编码器;
var映射;
var infowindow=new google.maps.infowindow();
函数初始化(){
map=新建google.maps.map(
document.getElementById(“地图画布”){
中心:新google.maps.LatLng(37.4419,-122.1419),
缩放:13,
mapTypeId:google.maps.mapTypeId.ROADMAP
});
overlay=新的google.maps.OverlayView();
overlay.draw=函数(){};
覆盖.setMap(map);
google.maps.event.addDomListener(document.getElementById(“map_canvas”),“单击”,函数(事件){
if(event.altKey){
var=这个;
var geocoder=new google.maps.geocoder();
var point=new google.maps.point(event.clientX,event.clientY);
var latLng=overlay.getProjection().fromDivPixelToLatLng(点);
var myLat=latLng.lat().toFixed(5);
var myLng=latLng.lng().toFixed(5);
var arrAddress=“”;
var thisAddress=“纬度:+myLat+”
+
“经度:”+myLng+“
”;
var i;
var clickedPoint=new google.maps.Marker({
位置:latLng,
地图:地图,
图标:{
url:“https://maps.gstatic.com/intl/en_us/mapfiles/markers2/measle.png",
大小:新谷歌地图大小(7,7),
主播:新google.maps.Point(3.5,3.5)
}
});
地理编码({
“latLng”:latLng
},功能(结果、状态){
if(status==google.maps.GeocoderStatus.OK){
arrAddress=results[0]['address_components'];
$.each(数组地址、函数(i、地址\组件){
如果(地址组件.types[0]=“路线”|地址组件.types[0]=“街道号”|地址组件.types[0]=“地点”|地址组件.types[0]=“邮政编码”|地址组件.types[0]=“行政区域级别1”){
thisAddress+=地址组件。类型[0]+“:“+地址组件.long\u名称+”
”;
}
});
fnPlaceMarkers(latLng,本地址为“临时”);
};
});
};
});
}
google.maps.event.addDomListener(窗口“加载”,初始化);
功能标记(板条、地址、类型){
var marker=new google.maps.marker({
位置:latlng,
地图:地图
});
google.maps.event.addListener(标记,'click',函数(e){
infowindow.setContent(地址);
信息窗口。打开(地图、标记);
});
}
html,
身体,
#地图画布{
身高:100%;
宽度:100%;
边际:0px;
填充:0px
}