Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 控制键+;点击谷歌地图上的事件_Jquery_Google Maps_Listener - Fatal编程技术网

Jquery 控制键+;点击谷歌地图上的事件

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

我想在谷歌地图上添加一个点击事件,该事件基于lat/lng获取地址。click事件可以正常工作,但是当我添加对按下alt键的检查时,地理代码逻辑不再工作

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
}