html5--位置感知(基于js的地理定位geolocation API)结合Google Maps
2016-04-09 22:07
627 查看
1.检测浏览器是否支持地理位置API
//检测浏览器是否支持地理位置API(navigator.geolocation) if (navigator.geolocation) { }else{ alert("Your browser does not support Geolocation!"); }
2.地理位置API支持的方法getCurrentPosition
getCurrentPosition(successHandler,errorHandler,options)参数:
1.successHandler是函数,成功确定位置则调用这个函数
2.errorHandler是函数,若不能成功确定位置则调用此函数,可选
3.options参数允许定制地理定位方法,可选
if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(successHandler,errorHandler,options) }else{ alert("Your browser does not support Geolocation!"); } //地理位置API传入成功处理程序的对象POSITION function successHandler(position) { var latitude = position.coords.latitude; var longitude = position.coords.longitude; } //地理位置API会向它传入一个错误 function errorHandler(error){ switch(error.code) { case error.TIMEOUT: showError("A timeout occured! Please try again!"); break; case error.POSITION_UNAVAILABLE: showError('We can\'t detect your location. Sorry!'); break; case error.PERMISSION_DENIED: showError('Please allow geolocation access for this to work.'); break; case error.UNKNOWN_ERROR: showError('An unknown error occured!'); break; } } //timeout在这个时间内没找到位置,就会调用错误处理程序 var options = { enableHighAccuracy:false, timeout:Infinity, maximumAge:0 };
3.地理位置API支持的方法watchPosition和clearWatch
watchPosition和getCurrentPosition很相似,但是watchPosition是一直在检测位置,等位置变化时,则会调用函数报告新位置,调用clearWatch时清除检测。<!doctype html> <html> <head> ..... </head> <body> <form> <input type="button" id="watch" value="Watch me"> <input type="button" id="clearWatch" value="Clear watch "> </form> </body> </html>
function getLocation(){ if(nagivator.geolocation) { var watchButton = document.getElementById("watch"); watchButton.onclick = watchLocation; var clearWatchButton = document.getElementById("clearWatch"); clearWatchButton.onclick = clearWatch; } else{ alert("no geolocation support"); } } //watchid设置成全局变量 var watchId = null; function watchLocation(){ watchId = navigator.geolocation.watchPosition(successHandler,errorHandler); } function clearWatch(){ if(watchid) { navigator.geolocation.clearWatch(watchId); watchId = null; } }
4.结合Google Maps可视化表示
地理位置API只可以跟踪位置,但是不可以可视化显示。结合Google Maps进行可视化表示。
js得到Google Maps的所用功能
<script //sensor=false表示不需要自己的位置,sensor=true表示使用自己的位置 src=https://maps.google.com/maps/api/js?sensor=true> </script>
if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(successHandler) }else{ alert("Your browser does not support Geolocation!"); } //地理位置API传入成功处理程序的对象POSITION function successHandler(position) { var latitude = position.coords.latitude; var longitude = position.coords.longitude; showMap(position.coords); } function showMap(coords){ //Google API希望经纬度包装在单独的对象中,如下是取得经纬度的构造函数 var googlemap = new google.maps.LatLng(coords.latitude,coords.longitude); //根据地图选项创建对象 var mapptions = { zoom:10, center:googlemap, mapTypeId:google.maps.MapTypeId.RPADMAP }; var mapDiv = document.getElementById("map"); //利用Google API创建一个地图对象(取元素和我们的选项) map = new google.maps.Map(mapDiv,mapOptions); }
在可视化地图上添加一个大头钉
var title = "Your location"; var content = "you are here:" + coords.latitude +","+cpprds.longitude; addMarker(map,googlemap,title,content); function addMarker(map,latlong,title,content){ var markerOptions = { position:latlong, map:map, title:title, //true是在点击大头钉的时候能显示一个信息窗口 clickable:true }; var marker = new google.maps.Marker(markerOptions); var infoWindowOptions = { content:content, position:latlong }; //创建信息窗口 var infoWindow = new google.maps.InfoWindow(infoWindowOptions); google.maps.event.addListener(marker,"click",function(){ infoWindow.open(map); }) };
5.给一个完整的程序
var options = { enableHighAccuracy:true, timeout:100, maximumAge:0 }; window.onload = getLocation; function getLocation(){ if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(successHandler,errorHandler,options) }else{ alert("Your browser does not support Geolocation!"); } } function successHandler(position) { var latitude = position.coords.latitude; var longitude = position.coords.longitude; var div = document.getElementById("location"); //输出经纬度和获取位置花费的事件 div.innerHTML = latitude + longitude; div.innerHTML+="(found in" + options.timeout +"ms)"; showMap(position.coords); } function errorHandler(error){ switch(error.code) { case error.TIMEOUT: showError("A timeout occured! Please try again!"); break; case error.POSITION_UNAVAILABLE: showError('We can\'t detect your location. Sorry!'); break; case error.PERMISSION_DENIED: showError('Please allow geolocation access for this to work.'); break; case error.UNKNOWN_ERROR: showError('An unknown error occured!'); break; } //出现失败后,重新尝试,则把timeout选项增加100ms options.timeout+=100; navigator.geolocation.getCurrentPosition(successHandler,errorHandler,options); div.innerHTML+="checking again with timeout="+options.timeout; } function showMap(coords){ //Google API希望经纬度包装在单独的对象中,如下是取得经纬度的构造函数 var googlemap = new google.maps.LatLng(coords.latitude,coords.longitude); //根据地图选项创建对象 var mapptions = { zoom:10, center:googlemap, mapTypeId:google.maps.MapTypeId.RPADMAP }; var mapDiv = document.getElementById("map"); //利用Google API创建一个地图对象(取元素和我们的选项) map = new google.maps.Map(mapDiv,mapOptions); }
相关文章推荐
- js取float型小数点后两位数的方法
- a标签根据js返回值判断页面是否跳转
- javaScript中的自定义类型和继承
- [Web API] Client 指定請求及回應格式(xml/json)
- 深入理解JavaScript系列(23):JavaScript与DOM(上)——也适用于新手
- JSP九大内置对象详解(二)
- 【js】:一个含有输入格的js程序
- IEjs 调试、火狐 js 调试
- jsp中radio的性别信息的数据回显
- js获取url中传递的参数
- CommonJs,AMD,CMD是什么?
- 一些常见跨浏览器方法的封装(basic.js)
- JSP九大内置对象详解(一)
- 使用clipboard.js复制页面内容到剪切板
- 图说js中的this——深入理解javascript中this指针
- JavaScript数组删除项的方法
- JavaScript数组增加新的项
- js跨域请求小结
- JavaScript编写人机对战五子棋(终)
- js程序练习