zoukankan      html  css  js  c++  java
  • Html5 Geolocation获取地理位置信息

    原文链接:http://www.cnblogs.com/lwbqqyumidi/archive/2012/11/10/2764352.html

    Html5中提供了地理位置信息的API,通过浏览器来获取用户当前位置。基于此特性可以开发基于位置的服务应用。在获取地理位置信息前,首先浏览器都会向用户询问是否愿意共享其位置信息,待用户同意后才能使用。

    Html5获取地理位置信息是通过Geolocation API提供,使用其getCurrentPosition方法,此方法中有三个参数,分别是成功获取到地理位置信息时所执行的回调函数,失败时所执行的回调函数和可选属性配置项。

    如下Demo演示了通过Geolocation获取地理位置信息,并在百度地图上显示当前位置(通过调用百度地图API)。实验结果发现位置被定位到了大学城内环东四路入口处,与本人所在位置(华工学生宿舍)偏差还是有点大的,达到200-300米左右。

    代码如下所示(其中convertor.js为百度地图提供的坐标转化文件):

    复制代码
     1 <!DOCTYPE html>
     2 <html>
     3     <head>
     4         <title>H5地理位置Demo</title>
     5         <script src="http://api.map.baidu.com/api?v=1.3" type="text/javascript">
     6         </script>
     7         <script type="text/javascript" src="convertor.js">
     8         </script>
     9     </head>
    10     <body>
    11         <div id="map" style="600px; height:400px">
    12         </div>
    13     </body>
    14     <script type="text/javascript">
    15         if (window.navigator.geolocation) {
    16             var options = {
    17                 enableHighAccuracy: true,
    18             };
    19             window.navigator.geolocation.getCurrentPosition(handleSuccess, handleError, options);
    20         } else {
    21             alert("浏览器不支持html5来获取地理位置信息");
    22         }
    23         
    24         function handleSuccess(position){
    25             // 获取到当前位置经纬度  本例中是chrome浏览器取到的是google地图中的经纬度
    26             var lng = position.coords.longitude;
    27             var lat = position.coords.latitude;
    28             // 调用百度地图api显示
    29             var map = new BMap.Map("map");
    30             var ggPoint = new BMap.Point(lng, lat);
    31             // 将google地图中的经纬度转化为百度地图的经纬度
    32             BMap.Convertor.translate(ggPoint, 2, function(point){
    33                 var marker = new BMap.Marker(point);
    34                 map.addOverlay(marker);
    35                 map.centerAndZoom(point, 15);
    36             });
    37         }
    38         
    39         function handleError(error){
    40         
    41         }
    42     </script>
    43 </html>
    复制代码

    convertor.js文件:

    复制代码
     1 (function() { // 闭包
     2     function load_script(xyUrl, callback) {
     3         var head = document.getElementsByTagName('head')[0];
     4         var script = document.createElement('script');
     5         script.type = 'text/javascript';
     6         script.src = xyUrl;
     7         // 借鉴了jQuery的script跨域方法
     8         script.onload = script.onreadystatechange = function() {
     9             if ((!this.readyState || this.readyState === "loaded" || this.readyState === "complete")) {
    10                 callback && callback();
    11                 // Handle memory leak in IE
    12                 script.onload = script.onreadystatechange = null;
    13                 if (head && script.parentNode) {
    14                     head.removeChild(script);
    15                 }
    16             }
    17         };
    18         // Use insertBefore instead of appendChild to circumvent an IE6 bug.
    19         head.insertBefore(script, head.firstChild);
    20     }
    21     function translate(point, type, callback) {
    22         var callbackName = 'cbk_' + Math.round(Math.random() * 10000); // 随机函数名
    23         var xyUrl = "http://api.map.baidu.com/ag/coord/convert?from=" + type
    24                 + "&to=4&x=" + point.lng + "&y=" + point.lat
    25                 + "&callback=BMap.Convertor." + callbackName;
    26         // 动态创建script标签
    27         load_script(xyUrl);
    28         BMap.Convertor[callbackName] = function(xyResult) {
    29             delete BMap.Convertor[callbackName]; // 调用完需要删除改函数
    30             var point = new BMap.Point(xyResult.x, xyResult.y);
    31             callback && callback(point);
    32         }
    33     }
    34 
    35     window.BMap = window.BMap || {};
    36     BMap.Convertor = {};
    37     BMap.Convertor.translate = translate;
    38 })();
    复制代码
    请把你的疑问评论在下方。
  • 相关阅读:
    HTML5 重力感应效果,实现摇一摇效果
    WEB 移动端 CSS3动画性能 优化
    jquery 插件封装模板
    textarea 提交到数据库的内容,输出到 html 中显示正常的格式
    js根据银行卡号判断属于哪个银行,并返回银行缩写及银行卡类型
    微信小程序如何引用iconfont图标
    nodejs: express basic
    javascript设计模式:适配器模式
    javascript设计模式:装饰者模式
    javascript设计模式:代理模式
  • 原文地址:https://www.cnblogs.com/zzcit/p/5643478.html
Copyright © 2011-2022 走看看