导航

资源

Google Map API包含了大量的文档、示例和各种资料。在使用前需要申请自己的密钥
墙内要用:http://maps.google.cn/maps/api/js?
墙外可用:https://maps.googleapis.com/maps/api/js?

初始化地图

var cn = {lat: 39.88892859714545, lng: 116.40975952148438};
var mapDiv = document.getElementById('form_map');
map = new google.maps.Map(mapDiv, {
  center: cn,
  zoom: 15,
  mapTypeId: 'roadmap'
});
map.addListener('click', function(e) {
  placeMarker(e.latLng, map);
});

上面的代码就初始化了一个地图,并且监听了鼠标点击事件。

鼠标点击

function placeMarkerAndPanTo(latLng, map) {
    $("#form_map_x").val(latLng.lat());
    $("#form_map_y").val(latLng.lng());
    //clear old marker
    if(marker!=null){
      marker.setMap(null);
      marker = null;          
    }
    //show new marker
    marker = new google.maps.Marker({
      position: latLng,
      map: map,
      icon: '/image/poi_custom.png'
    });
    //map.panTo(latLng);//mpa change center
}

相应鼠标点击事件,先清除旧标记,再添加一个新的标注,并且把经纬度输出input表单里。

地图搜索

// Create the search box and link it to the UI element.
var input = document.getElementById('pac-input');
var searchBox = new google.maps.places.SearchBox(input);
map.controls[google.maps.ControlPosition.TOP_LEFT].push(input);

// Bias the SearchBox results towards current map's viewport.
map.addListener('bounds_changed', function() {
  searchBox.setBounds(map.getBounds());
});

var markers = [];
// Listen for the event fired when the user selects a prediction and retrieve
// more details for that place.
searchBox.addListener('places_changed', function() {
  var places = searchBox.getPlaces();

  if (places.length == 0) {
    return;
  }

  // Clear out the old markers.
  markers.forEach(function(marker) {
    marker.setMap(null);
  });
  markers = [];

  // For each place, get the icon, name and location.
  var bounds = new google.maps.LatLngBounds();
  places.forEach(function(place) {
    if (!place.geometry) {
      console.log("Returned place contains no geometry");
      return;
    }
    var icon = {
      url: place.icon,
      size: new google.maps.Size(71, 71),
      origin: new google.maps.Point(0, 0),
      anchor: new google.maps.Point(17, 34),
      scaledSize: new google.maps.Size(25, 25)
    };

    // Create a marker for each place.
    markers.push(new google.maps.Marker({
      map: map,
      icon: icon,
      title: place.name,
      position: place.geometry.location
    }));

    if (place.geometry.viewport) {
      // Only geocodes have viewport.
      bounds.union(place.geometry.viewport);
    } else {
      bounds.extend(place.geometry.location);
    }
  });
  map.fitBounds(bounds);
});

地图响应一个input表单的输入内容,改变地图的中心,并设置搜索地点的标注

改变国家和城市

经常需要设置地图显示某个国家的某个城市,而不是根据具体的经纬度设置地图的中心。
用以下代码可以改变地图的国家和城市

geocoder.geocode({'address': '北京, 中国'}, function(results, status) {
  if (status === 'OK') {
      map.setCenter(results[0].geometry.location);
  }
});

本文的具体例子在这里