HTML 5中地理位置api小结
HTML5提供了地理位置等一系列API可以给用户使用,方便用户制作LBS的地理应用,首先在支持HTML5的浏览器中,当开启API时,会询问是否用户同意使用api,否则不会开启的,保证安全。
1)开启,判断是否浏览器支持LBSapi
function isGeolocationAPIAvailable() { var location = "No, Geolocation is not supported by this browser."; if (window.navigator.geolocation) { location = "Yes, Geolocation is supported by this browser."; } alert(location); }
上面的例子中,还在displayError方法中,捕捉了异常;
2获得用户的地理位置:
这个使用getCurrentPosition就可以了;
function requestPosition() { if (nav == null) { nav = window.navigator; } if (nav != null) { var geoloc = nav.geolocation; if (geoloc != null) { geoloc.getCurrentPosition(successCallback); } else { alert("Geolocation API is not supported in your browser"); } } else { alert("Navigator is not found"); } }
当获得地理位置成功后,会产生一个回调方法了,处理返回的结果,
function setLocation(val, e) { document.getElementById(e).value = val; } function successCallback(position) { setLocation(position.coords.latitude, "latitude"); setLocation(position.coords.longitude, "longitude"); }
3)
一个很常见的问题,是如何跟踪用户不断变化的地理位置,这里小结下其中用到的两个api。
1watchPosition
例子如下:
function listenForPositionUpdates() { if (nav == null) { nav = window.navigator; } if (nav != null) { var geoloc = nav.geolocation; if (geoloc != null) { watchID = geoloc.watchPosition(successCallback); } else { alert("Geolocation API is not supported in your browser"); } } else { alert("Navigator is not found"); } }
然后在successCallback中,就可以设置显示最新的地理位置:
function successCallback(position){ setText(position.coords.latitude, "latitude"); setText(position.coords.longitude, "longitude"); }
如果不希望实时跟踪,则可以取消之:
functionclearWatch(watchID){
window.navigator.geolocation.clearWatch(watchID);
}
4)如何处理异常:
当遇到异常时,可以捕捉之:
if (geoloc != null) { geoloc.getCurrentPosition(successCallback, errorCallback); } function errorCallback(error) { var message = ""; switch (error.code) { case error.PERMISSION_DENIED: message = "This website does not have permission to use " + "the Geolocation API"; break; case error.POSITION_UNAVAILABLE: message = "The current position could not be determined."; break; case error.PERMISSION_DENIED_TIMEOUT: message = "The current position could not be determined " + "within the specified timeout period."; break; } if (message == "") { var strErrorCode = error.code.toString(); message = "The position could not be determined due to " + "an unknown error (Code: " + strErrorCode + ")."; } alert(message); }
5)在google地图上显示位置(前提是有googlemapapi等设置好)
function getCurrentLocation() { if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(showMyPosition,showError); } else { alert("No, Geolocation API is not supported by this browser."); } } function showMyPosition(position) { var coordinates=position.coords.latitude+","+position.coords.longitude; var map_url="http://maps.googleapis.com/maps/api/staticmap?center=" +coordinates+"&zoom=14&size=300x300&sensor=false"; document.getElementById("googlemap").innerHTML="<img src='"+map_url+"' />"; } function showError(error) { switch(error.code) { case error.PERMISSION_DENIED: alert("This website does not have permission to use the Geolocation API") break; case error.POSITION_UNAVAILABLE: alert("The current position could not be determined.") break; case error.TIMEOUT: alert("The current position could not be determined within the specified time out period.") break; case error.UNKNOWN_ERROR: alert("The position could not be determined due to an unknown error.") break; } }
相关推荐
染血白衣 2020-11-16
SAMXIE 2020-11-04
一个智障 2020-11-15
学习web前端 2020-11-09
yiranpiaoluo 2020-11-04
lxhuang 2020-11-03
88274956 2020-11-03
82387067 2020-11-03
huangliuyu00 2020-10-29
sichenglain 2020-10-27
Dayer 2020-10-27
小马的学习笔记 2020-10-23
liuweiITlove 2020-10-14
kjyiyi 2020-10-10
fanjunjaden 2020-10-09
zhyue 2020-09-28
huangliuyu00 2020-09-24
88397813 2020-09-23
jyj0 2020-09-21