Google Maps Places API问题与getPlaces()函数有关

时间:2012-11-01 14:34:55

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

有人能告诉我为什么getPlaces()函数会在下面返回一个空格字符串吗?

在head元素中,我有指向Google地图脚本的链接

<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?sensor=false&v=3.exp&key=MyKey&libraries=places"></script>

Javascript代码:

jQuery(window).load(function() {
  var map = new google.maps.Map(document.getElementById('mapCanvas'), {
    mapTypeId: google.maps.MapTypeId.ROADMAP,
    streetViewControl: false
  });
  var defaultBounds = new google.maps.LatLngBounds(
    new google.maps.LatLng(41.7033177, -93.0573533),
    new google.maps.LatLng(41, -93)
  );

  map.fitBounds(defaultBounds);

  var input = document.getElementById('addressSearch');
  var searchBox = new google.maps.places.SearchBox(input);
  var markers = [];

  google.maps.event.addListener(searchBox, 'places_changed', function() {
    var places = searchBox.getPlaces();

    for (var i = 0, marker; marker = markers[i]; i++) {
      marker.setMap(null);
    }

    markers = [];
    var bounds = new google.maps.LatLngBounds();

    for (var i = 0, place; place = places[i]; i++) {
      var place = places[i];
      var marker = new google.maps.Marker({
        map: map,
        title: place.name,
        position: place.geometry.location,
        draggable: true
      });
      markers.push(marker);

      bounds.extend(place.geometry.location);
    }
    map.fitBounds(bounds);
    if (markers.length == 1) map.setZoom(17);
  });

  google.maps.event.addListener(map, 'bounds_changed', function() {
    var bounds = map.getBounds();
    searchBox.setBounds(bounds);
  });
});

此代码来自Google的开发者网站,来自带有文本搜索字段的示例,因此它应该可以正常工作。 2天前,它工作正常。现在它没有。问题是getPlaces()方法返回一个带空格字符的字符串,而不是它应该返回的数组。我在这里缺少什么?

更新:好的,我的问题不够明确。搜索框中的自动完成功能有什么用处。什么行不通的是places_changed事件,特别是行

var places = searchBox.getPlaces();

places变量应该包含一个数组,这样在下一个for循环中,它将创建一个标记数组并将它们放在地图上。相反,它返回的是一个空字符串。

1 个答案:

答案 0 :(得分:7)

而不是:

var searchBox = new google.maps.places.SearchBox(input);

尝试:

var searchBox = new google.maps.places.Autocomplete(input);

而不是

var places = searchBox.getPlaces();

var place = searchBox.getPlace();