地图不可见,谷歌未定义

时间:2017-10-23 06:34:18

标签: javascript google-maps google-maps-api-3

我需要在点击标记的任何点周围做一个缓冲区/圆圈。我遵循的代码是https://www.codeproject.com/Articles/587199/Draw-Cirlce-Around-Marker-in-Google-Map。我已经提到了有关这些问题的先前提出的问题,但未能找到满意的答案。我要求所有能够回答的人请分享,因为这会有很大的帮助。提前致谢。我添加了显示错误的脚本文件。

     <script src="bootstrap-3.3.7-dist/jquery-3.2.1%20(2).js">     </script>
         <script>
         var map;
         var circle;
         var marker;

     var currentlatlng = new google.maps.LatLng(23.06368, 72.53135);  
     function loadMap() {
         setLatLongValue();
         var currentlatlng = new google.maps.LatLng(23.06368, 72.53135);   
         var map = new google.maps.Map(document.getElementById('map'), {
             zoom: 16,
             center: currentlatlng,   
             mapTypeId: 'terrain',
             mapTypeControl: true,
             navigationControl: true
         });

         var marker = new google.maps.Marker({  
             position: currentlatlng,  
             draggable: true,
             map: map
         });

     }

     function setLatLongValue() {
         jQuery('#txtPointA1').val(currentlatlng.lat());//#txtPointA1
         jQuery('#txtPointA2').val(currentlatlng.lng());

     }
     marker.addListener('click', function (event) {
         drawCircle(event.latLng);
     });
     function drawCircle() {

         if (circle != undefined)
             circle.setMap(null);

         var radius = 200;

         if (jQuery('#txtPointB1').val() != '' && !isNaN(jQuery('#txtPointB1').val()) && parseInt(jQuery('#txtPointB1').val()) > 0) {
             radius = parseInt(jQuery('#txtPointB1').val());
         }
         jQuery('#txtPointB1').val(radius.toString());

         var options = {
             strokeColor: '#800000',
             strokeOpacity: 1.0,
             strokeWeight: 1,
             fillColor: '#C64D45',
             fillOpacity: 0.5,
             map: map,
             center: currentlatlng,
             radius: radius
         };

         circle = new google.maps.Circle(options);
     } 

     $(window).load(function () {

         loadMap();
         setLatLongValue();
                      drawCircle();
     });
            //$(document).ready(function () {
            //    loadMap();
            //    setLatLongValue();
            //    //setMarker();
            //    drawCircle();
            //});
</script>
    <script async 
src="https://maps.googleapis.com/maps/api/js?key=KEY&callback=loadMap">
     </script>

1 个答案:

答案 0 :(得分:3)

由于此声明

,你得到的是'未捕获的ReferenceError:未定义谷歌'
var currentlatlng = new google.maps.LatLng(23.06368, 72.53135);

在执行此代码行时,谷歌尚未定义。我建议将该语句放在loadMap()函数中。

请查看此工作示例:http://jsbin.com/lukexag/4/edit?html,css,js,output

以下是代码段:

var map;
var circle;
var marker;
var currentlatlng;

function loadMap() {
    setLatLongValue();
    currentlatlng = new google.maps.LatLng(23.06368, 72.53135);
    map = new google.maps.Map(document.getElementById('map'), {
        zoom: 16,
        center: currentlatlng,
        mapTypeId: 'terrain',
        mapTypeControl: true,
        navigationControl: true
    });

    var marker = new google.maps.Marker({
        position: currentlatlng,
        draggable: true,
        map: map
    });
  
    marker.addListener('click', function(event) {
      drawCircle(event.latLng);
    });

    setLatLongValue();
    drawCircle();
}

function setLatLongValue() {
    // jQuery('#txtPointA1').val(currentlatlng.lat()); //#txtPointA1
    // jQuery('#txtPointA2').val(currentlatlng.lng());
}

function drawCircle() {

    var radius = 200;

    
    if (jQuery('#txtPointB1').val() !== '' && !isNaN(jQuery('#txtPointB1').val()) && parseInt(jQuery('#txtPointB1').val()) > 0) {
        radius = parseInt(jQuery('#txtPointB1').val());
    }
    jQuery('#txtPointB1').val(radius.toString());
   

    var options = {
        strokeColor: '#800000',
        strokeOpacity: 1.0,
        strokeWeight: 1,
        fillColor: '#C64D45',
        fillOpacity: 0.5,
        map: map,
        center: currentlatlng,
        radius: radius
    };

    circle = new google.maps.Circle(options);
}
#map {
  width: 500px;
  height: 500px;
}
<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>Sample</title>
</head>

<body>
    <div id="map"></div>
    <script src="bootstrap-3.3.7-dist/jquery-3.2.1%20(2).js">
    </script>
    <script src="https://code.jquery.com/jquery-3.1.0.js"></script>
    <script async src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCKQX3cyZ7pVKmBwE8wiowivW9qH62AVk8&callback=loadMap">
    </script>
</body>

</html>

更新:Radius正在运行