目前,在浏览器中可通过以下几种方式检测用户的位置。
这些方法都不属于 Google Maps API,而是公用的行业标准。
一些较新版本的浏览器正开始支持 W3C Geolocation 标准。
此标准是 HTML5 的一部分,以后很可能会成为真正的标准。
所有希望执行地理定位的应用程序都应当支持此标准。
某些带 Google Gears 的浏览器可以使用 Google Gears Geolocation API。
由于即将实现对 W3C 标准的广泛支持,因此,检查 Gears 不失为一项好的后备方案。
某些浏览器使用 IP 地址来检测用户的位置,不过这种方式只能提供很粗略的估计。
由于用户的 IP 地址只能提供对用户位置的粗略估计,因此我们不建议使用这种地理定位方法。
W3C 是最简单且支持最广泛的方法,应优先采用此方法,然后再考虑其他方法。
如果您决定使用 Google Gears,那么首先应检查浏览器是否支持 W3C 标准。(请注意,如果您要使用 Google Gears,则需要载入 Gears 初始化 JavaScript。)
下例首先尝试通过 W3C navigator.geolocation 属性确定用户位置,然后尝试 Google Gears 方法,如果两种方法都无效则放弃。[code]// Note that using Google Gears requires loading the Javascript
// at http://code.google.com/apis/gears/gears_init.js
var initialLocation;
var siberia = new google.maps.LatLng(60, 105);
var newyork = new google.maps.LatLng(40.69847032728747, -73.9514422416687);
var browserSupportFlag = new Boolean();
function initialize() {
var myOptions = {
zoom: 6,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById(“map_canvas”), myOptions);
// Try W3C Geolocation (Preferred)
if(navigator.geolocation) {
browserSupportFlag = true;
navigator.geolocation.getCurrentPosition(function(position) {
initialLocation = new google.maps.LatLng(position.coords.latitude,position.coords.longitude);
map.setCenter(initialLocation);
}, function() {
handleNoGeolocation(browserSupportFlag);
});
// Try Google Gears Geolocation
} else if (google.gears) {
browserSupportFlag = true;
var geo = google.gears.factory.create(‘beta.geolocation’);
geo.getCurrentPosition(function(position) {
initialLocation = new google.maps.LatLng(position.latitude,position.longitude);
map.setCenter(initialLocation);
}, function() {
handleNoGeoLocation(browserSupportFlag);
});
// Browser doesn’t support Geolocation
} else {
browserSupportFlag = false;
handleNoGeolocation(browserSupportFlag);
}
function handleNoGeolocation(errorFlag) {
if (errorFlag == true) {
alert(“Geolocation service failed.”);
initialLocation = newyork;
} else {
alert(“Your browser doesn’t support geolocation. We’ve placed you in Siberia.”);
initialLocation = siberia;
}
map.setCenter(initialLocation);
}
}[/code]