所以我一直在开发一个web应用程序,我已经实现了HTML5地理定位功能。我使用来自Google网站的Javascript代码实现了这一点,该代码与我在我的页面上的Google地图进行交互。下面是代码:
// 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);
}
}
这段代码的作用是,它检查访问站点的浏览器是否支持新的w3c3地理定位功能,如果支持,它使用它来查找纬度和经度。如果你不支持它,它会尝试使用Google Gears来获取这些信息,最后,如果你都不支持它,它会退出。
对于像Firefox, Safari, Opera和Chrome这样的浏览器,我完全可以使用这种方式,因为大多数新版本(甚至一些旧版本)都支持这些功能,然而,IE8(9工作),不支持:(
IE8甚至没有使用Google Gears故障保护,它根本不起作用。无论如何(像上面的代码一样免费),在IE8上使用某种形式的地理定位,即使它不能准确地获得纬度和经度,所以我可以把它插入地图?
另外,我还没有测试过,但是,如果你使用移动浏览器(在主要设备上)登录这个网站,它是否也支持w3cgeolocation/Google Gears,或者它会像IE8那样崩溃?我知道我也可以在请求位置时使用sensor=true
属性,如果来自移动设备,如果他们有GPS打开,所以这是另一种方法,但我宁愿只使用地理位置,如果他们支持它。
谢谢。
在我开始全面使用它们之前,我正在等待HTML5地理定位功能更加成熟。与此同时,我使用了MaxMind提供的api和数据集,取得了巨大的成功。
编辑:
我忘了说,这有时在移动浏览器上并不好用,所以你可能仍然想使用HTML5的地理定位功能,因为我发现它在移动浏览器上更加快速和可靠。