html5中地理位置定位api接口开发应用小结


Posted in HTML / CSS onJanuary 04, 2013

地理位置定位的几种方式:IP地址,GPS,Wifi,GSM/CDMA

地理位置获取流程
1、用户打开需要获取地理位置的web应用。
2、应用向浏览器请求地理位置,浏览器弹出询问,询问用户是否共享地理位置。
3、假设用户允许,浏览器从设别查询相关信息。
4、浏览器将相关信息发送到一个信任的位置服务器,服务器返回具体的地理位置。

HTML5地理地位的实现
1. 实现基于浏览器(无需后端支持)获取用户的地理位置技术
2. 精确定位用户的地理位置( 精度最高达10m之内,依赖设备 )
3. 持续追踪用户的地理位置
4. 与 Google Map、或者 Baidu Map 交互呈现位置信息

Geolocation API 用于将用户当前地理位置信息共享给信任的站点,这涉及用户的隐私安全问题,所以当一个站点需要获取用户的当前地理位置,浏览器会提示用户是“允许” or “拒绝”。
先看看哪些浏览器支持Geolocation API:
IE9.0+、FF3.5+、Safari5.0+、Chrome5.0+、Opera10.6+、IPhone3.0+、Android2.0+
Geolocation API存在于navigator对象中,只包含3个方法:

复制代码
代码如下:

1、getCurrentPosition //当前位置
2、watchPosition //监视位置
3、clearWatch //清除监视
navigator.geolocation.getCurrentPosition( … , function(error){
switch(error.code){
case error.TIMEOUT :
alert( " 连接超时,请重试 " );
break;
case error.PERMISSION_DENIED :
alert( " 您拒绝了使用位置共享服务,查询已取消 " );
break;
case error.POSITION_UNAVAILABLE :
alert( " ,抱歉,暂时无法为您所在的星球提供位置服务 " );
break;
}
});

watchPosition像一个追踪器与clearWatch成对。
watchPosition与clearWatch有点像setInterval和clearInterval的工作方式。
var watchPositionId = navigator.geolocation.watchPosition(success_callback, error_callback, options);
navigator.geolocation.clearWatch(watchPositionId );

HTML 5提供了地理位置等一系列API可以给用户使用,方便用户制作LBS的地理应用,首先在支持HTML 5的浏览器中,当开启API时,会询问是否用户同意使用api,否则不会开启的,保证安全。
1、开启,判断是否浏览器支持LBS api

复制代码
代码如下:

function isGeolocationAPIAvailable()
{
var location = "No, Geolocation is not supported by this browser.";
if (window.navigator.geolocation) {
location = "Yes, Geolocation is supported by this browser.";
}
alert(location);
}

上面的例子中,还在displayError方法中,捕捉了异常;
2、获得用户的地理位置
这个使用getCurrentPosition就可以了;
复制代码
代码如下:

function requestPosition() {
if (nav == null) {
nav = window.navigator;
}
if (nav != null) {
var geoloc = nav.geolocation;
if (geoloc != null) {
geoloc.getCurrentPosition(successCallback);
}
else {
alert("Geolocation API is not supported in your browser");
}
}
else {
alert("Navigator is not found");
}
}

当获得地理位置成功后,会产生一个回调方法了,处理返回的结果,
复制代码
代码如下:

function setLocation(val, e) {
document.getElementById(e).value = val;
}
function successCallback(position)
{
setLocation(position.coords.latitude, "latitude"); setLocation(position.coords.longitude, "longitude");
}

3、一个很常见的问题,是如何跟踪用户不断变化的地理位置,这里小结下其中用到的两个api
1 watchPosition
例子如下:
复制代码
代码如下:

function listenForPositionUpdates() {
if (nav == null) {
nav = window.navigator;
}
if (nav != null) {
var geoloc = nav.geolocation;
if (geoloc != null) {
watchID = geoloc.watchPosition(successCallback);
} else {
alert("Geolocation API is not supported in your browser");
}
} else {
alert("Navigator is not found");
}
}

然后在successCallback中,就可以设置显示最新的地理位置:
复制代码
代码如下:

function successCallback(position){
setText(position.coords.latitude, "latitude"); setText(position.coords.longitude, "longitude");
}

如果不希望实时跟踪,则可以取消之:
function clearWatch(watchID) {
window.navigator.geolocation.clearWatch(watchID);
}
4、如何处理异常
当遇到异常时,可以捕捉之:
复制代码
代码如下:

if (geoloc != null) {
geoloc.getCurrentPosition(successCallback, errorCallback);
}
function errorCallback(error) {
var message = "";
switch (error.code) {
case error.PERMISSION_DENIED:
message = "This website does not have permission to use "
+ "the Geolocation API";
break;
case error.POSITION_UNAVAILABLE:
message = "The current position could not be determined.";
break;
case error.PERMISSION_DENIED_TIMEOUT:
message = "The current position could not be determined "
+ "within the specified timeout period.";
break;
}
if (message == "") {
var strErrorCode = error.code.toString();
message = "The position could not be determined due to "
+ "an unknown error (Code: " + strErrorCode + ").";
}
alert(message);
}

5、 在google 地图上显示位置(前提是有google map api等设置好)
复制代码
代码如下:

function getCurrentLocation()
{
if (navigator.geolocation)
{
navigator.geolocation.getCurrentPosition(showMyPosition,showError);
}
else
{
alert("No, Geolocation API is not supported by this browser.");
}
}
function showMyPosition(position)
{
var coordinates=position.coords.latitude+","+position.coords.longitude;
var map_url="http://maps.googleapis.com/maps/api/staticmap?center="
+coordinates+"&zoom=14&size=300x300&sensor=false";
document.getElementById("googlemap").innerHTML="<img src='"+map_url+"' />";
}
function showError(error)
{
switch(error.code)
{
case error.PERMISSION_DENIED:
alert("This website does not have permission to use the Geolocation API")
break;
case error.POSITION_UNAVAILABLE:
alert("The current position could not be determined.")
break;
case error.TIMEOUT:
alert("The current position could not be determined within the specified time out period.")
break;
case error.UNKNOWN_ERROR:
alert("The position could not be determined due to an unknown error.")
break;
}
}
HTML / CSS 相关文章推荐
检测用户浏览器是否支持CSS3的方法
Aug 29 HTML / CSS
支持IE8的纯css3开发的响应式设计动画菜单教程
Nov 05 HTML / CSS
非常漂亮的CSS3百叶窗焦点图动画
Feb 24 HTML / CSS
CSS3实现图片抽屉式效果的示例代码
Nov 06 HTML / CSS
详解HTML5中div和section以及article的区别
Jul 14 HTML / CSS
html2canvas把div保存图片高清图的方法示例
Mar 05 HTML / CSS
使用canvas来完成线性渐变和径向渐变的功能的方法示例
Jul 25 HTML / CSS
webView加载html图片遇到的问题解决
Oct 08 HTML / CSS
HTML实现代码雨源码及效果示例
Feb 25 HTML / CSS
AmazeUi Tree(树形结构) 应用小结
Aug 17 HTML / CSS
AmazeUI 手机版页面的顶部导航条Header与侧边导航栏offCanvas的示例代码
Aug 19 HTML / CSS
HTML5+CSS+JavaScript实现捉虫小游戏设计和实现
Oct 16 HTML / CSS
html5中为audio标签增加停止按钮动作实现方法
Jan 04 #HTML / CSS
html5 button autofocus 属性介绍及应用
Jan 04 #HTML / CSS
html5的新玩法——语音搜索
Jan 03 #HTML / CSS
HTML5 语音搜索只需一句代码
Jan 03 #HTML / CSS
HTML5 语音搜索(淘宝店语音搜素)
Jan 03 #HTML / CSS
html5拖曳操作 HTML5实现网页元素的拖放操作
Jan 02 #HTML / CSS
使用CSS实现弹性视频html5案例实践
Dec 26 #HTML / CSS
You might like
一个程序下载的管理程序(二)
2006/10/09 PHP
使用PHP获取网络文件的实现代码
2010/01/01 PHP
深入PHP异步执行的详解
2013/06/03 PHP
解析如何修改phpmyadmin中的默认登陆超时时间
2013/06/25 PHP
php实现cc攻击防御和防止快速刷新页面示例
2014/02/13 PHP
PHP计算一年多少个星期和每周的开始和结束日期
2014/07/01 PHP
[原创]CI(CodeIgniter)简单统计访问人数实现方法
2016/01/19 PHP
php从身份证获取性别和出生年月
2017/02/09 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
2017/07/19 PHP
用Javascript数组处理多个字符串的连接问题
2009/08/20 Javascript
Jquery选择器中使用变量实现动态选择例子
2014/07/25 Javascript
Node.js中使用Log.io在浏览器中实时监控日志(等同tail -f命令)
2014/09/17 Javascript
javascript中Function类型详解
2015/04/28 Javascript
JavaScript脚本判断蜘蛛来源的方法
2015/09/22 Javascript
浅述节点的创建及常见功能的实现
2016/12/15 Javascript
微信小程序 常用工具类详解及实例
2017/02/15 Javascript
浅谈javascript的url参数parse和build函数
2017/03/04 Javascript
vue的基本用法与常见指令
2017/08/15 Javascript
Vue中的$set的使用实例代码
2018/10/08 Javascript
vue使用localStorage保存登录信息 适用于移动端、PC端
2019/05/27 Javascript
Python中实现对Timestamp和Datetime及UTC时间之间的转换
2015/04/08 Python
python利用高阶函数实现剪枝函数
2018/03/20 Python
利用python实现微信头像加红色数字功能
2018/03/26 Python
Python结合ImageMagick实现多张图片合并为一个pdf文件的方法
2018/04/24 Python
OpenCV搞定腾讯滑块验证码的实现代码
2019/05/18 Python
opencv3/python 鼠标响应操作详解
2019/12/11 Python
解决django xadmin主题不显示和只显示bootstrap2的问题
2020/03/30 Python
Python响应对象text属性乱码解决方案
2020/03/31 Python
Keras中 ImageDataGenerator函数的参数用法
2020/07/03 Python
致铅球运动员广播稿精选
2014/01/12 职场文书
毕业生简历自我评价范文
2014/04/09 职场文书
教师教学评估方案
2014/05/09 职场文书
2014乡镇干部纪律作风整顿思想汇报
2014/09/13 职场文书
在职员工证明书
2014/09/19 职场文书
2016银行求职自荐信
2016/01/28 职场文书
Windows Server 版本 20H2 于 8 月 9 日停止支持,Win10 版本 21H1 将于 12 月结束支
2022/07/23 数码科技