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="width: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 Geolocation获取地理位置信息(转)的更多相关文章

  1. Html5 Geolocation获取地理位置信息

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

  2. AngularJS进阶(二十)HTML5实现获取地理位置信息并定位功能

    HTML5实现获取地理位置信息并定位功能 注:请点击此处进行充电! 前言 这篇文章主要介绍了HTML5实现获取地理位置信息并定位功能,本文讲解了原生HTML5.百度地图.谷歌地图等三种获取理位置信息并 ...

  3. html5实现获取地理位置信息并定位

    这里主要讲h5实现获取地理位置信息并定位功能,本文讲解了原生h5,百度地图,谷歌地图等三种获取地理信息并定位的方法,需要的朋友可以参考下: h5提供了地理位置功能(Geolocation API),能 ...

  4. HTML5实现获取地理位置信息并定位功能

    HTML5提供了地理位置定位功能(Geolocation API),能确定用户位置,我们可以借助HTML5的该特性开发基于地理位置信息的应用.本文结合实例给大家分享如何使用HTML5,借助百度.谷歌地 ...

  5. html5获取地理位置信息API

    html5获取地理位置信息API 在HTML5中,可以看下如何使用Geolocation API来获得用户的地理位置信息,如果该浏览器支持的话,且设备具有定位功能,就能够直接使用这组API来获取当前位 ...

  6. HTML5 获取地理位置信息

    HTML5增加的新功能,获取地理位置信息,如果浏览器支持且设备有定位功能,就能够直接使用这组API来获取当前信息位置.该Geolocation API可以应用于移动设备中的地理位置. Geolocat ...

  7. html5代码,获取地理位置

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <meta htt ...

  8. PhoneGap Geolocation 获取地理位置 api

    一. PhoneGap Geolocation 对象介绍 1.使应用程序可以访问地理位置信息.geolocation 对象提供了对设备 GPS 传感器的访问.Geolocation 提供设备的位置信息 ...

  9. 百度api:根据经纬度获取地理位置信息

    调用百度api,根据经度和纬度获取地理位置信息,返回Json. C#代码: using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Syste ...

随机推荐

  1. go语言基础之结构体比较和赋值

    1.结构体比较和赋值 (同类型的结构体可以相互赋值) 示例: package main //必须有个main包 import "fmt" //定义一个结构体类型 type Stud ...

  2. 如何实现JS函数的重载

    javascript不能支持函数的重载,如下: function f(length) { alert("高为:"+length); } function f(length,widt ...

  3. 请教如何改善C#中socket通信机客户端程序的健壮性

    我是做Socket的新手,最近做了一个Socket客户端程序,连接Server的时候,如果server存在,并且允许连接的话,程序无错,正常执行:但是如果Server不存在,或者拒绝连接,程序就会卡住 ...

  4. 分解大量switch-case分支的两种方法

    项目经过长期多人的维护,所谓人多手杂,出现不少过多过长的switch-case分支,或者多重switch-case嵌套.每每添加功能,我都会紧皱眉头,然后带着罪恶感向已经成百上千行的函数里再添上一个c ...

  5. Android -- ViewPager、Fragment、状态保存、通信

    工程架构                                                                                      TabAFm到Tab ...

  6. (转)Unity3D Android手机开发环境配置,可真机发布调试

    此方法配置好,在可以在unity直接发布到手机上,并可以实时调试. 1.配置eclipse环境:首先在官网下载安装包:http://developer.android.com/sdk/index.ht ...

  7. json数据的用法

    json数据在后台跟前台传递数据使用是非常多站点开发者再熟悉只是的数据格式了,可是呢在这之前肯定有不少人还不知道json数据是怎么使用的, {"name":"01&quo ...

  8. Service具体解释(二):Service生命周期

    < Service具体解释(一):什么是Service> < Service具体解释(二):Service生命周期> <Service具体解释(三):Service的使用 ...

  9. Office WORD如何设置表格背景颜色

    1 点击表格-表格属性,边框和底纹. 2 选择应用于段落,这样只会应用于问题,效果不好. 3 选择应用于单元格可以避免上面的问题.

  10. 批量合并GDB

    在实际操作中,经常对数据库文件进行合并.裁切等.如果遇到gdb比较多,要素层比较多,而且还存在数据集.虽然ArcGIS中的批量处理的功能,但填写参数过程也比较麻烦,如果一次性处理过多,程序容易停止工作 ...