8

我正在尝试从此处的 json 文件动态加载地理编码http://debug-gotfed.admin.zope.net/bataviaeats/at/dev_remote_content

我收到“类型错误:a 未定义”。我错过了什么?

<script type="text/javascript">

  // Global

  var infowindow;
  var markers_img = 'http://gotfed.in/!/assets/global_images/got-fed-in-marker.png';
  var infoCloseIcon = 'images/close.png';
  var infoCloseMargin = '4px 4px 2px 2px';

  function initialize() {
    var mapOptions = {
      center: new google.maps.LatLng(58, 16),
      scrollwheel: false,
      mapTypeControl: false,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions);

    $.each(locations, function(i, data) {
      console.log(data.geocode);
      var position = new google.maps.LatLng(data.geocode);
      var marker = new google.maps.Marker({
          position: position,
          map: map,
          icon: markers_img
        });
      console.log(marker);
      // marker.setMap(map);
    });
  }
  google.maps.event.addDomListener(window, 'load', initialize);

  </script>
4

4 回答 4

16

您要么在加载页面时打开了 firebug 控制台,要么是 firefox 扩展程序之一阻塞了下载,从而使浏览器无法从 google 获取完整的脚本。

解决方法:打开firebug控制台,如果不是这样,那就试试单独禁用扩展看看有什么冲突。

于 2015-09-25T18:10:29.080 回答
5

只需将 v3 添加为例如发布版本,它就可以与 firebug 和任何其他扩展一起使用

<script src="https://maps.googleapis.com/maps/api/js?v=3"></script>

所有学分都在这里: Google Maps API:TypeError:a未定义

于 2015-10-31T05:47:40.930 回答
4

google.maps.LatLng构造函数有两个参数。这是错误的:

  var position = new google.maps.LatLng(data.geocode);

如果 data.geocode 已经是 google.maps.LatLng 对象,只需使用它。如果它是具有 lat 和 lng 属性的 JSON 对象,那么您必须将它们分别传递给构造函数:

  var position = new google.maps.LatLng(data.geocode.lat, data.geocode.lng);

您的特定数据的代码:

      var geocode=data.geocode.split(',');
      var position = new google.maps.LatLng(geocode[0],geocode[1]);
于 2013-10-31T11:28:42.620 回答
0

感谢所有回答的人。这是添加了信息框的最终工作代码。我确实必须将拆分的地理编码数据转换为数字。您可以实时查看此内容@http: //gotfed.in/fredericksburg-va

    <script type="text/javascript">

  // Global
  var map;
  var infowindow;
  var markers_img = 'http://gotfed.in/!/assets/global_images/got-fed-in-marker.png';
  var infoCloseIcon = 'http://gotfed.in/!/assets/global_images/close.png';
  var infoCloseMargin = '4px 4px 2px 2px';
  bounds = new google.maps.LatLngBounds();

  function initialize() {
    var mapOptions = {
      scrollwheel: false,
      mapTypeControl: false,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions);

    // create markers
    $.each(locations, function(i, data) {

      var geocode = data.geocode.split(',');
      var geo1 = parseFloat(geocode[0]);
      var geo2 = parseFloat(geocode[1]);
      var position = new google.maps.LatLng(geo1,geo2);
      var marker = new google.maps.Marker({
          position: position,
          map: map,
          icon: markers_img,
          title: data.business_name
        });
      bounds.extend(position);
      var id = "info" + i;
      console.log(id);
      var infobox = new InfoBox({
         content: document.getElementById(id),
         disableAutoPan: false,
         maxWidth: 150,
         pixelOffset: new google.maps.Size(-140, 0),
         zIndex: null,
         boxStyle: {width: "280px"},
        closeBoxMargin: infoCloseMargin,
        closeBoxURL: infoCloseIcon,
        infoBoxClearance: new google.maps.Size(1, 1)
      });
      google.maps.event.addListener(marker, 'click', function() {
        infobox.open(map, this);
        map.panTo(position);
      });
    });

    // set Bounds
    map.fitBounds(bounds);

    // Keep map centered
    var center;
    function calculateCenter() {
      center = map.getCenter()
    }
    google.maps.event.addDomListener(map, 'idle', function() {
      calculateCenter();
    });
    google.maps.event.addDomListener(window, 'resize', function() {
      map.setCenter(center);
    });

  }
  google.maps.event.addDomListener(window, 'load', initialize);
  </script>
于 2013-11-01T11:08:02.893 回答