前端JS 调用 Google地图 以及拖拽地图事件触发

1.需要引入JS文件

<script src="http://maps.googleapis.com/maps/api/js?key=AIzaSyDnX7ZzqMBrXWmBLkOA18otCargKzrN8Iw"></script>

key没有的话 可以去下面这个网站按照操作说明获取

https://www.jb51.net/article/89970.htm

下面这个DIV就是展示地图的 id 可以修改 但是要保证全部用到的地方修改完毕

 <div class="div_map" id="div_map_info"></div>

标识点图片 就是这个红色图标  

2. 建议将生成地图的提成一个方法 用定时判断是否Google加载完毕 红框部分是我自己传递的参数 实际情况自行调整 不需要可以删除

 3.googleParInfo.initGoogleMap 方法 要是下面方法有些参数变量没用到 可以根据实际情况删除

红色标记的为主要初始化地图的方法 其他的方法属于获取地图内的一些参数

var googleParInfo = {
    imangePath: "",

    marker_data: "",
    // 地图初始化
    initGoogleMap: function(imangePath, objData){
        googleParInfo.imangePath = imangePath;

        var map;
        var lat = $("#hidden_latitude").val(); // 纬度
        var lng =  $("#hidden_longitude").val(); // 经度
        var marker;// 标注
        var infowindow;// 汽泡
        var marker_first; // 第一个标注
        function initialize() {
            // 初始位置
            if(lat == "" || lng == ""){
                    lat = "22.6876402383";
                    lng = "113.9259866372";
                }
                var latLng = {"lat":lat,"lng":lng};
                var myLatlng = new google.maps.LatLng(lat, lng);
                var mapOptions = {
                    zoom: 8,
                    center: myLatlng,
                    mapTypeId: google.maps.MapTypeId.ROADMAP
                };
                map = new google.maps.Map(document.getElementById('div_map_info'), mapOptions);
                if (marker_first != null) {
                    marker_first.setMap(null);
                }
                //var clickedLocation = new google.maps.LatLng(myLatlng);
                marker_first = new google.maps.Marker({
                    position: myLatlng,
                    map: map,
                    icon: imangePath +"/resources/shineDesign/img/designPlant/google_point.png" // 就是标识点图片 见文章最上面 
                });
                
                marker_first.setDraggable(true);
                googleParInfo.marker_data = marker_first;
                // 当地图拖拽的时候处理的内容
                google.maps.event.addListener(marker_first, 'dragend', googleParInfo.googleDragend);
        }
        //google.maps.event.addDomListener(window, 'load', initialize); 这种写法有些情况不兼容 可以换成下面的
        initialize() // 加载地图
    },
    
    // 获取定位点具体位置
    getGoogleAddress: function (aData){
        var arrayInfo = new Array();
        for(var s = 0; s < aData.length; s++){ // 过滤不知名的路 往上找
            if(aData[s]["formatted_address"].indexOf("Unnamed") != -1){
                continue;
            }
            arrayInfo.push(aData[s]);
            break;
        }
        return arrayInfo[0].formatted_address
    },
    
    // 获取地图定位相关城市信息
    getGoogleCity: function(aData){
        var arrayInfo = new Array();
        for(var s = 0; s < aData.length; s++){ // 获取长度为2 或者为3 的 这样里面就包含了 省市区信息了
            if(aData[s]["address_components"].length == 2 || aData[s]["address_components"].length == 3){
                if(aData[s]["formatted_address"].match(/\d+/g)){ // 过滤是数字的城市
                    continue;
                }
                if(aData[s]["formatted_address"].indexOf("Unnamed") != -1){ // 过滤不知名的路 往上找
                    continue;
                }
                arrayInfo.push(aData[s]);
            }
        }
        if(arrayInfo.length > 0){
            return arrayInfo[0];
        }
        // 不确定上面的判断能全部过滤 下面的这段代码留着备用
        switch (aData.length){
             case 4:
                 return aData[0];
                 break;
             case 5:
                 return aData[1];
                 break;
             case 6:
                 return aData[2];
                 break;
             case 7:
                 return aData[3];
                 break;
             case 8:
                 return aData[4];
                 break;
             case 9:
                 return aData[5];
                 break;
             case 10:
                 return aData[6];
                 break;
             default:
                 return aData[0];
                 break;
         }
     },
    
     //根据输入的位置定位地图 该方法 可以绑定 blur事件触发
     addressTolatLng: function (){
         var geocoder = new google.maps.Geocoder();
         var latLng;
         var address = document.getElementById("geoLoca_insAddr").value; // 输入的地址
         var a = new google.maps.ElevationService();
         geocoder.geocode({'address':address},function(results,status){
             if(status == google.maps.GeocoderStatus.OK){
                 var latitude = results[0].geometry.location.lat();//经度
                 var longitude = results[0].geometry.location.lng();//纬度
                 var marker_first;
                 latLng = {"lat":latitude,"lng":longitude};
                 var myLatlng = new google.maps.LatLng(latitude, longitude);
                 var mapOptions = {
                     zoom: 10,
                     center: myLatlng,
                     mapTypeId: google.maps.MapTypeId.ROADMAP
                 };
                 map = new google.maps.Map(document.getElementById('div_map_info'), mapOptions);
                 if (marker_first != null) {
                     marker_first.setMap(null);
                 }
                 //var clickedLocation = new google.maps.LatLng(myLatlng);
                 marker_first = new google.maps.Marker({
                     position: myLatlng,
                     map: map,
                     icon: googleParInfo.imangePath +"/resources/shineDesign/img/designPlant/google_point.png"
                 });
                 googleParInfo.setInstallInfo(results, false)
                 marker_first.setVisible(true);
                 marker_first.setDraggable(true);
                 googleParInfo.marker_data = marker_first;
                 google.maps.event.addListener(marker_first, 'dragend', googleParInfo.googleDragend);
                 a.getElevationForLocations({locations:[latLng]},function(data){
                     if (data && data[0]){
                         var alt = Math.round(data[0].elevation);
                         $("#loca_altitude").val(alt) // 海拔
                     
                     }
                 });
             }else{
                 alert("没有找到相应的地址")
             }
         })
     },
     
     // 获取地图位置相关信息(根据项目实际情况修改下面方法)
     setInstallInfo: function (responses, isCoverage){
        if(responses && responses.length > 0) {
            var cityInfo = googleParInfo.getGoogleCity(responses);
            var address = googleParInfo.getGoogleAddress(responses)
            if(isCoverage != false){
                $("#geoLoca_insAddr").val(address); // 安装当前定位的具体位置
                
            }
            if(cityInfo.address_components.length == 2){
                $("#hidden_district").val(cityInfo.address_components[1]["long_name"]); // 区域
                $("#hidden_country").val(cityInfo.address_components[1]["long_name"]); // 国家
                $("#loca_city").val(cityInfo.address_components[0]["long_name"]); // 城市
            }else if(cityInfo.address_components.length == 3){
                $("#hidden_district").val(cityInfo.address_components[2]["long_name"]); // 区域
                $("#hidden_country").val(cityInfo.address_components[2]["long_name"]); // 国家
                $("#loca_city").val(cityInfo.address_components[0]["long_name"]); // 城市
            }else{
                var newArray = new Array();
                newArray = cityInfo.address_components.reverse();
                $("#hidden_district").val(newArray[0]["long_name"]); // 区域
                $("#hidden_country").val(newArray[0]["long_name"]); // 国家
                $("#loca_city").val(newArray[2]["long_name"]); // 城市
            }
        }
    },
    
    // 地图拖动定义的方法
    googleDragend: function(){
         var marker_first = googleParInfo.marker_data
         var lat = marker_first.getPosition().lat();
         var lng = marker_first.getPosition().lng();
         $("#hidden_latitude").val(lat);
         $("#hidden_longitude").val(lng);
         var a = new google.maps.ElevationService();
         var latLng = {"lat":lat,"lng":lng};
         var geocoder = new google.maps.Geocoder();
         geocoder.geocode({
             latLng: latLng
         }, function(responses) {
             googleParInfo.setInstallInfo(responses)
         });
         a.getElevationForLocations({locations:[latLng]},function(data){
             if (data && data[0]){
                 var alt = Math.round(data[0].elevation);
                 $("#loca_altitude").val(alt) // 海拔
             }
         });  
    }
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值