我能想到两种可能的选择。
首先,您可能需要考虑将GeoLocation API 用作ceejayoz suggested。这很容易实现,它是一个完全客户端的解决方案。要使用 GeoLocation 使地图居中,只需使用:
map.setCenter(new google.maps.LatLng(position.coords.latitude,
position.coords.longitude), 13);
...在 GeoLocation 的 getCurrentPosition() 方法的 success() 回调中。
很遗憾,目前只有少数现代浏览器支持 GeoLocation API。因此,您也可以考虑使用服务器端的解决方案,将客户端的 IP 地址解析为用户的位置,使用诸如MaxMind's GeoLite City 之类的服务。然后,您可以使用 Google Maps API 在浏览器中简单地对用户所在的城市和国家/地区进行地理编码。以下可能是一个简短的示例:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<title>Google Maps API Geocoding Demo</title>
<script src="http://maps.google.com/maps?file=api&v=2&sensor=false"
type="text/javascript"></script>
</head>
<body onunload="GUnload()">
<div id="map_canvas" style="width: 400px; height: 300px"></div>
<script type="text/javascript">
var userLocation = 'London, UK';
if (GBrowserIsCompatible()) {
var geocoder = new GClientGeocoder();
geocoder.getLocations(userLocation, function (locations) {
if (locations.Placemark) {
var north = locations.Placemark[0].ExtendedData.LatLonBox.north;
var south = locations.Placemark[0].ExtendedData.LatLonBox.south;
var east = locations.Placemark[0].ExtendedData.LatLonBox.east;
var west = locations.Placemark[0].ExtendedData.LatLonBox.west;
var bounds = new GLatLngBounds(new GLatLng(south, west),
new GLatLng(north, east));
var map = new GMap2(document.getElementById("map_canvas"));
map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
map.addOverlay(new GMarker(bounds.getCenter()));
}
});
}
</script>
</body>
</html>
只需将userLocation = 'London, UK' 替换为服务器端解析的地址即可。以下是上例的截图:
您可以通过删除 map.addOverlay(new GMarker(bounds.getCenter())); 行来删除标记。