【问题标题】:styled maps and places library Google Map API v3风格化的地图和地点库 Google Map API v3
【发布时间】:2012-07-13 18:18:16
【问题描述】:

如何从 Google 地方信息库中获取结果以显示在我的样式化 Google 地图上?使用这段代码,我只得到了样式化的地图,没有地方。

<script type="text/javascript"
  src="http://maps.googleapis.com/maps/api/js?key=mykey&sensor=true">
</script>
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?libraries=places&sensor=true"></script>  


<script type="text/javascript">


 function initialize() {
var styles = [ { featureType: "road.arterial", elementType: "geometry", stylers: [ {   color: "#808080" }, { weight: 0.5 } ] },{ featureType: "road.arterial", elementType: "labels.text.stroke", stylers: [ { visibility: "on" }, { color: "#fafafa" } ] },{ featureType: "water", elementType: "geometry", stylers: [ { color: "#b4d2fa" } ] },{ featureType: "water", elementType: "geometry.fill", stylers: [ { color: "#9c3239" } ] } ]

var styledMap = new google.maps.StyledMapType(styles,
{name: "WATS Map"});

var myLatLng = new google.maps.LatLng(42.3068, -83.681)

var mapOptions = {
zoom: 12,
center: myLatLng,
mapTypeControlOptions: {
  mapTypeIds: [google.maps.MapTypeId.ROADMAP, 'map_style']
}
};
var map = new google.maps.Map(document.getElementById('map_canvas'),
mapOptions);


map.mapTypes.set('map_style', styledMap);
map.setMapTypeId('map_style');


var request = {
      location: myLatLng,
      radius: 1500,
      types: ['store']
    };
    var infowindow = new google.maps.InfoWindow();
    var service = new google.maps.places.PlacesService(map);
    service.search(request, callback);
  }

  function callback(results, status) {
    if (status == google.maps.places.PlacesServiceStatus.OK) {
      for (var i = 0; i < results.length; i++) {
        createMarker(results[i]);
      }
    }
  }

  function createMarker(place) {
    var placeLoc = place.geometry.location;
    var marker = new google.maps.Marker({
      map: styledMap,
      position: place.geometry.location
    });

    google.maps.event.addListener(marker, 'click', function() {
      infowindow.setContent(place.name);
      infowindow.open(styledMap, this);
    });
  }
</script>

【问题讨论】:

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


    【解决方案1】:

    您必须将变量 map 设为全局变量并将 map 分配给 createMarker()

    中标记的映射选项

    目前您在那里使用 styledMap ,但这不是地图对象,而是 StyledMapType

    【讨论】:

    • 我发现styledMap这两个编码错误,并更正了。 map 变量是:var map = new google.maps.Map(document.getElementById('map_canvas'), mapOptions); 我的理解是它在javascript中默认是一个全局变量。不是这样吗?谢谢!
    • 我还尝试将 map 变量放在函数之外。不过还是不行
    • 我从头开始并设法让它工作......谢谢!
    • 当您使用 var 关键字定义变量时,该变量可在您定义它的范围内访问。在这种情况下,范围是函数,所以变量不是全局的。当您省略 var 关键字时,该变量始终是全局的,无论您在何处定义它。
    猜你喜欢
    • 1970-01-01
    • 2013-07-10
    • 2011-11-05
    • 2012-05-30
    • 1970-01-01
    • 2011-10-22
    • 1970-01-01
    • 1970-01-01
    • 2012-11-10
    相关资源
    最近更新 更多