HTML5的地理位置定位感觉是很cool的能力,我们公司原先的定位是在android上完成的,现在我来尝试下使用HTML5的geolocation来做些事情看看。

HTML5的地理定位的采集方式:1. IP地址,2. GPS定位,3. MAC地址,4. GSM基站网络,5. 用户定义的地址位

老规矩,先简单的尝试下geolocationAPI应用

先HTML的代码,那是相当简单

  1. [html] view plaincopy
  2. <body>
  3. <input type="button" value="get Geo" />
  4. </body>
  5. javaScript的代码如下
  6. [javascript] view plaincopy
  7. $(
  8. function() {
  9. $(":button").click(
  10. function() {
  11. navigator.geolocation.getCurrentPosition(
  12. function(e) { //成功回调
  13. $.log(e.coords.accuracy); //准确度
  14. $.log(e.coords.latitude); //纬度
  15. $.log(e.coords.longitude); //经度
  16. $.log(e.coords.altitude); //海拔高度
  17. $.log(e.coords.altitudeAccuracy); //海拔高度的精确度
  18. $.log(e.coords.heading); //行进方向
  19. $.log(e.coords.speed); //地面的速度
  20. $.log(new Date(e.timestamp).toLocaleDateString());//采集日期
  21. $.log(new Date(e.timestamp).toLocaleTimeString());//采集时间
  22. },
  23. function(e) { //失败回调
  24. $.log(e.message); //错误信息
  25. $.log(e.code); //错误代码
  26. },
  27. {//可选参数 JSON格式
  28. "enableHighAcuracy": false, //是否启用高精确度模
  29. "timeout": 100, //在指定的时间内获取位置信息
  30. "maximumAge": 0//浏览器重新获取位置信息的时间间隔
  31. }
  32. );
  33. }
  34. );
  35. }
  36. );

现在你点击按钮,就可以在控制台看到经纬度和采样日期时间了。
那获得了经纬度的值,必然首先要做的就是地图定位了,现在主流的地图服务我知道的有:baidu,google,和bing,下面我来测试我们得到的经纬度在这三个地图服务中取得的地图图像吧。

baidu和bing我都查了官方的sample,但是,但是,我要狠狠的批评google,我用chrome浏览器访问googleMapApi中的sample,竟然chrome告诉我“由于 google-developers.appspot.com 响应时间过长,导致“Google Chrome 浏览器”无法加载网页。该网站可能已崩溃,或者您的互联网连接出现了问题。”google,你看着办吧。

先看看我们的body

  1. [javascript] view plaincopy
  2. <body>
  3. <div>
  4. <input type="button" value="get Geo" />
  5. </div>
  6. <div id="baiduMap" style="width: 300px; height: 300px; float: left;">
  7. </div>
  8. <div id="googleMap" style="width: 300px; height: 300px; float: left;">
  9. </div>
  10. <div id="bingMap" style="width: 300px; height: 300px; float: left; position: relative;">
  11. </div>
  12. </body>

然后引入三家的服务脚本

  1. [javascript] view plaincopy
  2. <script type="text/javascript" src="http://api.map.baidu.com/api?v=1.3"></script>
  3. <script src="http://maps.google.com/maps/api/js?sensor=false"></script>
  4. <script charset="UTF-8" type="text/javascript" src="http://dev.ditu.live.com/mapcontrol/mapcontrol.ashx?v=6.2&mkt=en-us"></script>

以下是测试代码

  1. [javascript] view plaincopy
  2. $.log = function(msg) {
  3. console.log(msg);
  4. }
  5. $(
  6. function() {
  7. $(":button").click(
  8. function() {
  9. navigator.geolocation.getCurrentPosition(
  10. function(e) { //成功回调
  11. $.log(e.coords.accuracy); //准确度
  12. $.log(e.coords.latitude); //纬度
  13. $.log(e.coords.longitude); //经度
  14. $.log(e.coords.altitude); //海拔高度
  15. $.log(e.coords.altitudeAccuracy); //海拔高度的精确度
  16. $.log(e.coords.heading); //行进方向
  17. $.log(e.coords.speed); //地面的速度
  18. $.log(new Date(e.timestamp).toLocaleDateString()); //采集日期
  19. $.log(new Date(e.timestamp).toLocaleTimeString()); //采集时间
  20. createBaiduMap(e.coords.longitude, e.coords.latitude);
  21. createBingMap(e.coords.longitude, e.coords.latitude);
  22. createGoogleMap(e.coords.longitude, e.coords.latitude);
  23. },
  24. function(e) { //失败回调
  25. $.log(e.message); //错误信息
  26. $.log(e.code); //错误代码
  27. },
  28. {//可选参数 JSON格式
  29. enableHighAcuracy: false, //是否启用高精确度模
  30. timeout: 100, //在指定的时间内获取位置信息
  31. maximumAge: 0//浏览器重新获取位置信息的时间间隔
  32. }
  33. );
  34. }
  35. );
  36. }
  37. );
  38. function createBaiduMap(longitude, latitude) {
  39. var map = new BMap.Map("baiduMap");
  40. var point = new BMap.Point(longitude, latitude);
  41. map.centerAndZoom(point, 15);
  42. }
  43. function createGoogleMap(longitude, latitude) {
  44. var map = new google.maps.Map(document.getElementById("googleMap"),
  45. {
  46. center: new google.maps.LatLng(latitude, longitude),
  47. zoom: 14,
  48. mapTypeId: google.maps.MapTypeId.ROADMAP,
  49. mapTypeControl: false,
  50. navigationControlOptions: { style: google.maps.NavigationControlStyle.SMALL }
  51. }
  52. );
  53. }
  54. function createBingMap(longitude, latitude) {
  55. var map = new VEMap("bingMap");
  56. var LA = new VELatLong(latitude, longitude);
  57. map.LoadMap(LA, 14, VEMapStyle.Road, false, VEMapMode.Mode2D, true, 1);
  58. }

基本代码完成后,我们看到googleMap(以后简称gm)和bingMap(以后简称mm)默认有缩放都控制器,baiduMpa(以后简称bm)没有带,现在为bm加上控制器

  1. [javascript] view plaincopy
  2. function createBaiduMap(longitude, latitude) {
  3. var map = new BMap.Map("baiduMap");
  4. var point = new BMap.Point(longitude, latitude);
  5. map.centerAndZoom(point, 15);
  6. map.addControl(new BMap.NavigationControl());
  7. }

为bm添加了一个NavigationControl就可以看到效果了。
现在我们想在地图上做一个标注,把我们给点的经纬度标注出来,同时我们也看看地图服务商和HTML5的定位是不是比较准,三个地图服务商的加标注代码如下

  1. [javascript] view plaincopy
  2. function createBaiduMap(longitude, latitude) {
  3. var map = new BMap.Map("baiduMap");
  4. var point = new BMap.Point(longitude, latitude);
  5. map.centerAndZoom(point, 15);
  6. map.addControl(new BMap.NavigationControl());
  7. var marker = new BMap.Marker(point); //标注
  8. marker.setLabel(new BMap.Label("我在这里"));
  9. map.addOverlay(marker);
  10. }
  11. function createGoogleMap(longitude, latitude) {
  12. var map = new google.maps.Map(document.getElementById("googleMap"),
  13. {
  14. center: new google.maps.LatLng(latitude, longitude),
  15. zoom: 14,
  16. mapTypeId: google.maps.MapTypeId.ROADMAP,
  17. mapTypeControl: false,
  18. navigationControlOptions: { style: google.maps.NavigationControlStyle.SMALL }
  19. }
  20. );
  21. var marker = new google.maps.Marker({ position: new google.maps.LatLng(latitude, longitude),
  22. map: map,
  23. title: "我在这里" });
  24. }
  25. function createBingMap(longitude, latitude) {
  26. var map = new VEMap("bingMap");
  27. var LA = new VELatLong(latitude, longitude);
  28. map.LoadMap(LA, 14, VEMapStyle.Road, false, VEMapMode.Mode2D, true, 1); //图钉
  29. var myPolygon = new VEShape(VEShapeType.Pushpin, new VELatLong(latitude, longitude, 0, VEAltitudeMode.Default));
  30. map.AddShape(myPolygon);
  31. myPolygon.SetTitle("我在这里");
  32. }

如果我在移动设备上进行采集数据的话,geo提供了一个异步的API:watchPosition,这个api是异步的,文档上说:当检测到设备的位置发生改变时,它返回设备的当前位置。当设备检索到一个新的位置,会触发geolocationSuccess回调函数并传递一个Position对象作为参数。如果发生错误,会触发geolocationError回调函数并传递一个PositionError对象。不过具体我还没有测试
代码和getCurrentPosition很像的

  1. [javascript] view plaincopy
  2. $(
  3. function() {
  4. $(":button").click(
  5. function() {
  6. navigator.geolocation.watchPosition(
  7. function(e) { //成功回调
  8. $.log(e.coords.accuracy); //准确度
  9. $.log(e.coords.latitude); //纬度
  10. $.log(e.coords.longitude); //经度
  11. $.log(e.coords.altitude); //海拔高度
  12. $.log(e.coords.altitudeAccuracy); //海拔高度的精确度
  13. $.log(e.coords.heading); //行进方向
  14. $.log(e.coords.speed); //地面的速度
  15. $.log(new Date(e.timestamp).toLocaleDateString()); //采集日期
  16. $.log(new Date(e.timestamp).toLocaleTimeString()); //采集时间
  17. createBaiduMap(e.coords.longitude, e.coords.latitude);
  18. createBingMap(e.coords.longitude, e.coords.latitude);
  19. createGoogleMap(e.coords.longitude, e.coords.latitude);
  20. },
  21. function(e) { //失败回调
  22. $.log(e.message); //错误信息
  23. $.log(e.code); //错误代码
  24. },
  25. {//可选参数 JSON格式
  26. enableHighAcuracy: false, //是否启用高精确度模
  27. timeout: 10, //在指定的时间内获取位置信息
  28. maximumAge: 10, //浏览器重新获取位置信息的时间间隔
  29. frequency: 1000//每隔3秒钟检索一次位置信息
  30. }
  31. );
  32. }
  33. );
  34. }
  35. );

要停止这个轮询,只要用navigator.geolocation.clearWatch就可以了。

转载于:https://blog.51cto.com/shyleoking/863993

HTML5 geolocation和BaiduMap、BingMap、GoogleMap相关推荐

  1. HTML5 Geolocation

    最近做点自己的单机小游戏,所以忽略了电子书这块,偶尔看到博友抱怨说电子书下载地址广告较多,其实自己搞到这些电子书不容易,国外网站FQ爬到的,而且需要会员制的等级下载(所以有的时候会花些钱),然后自己整 ...

  2. HTML5 地理位置定位(HTML5 Geolocation)原理及应用 (调用GPS)

    地理位置(Geolocation)是 HTML5 的重要特性之一,提供了确定用户位置的功能,借助这个特性能够开发基于位置信息的应用.今天这篇文章向大家介绍一下 HTML5 地理位置定位的基本原理及各个 ...

  3. HTML5 Geolocation用来定位用户的位置。

    HTML5 Geolocation用来定位用户的位置. 定位用户的位置 HTMl5 Geolocation API用来得到用户的地理位置. 由于这个可能和个人隐私相关.除非用户同意否则不能使用. 浏览 ...

  4. 用html设计一个时间距离查询,使用HTML5 Geolocation实现一个距离追踪器

    HTML5 Geolocation(地理定位)用于定位用户的位置.那么如何实现一个距离追踪器呢?我的思路是这样的,前提是浏览器支持h5地理定位,在这个基础上,获取用户位置,更新用户位置,计算距离,显示 ...

  5. html5 geolocation 百度地图,html5 geolocation配合百度地图api实现定位

    1.了解html5 geolocation HTML5 Geolocation(地理定位)用于定位用户的位置. 鉴于该特性可能侵犯用户的隐私,除非用户同意,否则用户位置信息是不可用的.=> 使用 ...

  6. HTML5 Geolocation(地理定位)简介

    HTML5 Geolocation(地理定位)用于定位用户的位置. 定位用户的位置 HTML5 Geolocation API 用于获得用户的地理位置. 鉴于该特性可能侵犯用户的隐私,除非用户同意,否 ...

  7. HTML5 Geolocation API

    HTML5 Geolocation API 封装在 navigator.geolocation 属性里,各种接口即是 navigator.geolocation 对象的方法. 1.getCurrent ...

  8. html5获取城市,HTML5 geolocation API获得用户当前城市名

    HTML5 Demo: geolocation var geocoder = null; function addAddressToMap(response) { if (!response || r ...

  9. HTML5 地理位置定位(HTML5 Geolocation)

    HTML5的强大,无需我过多的介绍,其中Geolocation地理定位是HTML5的重要特性之一.使用这个特性我们就可以开发出基于地理位置信息的应用.例如你要实现查询用户周边酒店.加油站等功能时,你可 ...

最新文章

  1. C 语言编程 — 运算符
  2. error: Upgrade DB using Essex release first.
  3. 刚刚在用的React Native的照相机和图片 react-native-image-picker
  4. java基础的知识点(一)
  5. APP中的第三方“支付”功能该如何测试
  6. docs和src_《编写Docs波特兰2017》中的提示和顶级演示
  7. VCL组件之主要方法(Methods)和通用事件(Events)
  8. MongoDB.so: undefined symbol: HeUTF8解决方法
  9. 华为手机浏览器不支持PUT提交方式的解决方案
  10. python怎么画简单图-python绘制简单彩虹图
  11. 计算机boot进入u盘启动,用U盘重装系统怎么把Boot设置为启动项?
  12. wso2 mysql_WSO2 DAS使用mysql集群APIM
  13. php接入阿里云OOS
  14. 网页实现从数据库读取数据并简单分页
  15. 2019年计算机二级获证条件,2019年下半年全国计算机等级考试报考简章
  16. 编辑距离(Edit Distance) 一文读懂(Python实现)
  17. 如何买到便宜的云服务器?
  18. 程序员怎么做项目管理?
  19. 云计算、大数据和人工智能
  20. 解决连通性问题的利器:并查集

热门文章

  1. 大数据flume日志采集系统详解
  2. 针对 AlloyFinger 中 currentTarget为空的解决方案
  3. 深入理解openstack网络架构(2)----Basic Use Cases
  4. iOS 高效开发-----实现description 方法 (续)
  5. 图片在容器里垂直居中
  6. 在巴塞罗那,华为挥别昨日 | MWC 2019
  7. Hadoop streaming 排序、分桶参数设置
  8. keepalive 配合mysql主主复制
  9. python之常见问题集锦
  10. 字符串与整数之间进行转换