我可以想到兩種可能的選擇。
首先,您可能需要考慮使用GeoLocation API作爲ceejayoz suggested。這很容易實現,它是一個完全客戶端解決方案。要使用地理位置地圖中心,只需使用:
map.setCenter(new google.maps.LatLng(position.coords.latitude,
position.coords.longitude), 13);
...的success()
回調地理位置的getCurrentPosition()
方法裏面。
不幸的是,只有少數幾個現代瀏覽器支持GeoLocation API。因此,您還可以考慮使用服務器端解決方案,使用MaxMind's GeoLite City等服務將客戶端的IP地址解析到用戶的位置。然後,您可以使用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()));
線的刪除標記。已經存在於谷歌的API
地理位置API是顯而易見的答案。但是,即使API可用,瀏覽器端也可能需要一段時間才能獲得定位。同時,您必須向用戶顯示一些臨時位置,然後在位置固定後移動地圖。這聽起來像是一個GUI挑戰,讓它感覺不錯。 如果大概位置可以接受,我喜歡Daniel Vassallo的解決方案。在加載地圖後移動地圖讓我感到疑惑。 – 2010-05-18 21:04:03