js获取用户精准经纬度的实现原理及源码

2、watchPosition和clearWatch

watchPosition的参数和getCurrentPosition一致,区别是watchPosition会在开始及每次用户位置发生变化的时候更新地理位置触发成功回调,这在导航类应用场景非常实用。我们可以调用clearWatch清除位置监视,如下示例:

  1. function scrollMap(position) {
  2.     // 实时获取位置变化
  3.     alert('经度:' + data.coords.longitude + ' 纬度:' + data.coords.latitude);
  4. }
  5. var watchId = navigator.geolocation.watchPosition(scrollMap);
  6. function buttonClickHandler() {
  7.   // 主动关闭位置更新
  8.   navigator.geolocation.clearWatch(watchId);
  9. }

这就是浏览器提供的地理位置API,使用它们我们的web页面就可以提供LBS服务及其他地理位置服务,变得更为强大。要注意的是获取地理位置可能会耗费一定时间,此时前台给用户一个等待反馈会提升用户体验,而实际应用场景中如何提升获取地理位置的精确度和效率,我们在后面的章节细讲。

3、兼容性

地理位置API被以下桌面浏览器支持:

* IE 9+

* Firefox 3.5+

* Chrome 5+

* safari 5+

* Opera 16+

以及以下移动设备浏览器支持:

* iOS Safari 3.2+

* Android Browser 2.1+

* Chrome for Android

* Firefox for Android 38+

* Opera mobile 12+

4、示例源码:

首先我们创建一个dom节点<div id="geoloc"></div>判断浏览器支持Geolocation API后,通过参数的corrds属性就可以取到经纬度坐标了,如下

  1. <script>
  2.     function getElem(id) {
  3.         return typeof id === 'string' ? document.getElementById(id) : id;
  4.     }
  5.     function show_it(lat, lon) {
  6.         var str = '您当前的位置,纬度:' + lat + ',经度:' + lon;
  7.         getElem('geoloc').innerHTML = str;
  8.     }
  9.     if (navigator.geolocation) {
  10.         navigator.geolocation.getCurrentPosition(function(position) {
  11.             show_it(position.coords.latitude, position.coords.longitude);
  12.         }, function(err) {
  13.             getElem('geo_loc').innerHTML = err.code + "\n" + err.message;
  14.         });
  15.     } else {
  16.         getElem('geo_loc').innerHTML = "您当前使用的浏览器不支持Geolocation服务";
  17.     }
  18.     </script>

下一步我们要引入一个谷歌地图来定位,这里需要引入谷歌地图的API,如下

  1. <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>

接着对获取经纬度的函数做一个改造

  1. <script>
  2.     function success(position) {
  3.         var mapcanvas = document.createElement('div');
  4.         mapcanvas.id = 'mapcanvas';
  5.         mapcanvas.style.height = '400px';
  6.         mapcanvas.style.width = '560px';
  7.         getElem("map_canvas").appendChild(mapcanvas);
  8.         var latlng = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
  9.         var myOptions = {
  10.             zoom: 15,
  11.             center: latlng,
  12.             mapTypeControl: false,
  13.             navigationControlOptions: {style: google.maps.NavigationControlStyle.SMALL},
  14.             mapTypeId: google.maps.MapTypeId.ROADMAP
  15.         };
  16.         var map = new google.maps.Map(document.getElementById("mapcanvas"), myOptions);
  17.         var marker = new google.maps.Marker({
  18.           position: latlng,
  19.           map: map,
  20.           title:"你在这里!"
  21.         });
  22.     }
  23.     if (navigator.geolocation) {
  24.        navigator.geolocation.getCurrentPosition(success);
  25.     }
  26.     </script>

到这里,我们已经获取到当前位置的地图坐标呈现,大家可以在实际开发中结合地理位置推荐新闻、天气等等,具体业务不再详细介绍。

在完成本篇笔记过程中,感谢腾讯Alloy Team提供相关技术支持。

你想把广告放到这里吗?

发表评论

您必须 登录 才能发表留言!