Html5 Geolocation获取地理位置信息实例


Posted in HTML / CSS onDecember 09, 2016

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

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

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

Html5 Geolocation获取地理位置信息实例

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

<!DOCTYPE html>
<html>
    <head>
        <title>H5地理位置Demo</title>
        <script src="http://api.map.baidu.com/api?v=1.3" type="text/javascript">
        </script>
        <script type="text/javascript" src="convertor.js">
        </script>
    </head>
    <body>
        <div id="map" style="width:600px; height:400px">
        </div>
    </body>
    <script type="text/javascript">
        if (window.navigator.geolocation) {
            var options = {
                enableHighAccuracy: true,
            };
            window.navigator.geolocation.getCurrentPosition(handleSuccess, handleError, options);
        } else {
            alert("浏览器不支持html5来获取地理位置信息");
        }
        
        function handleSuccess(position){
            // 获取到当前位置经纬度  本例中是chrome浏览器取到的是google地图中的经纬度
            var lng = position.coords.longitude;
            var lat = position.coords.latitude;
            // 调用百度地图api显示
            var map = new BMap.Map("map");
            var ggPoint = new BMap.Point(lng, lat);
            // 将google地图中的经纬度转化为百度地图的经纬度
            BMap.Convertor.translate(ggPoint, 2, function(point){
                var marker = new BMap.Marker(point);
                map.addOverlay(marker);
                map.centerAndZoom(point, 15);
            });
        }
        
        function handleError(error){
        
        }
    </script>
</html>

convertor.js文件:

(function() { // 闭包
    function load_script(xyUrl, callback) {
        var head = document.getElementsByTagName('head')[0];
        var script = document.createElement('script');
        script.type = 'text/javascript';
        script.src = xyUrl;
        // 借鉴了jQuery的script跨域方法
        script.onload = script.onreadystatechange = function() {
            if ((!this.readyState || this.readyState === "loaded" || this.readyState === "complete")) {
                callback && callback();
                // Handle memory leak in IE
                script.onload = script.onreadystatechange = null;
                if (head && script.parentNode) {
                    head.removeChild(script);
                }
            }
        };
        // Use insertBefore instead of appendChild to circumvent an IE6 bug.
        head.insertBefore(script, head.firstChild);
    }
    function translate(point, type, callback) {
        var callbackName = 'cbk_' + Math.round(Math.random() * 10000); // 随机函数名
        var xyUrl = "http://api.map.baidu.com/ag/coord/convert?from=" + type
                + "&to=4&x=" + point.lng + "&y=" + point.lat
                + "&callback=BMap.Convertor." + callbackName;
        // 动态创建script标签
        load_script(xyUrl);
        BMap.Convertor[callbackName] = function(xyResult) {
            delete BMap.Convertor[callbackName]; // 调用完需要删除改函数
            var point = new BMap.Point(xyResult.x, xyResult.y);
            callback && callback(point);
        }
    }

    window.BMap = window.BMap || {};
    BMap.Convertor = {};
    BMap.Convertor.translate = translate;
})();

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

HTML / CSS 相关文章推荐
详解纯CSS3制作的20种loading动效
Jul 05 HTML / CSS
css3 background属性调整增强介绍
Dec 18 HTML / CSS
任意一块网页内容实现“活”的背景(目前火狐浏览器专有)
May 07 HTML / CSS
使用CSS3来实现滚动视差效果的教程
Aug 24 HTML / CSS
浅谈css3中的前缀
Jul 20 HTML / CSS
HTML5网页录音和上传到服务器支持PC、Android,支持IOS微信功能
Apr 26 HTML / CSS
用HTML5实现手机摇一摇的功能的教程
Oct 30 HTML / CSS
html5 Canvas画图教程(5)—canvas里画曲线之arc方法
Jan 09 HTML / CSS
使用html5 canvas创建太空游戏的示例
May 08 HTML / CSS
html5的自定义data-*属性与jquery的data()方法的使用
Jul 02 HTML / CSS
canvas之自定义头像功能实现代码示例
Sep 29 HTML / CSS
详解android与HTML混合开发总结
Jun 06 HTML / CSS
详解移动端html5页面长按实现高亮全选文本内容的兼容解决方案
Dec 03 #HTML / CSS
HTML5标签大全
Nov 23 #HTML / CSS
HTML5拖放效果的实现代码
Nov 17 #HTML / CSS
html5 div布局与table布局详解
Nov 16 #HTML / CSS
纯HTML5+CSS3制作生日蛋糕(代码易懂)
Nov 16 #HTML / CSS
HTML5制作表格样式
Nov 15 #HTML / CSS
详解HTML5中的拖放事件(Drag 和 drop)
Nov 14 #HTML / CSS
You might like
PHP中$_SERVER的详细参数与说明介绍
2013/10/26 PHP
PHP中使用TCPDF生成PDF文档实例
2014/07/01 PHP
php微信浏览器分享设置以及回调详解
2016/08/01 PHP
注释PHP和html混合代码的小技巧(分享)
2016/11/03 PHP
JavaScript 基于原型的对象(创建、调用)
2009/10/16 Javascript
javascript常用方法、属性集合及NodeList 和 HTMLCollection 的浏览器差异
2010/12/25 Javascript
服务器端的JavaScript脚本 Node.js 使用入门
2012/03/07 Javascript
JS上传前预览图片实例
2013/03/25 Javascript
jquery中加载图片自适应大小主要实现代码
2013/08/23 Javascript
浅析Node.js的Stream模块中的Readable对象
2015/07/29 Javascript
js实现简单计算器
2015/11/22 Javascript
jQuery实现图片预加载效果
2015/11/27 Javascript
JavaScript学习笔记整理之引用类型
2016/01/22 Javascript
Nodejs Stream 数据流使用手册
2016/04/17 NodeJs
关于JavaScript 原型链的一点个人理解
2016/07/31 Javascript
JavaScript编码风格指南(中文版)
2016/08/26 Javascript
JavaScript制作简易计算器(不用eval)
2017/02/05 Javascript
js实现网页的两个input标签内的数值加减(示例代码)
2017/08/15 Javascript
vue 插值 v-once,v-text, v-html详解
2018/01/19 Javascript
Vuex 使用 v-model 配合 state的方法
2018/11/13 Javascript
Nodejs让异步变成同步的方法
2019/03/02 NodeJs
layui+jquery支持IE8的表格分页方法
2019/09/28 jQuery
jQuery实现雪花飘落效果
2020/08/02 jQuery
Python使用QQ邮箱发送邮件报错smtplib.SMTPAuthenticationError
2019/12/20 Python
基于Pytorch版yolov5的滑块验证码破解思路详解
2021/02/25 Python
日本最大级玩偶手办购物:あみあみ Amiami
2018/04/23 全球购物
Arti-shopping中文官网:大型海外商品一站式直邮平台
2020/03/23 全球购物
Delphi笔试题
2016/11/14 面试题
前台接待的工作职责
2013/11/21 职场文书
体育教育个人自荐信范文
2013/12/01 职场文书
学校联谊活动方案
2014/02/15 职场文书
汽车检测与维修专业求职信
2014/07/04 职场文书
尊老爱亲美德少年事迹材料
2014/08/14 职场文书
基层党支部整改方案
2014/10/25 职场文书
JS监听Esc 键触发事键
2021/04/14 Javascript
MySQL中VARCHAR与CHAR格式数据的区别
2021/05/26 MySQL