Why isn't this an instance of map of google.maps.Map? InvalidValueError: setMap: not an instance of Map;

前端 未结 3 925
予麋鹿
予麋鹿 2021-02-20 06:19

I am getting the error Assertion failed: InvalidValueError: setMap: not an instance of Map; and not an instance of StreetViewPanorama on a google map web page. I th

3条回答
  •  攒了一身酷
    2021-02-20 07:24

    The map variable that is an instance of a google.maps.Map is local to the initialize function. The map variable in the createMarker function is undefined. One option: define the variable in the global scope:

    var map;
    

    then just initialize it in the initialize function:

    function initialize(){
        var mapProp = {
            center: new google.maps.LatLng(38, -78),
            zoom: 10,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        map = new google.maps.Map(document.getElementById('map'), mapProp);
    };
    

    proof of concept fiddle

    code snippet:

    var map;
    
    function initialize() {
      var mapProp = {
        center: new google.maps.LatLng(38, -78),
        zoom: 6,
        mapTypeId: google.maps.MapTypeId.ROADMAP
      };
      map = new google.maps.Map(document.getElementById('map'), mapProp);
    };
    
    $(document).ready(function() {
      var url = 'https://opendata.howardcountymd.gov/resource/96q9-qbh7.json';
      initialize();
      $.getJSON(url, function(data) {
        $.each(data, function(i, field) {
          $('#list').append("
  • " + data[i].location.longitude + " & " + data[i].location.latitude + "
  • "); createMarker(data); function createMarker(data) { var marker = new google.maps.Marker({ position: new google.maps.LatLng(data[i].location.latitude, data[i].location.longitude), map: map, title: field.crossroad }); }; }); }); });
    #map {
      height: 300px;
      width: 600px;
      border: 1px solid black;
      margin: 0 auto;
    }
    
    
    

    Hello World

      Another option would be to return the map from the initialize function

    提交回复
    热议问题