百度地图API提供了Geolocation 和 LocalCity两个服务类。

这俩API可以分别供用户在JavaScript中进行定位和城市确认。

1 本质上,Geolocation这个类是使用了支持HTML5浏览器提供的Geolocation API 来进行定位的。目前Internet Explorer 9、Firefox、Chrome、Safari 以及 Opera 支持地理定位(因为他们支持HTML5)。

2 本质上,LocalCity这个类是利用用户IP地址去百度数据库里查询得到IP所在的城市。

关于第一点的原理,在此解释下:在支持HTML5的浏览器下,navigator对象下有一个属性----geolocation,而geolocation属性又有个方法getCurrentPosition(回调函数1,回调函数2)可以通过浏览器向设备发起定位请求,浏览器就会让设备发送相关指令到附近上网设备,上网设备返回定位信息给用户设备,浏览器就获得了用户位置。

当浏览器获得定位信息成功,则navigator.geolocation.getCurrentPosition(回调函数1,回调函数2); 中的回调函数1执行,如果定位失败,则回调函数2执行。

若定位成功,则自动把定位结果对象作为参数传递给回调函数1,。 若定位失败,则自动把错误对象传递给回调函数2.  所以在回调函数2中可通过error.code 获取到错误码。(假设形参名为error)。

如下代码就是用HTML5获取定位信息,并把成功定位交给showPosition处理,把错误定位交给showError处理。

function getLocation()

{

if (navigator.geolocation)

{

navigator.geolocation.getCurrentPosition(showPosition,showError);

}

else{x.innerHTML="Geolocation is not supported by this browser.";} //浏览器不支持HTML5.

}

注意:百度地图提供的API使用起来与HTML5原生的定位代码是不同的。

下面是百度定位代码:

<script type="text/javascript">

var map = new BMap.Map("allmap");

var point = new BMap.Point(116.331398,39.897445);

map.centerAndZoom(point,12);

var geolocation = new BMap.Geolocation();  //实例化浏览器定位对象。

//下面是getCurrentPosition方法。调用该对象的getCurrentPosition(),与HTML5不同的是,这个方法原型是getCurrentPosition(callback:function[, options: PositionOptions]),也就是说无论成功与否都执行回调函数1,第二个参数是关于位置的选项。 因此能否定位成功需要在回调函数1中自己判断。

geolocation.getCurrentPosition(function(r){   //定位结果对象会传递给r变量

if(this.getStatus() == BMAP_STATUS_SUCCESS){  //通过Geolocation类的getStatus()可以判断是否成功定位。

var mk = new BMap.Marker(r.point);    //基于定位的这个点的点位创建marker

map.addOverlay(mk);    //将marker作为覆盖物添加到map地图上

map.panTo(r.point);   //将地图中心点移动到定位的这个点位置。注意是r.point而不是r对象。

alert('您的位置:'+r.point.lng+','+r.point.lat);  //r对象的point属性也是一个对象,这个对象的lng属性表示经度,lat属性表示纬度。

}

else {

alert('failed'+this.getStatus());

}

},{enableHighAccuracy: true})

//关于状态码

//BMAP_STATUS_SUCCESS 检索成功。对应数值“0”。

//BMAP_STATUS_CITY_LIST 城市列表。对应数值“1”。

//BMAP_STATUS_UNKNOWN_LOCATION 位置结果未知。对应数值“2”。

//BMAP_STATUS_UNKNOWN_ROUTE 导航结果未知。对应数值“3”。

//BMAP_STATUS_INVALID_KEY 非法密钥。对应数值“4”。

//BMAP_STATUS_INVALID_REQUEST 非法请求。对应数值“5”。

//BMAP_STATUS_PERMISSION_DENIED 没有权限。对应数值“6”。(自 1.1 新增)

//BMAP_STATUS_SERVICE_UNAVAILABLE 服务不可用。对应数值“7”。(自 1.1 新增)

//BMAP_STATUS_TIMEOUT 超时。对应数值“8”。(自 1.1 新增)

</script>

IP获取城市就简单了,如下:

<script type="text/javascript">

var map = new BMap.Map("allmap");

var point = new BMap.Point(116.331398,39.897445);

map.centerAndZoom(point,12);

function myFun(result){

var cityName = result.name;

map.setCenter(cityName);   //关于setCenter()可参考API文档---”传送门

alert(cityName);

}

var myCity = new BMap.LocalCity();

myCity.get(myFun);   //创建一个LocalCity对象myCity,然后调用其get()方法,就得到了用户IP对应的城市。该城市结果会以参数形式传递给回调函数myFun。接下来就是myFun(结果城市result)来执行了----即上文红色代码。

</script>

百度地图API的IP定位城市和浏览器定位(转)的更多相关文章

  1. 百度地图API示例之根据城市名设置地图中心点

    代码: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" con ...

  2. php用百度地图API进行IP定位和GPS定位

    <?php /** * 根据地理坐标获取国家.省份.城市,及周边数据类(利用百度Geocoding API实现) * 百度密钥获取方法:http://lbsyun.baidu.com/apico ...

  3. 用户Ip地址和百度地图api接口获取用户地理位置(经纬度坐标,城市)

    <?php   //获取用户ip(外网ip 服务器上可以获取用户外网Ip 本机ip地址只能获取127.0.0.1) function getip(){     if(!empty($_SERVE ...

  4. 微信小程序城市定位(借助百度地图API判断城市)

    概述 微信小程序提供一些API(地址)用于获取当前用户的地理位置等信息,但无论是wx.getLocation,还是wx.chooseLocation均没有单独的字段表示国家与城市信息,仅有经纬度信息. ...

  5. 微信小程序城市定位(百度地图API)

    概述 微信小程序提供一些API(地址)用于获取当前用户的地理位置等信息,但无论是wx.getLocation,还是wx.chooseLocation均没有单独的字段表示国家与城市信息,仅有经纬度信息. ...

  6. 百度地图API,定位您的当前位置

    1.介绍 利用百度地图的API来定位您的所属位置,这个位置返回的是经纬度,而不是具体的汉字位置.利用经纬度,再显示在百度地图上的位置. 2.代码 <html> <head> & ...

  7. Android 百度地图API 定位 导航

    看看这个利用百度地图定位并实现目的地导航的Demo. 首先看实现效果:                          进 入后首先会得到当前位置,在地图上显示出来.在输入框中输入目的地后,就会在地 ...

  8. [android] 百度地图开发 (两).所在地的城市定位和城市POI搜索

    一个. 百度地图城市位置和POI搜索知识       上一篇文章"百度地图开发(一)"中讲述了怎样申请百度APIKey及解决显示空白网格的问题.该篇文章主要讲述怎样定位城市位置.定 ...

  9. 百度地图API示例之添加定位相关控件

    代码 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" cont ...

随机推荐

  1. [解决WebClient或HttpWebRequest首次连接缓慢问题]

    [编程环境]Visual Studio 2010, NET4.0 [开发语言]C#, 理论上VB.NET等依赖.NET Framework框架的语言均受此影响 [问题描述] 使用HttpWebRequ ...

  2. HMTL判断ie版本

    html判断IE版本 1. <!--[if !IE]><!--> 除IE外都可识别 <!--<![endif]--> 2. <!--[if IE]> ...

  3. https://zeroc.com/index.html

    https://zeroc.com/index.html http://blog.shutupandcode.net/?p=1085

  4. HTML页面meta标签内容详解

    所有的浏览器都支持meta标签,用于提供页面相关信息,信息都是以名(http-equiv和name标示)/值(content标示)对的形式现实. 属性content,用于定义http-equiv(定义 ...

  5. redmine问题集锦

    当我新建LDAP认证模式时,遇到如下错误:

  6. nginx+webpy配置

    之前搞app时候学的webpy,一直用的自带webserver,最近研究nginx一段时间,决定二者结合玩一下~ 把搭建的要点总结下,说不定哪天还得用——其实平时手挺懒的... 1 必备模块和背景知识 ...

  7. PHP 面向对象

    封装与不封装的区别:   未封装 时 外部随意更改数据   数据 不需要判定 就可以执行    外部直接操作数据 封装:  外部同样可以对数据更改,但需要 调用  类里面的  函数  外部间接操作数据 ...

  8. jquery中使用serialize() 序列化表单时 中文乱码问题

    序列化中文时之所以乱码是因为.serialize()调用了encodeURLComponent方法将数据编码了 解决方法就是进行解码 1 原因:.serialize()自动调用了encodeURICo ...

  9. javascript推荐书籍

    本文转载自http://www.cnblogs.com/zfc2201/archive/2012/07/22/2604236.html感谢作者 WEB前端研发工程师,在国内算是一个朝阳职业,这个领域没 ...

  10. 添加已运行daemon进程(falcon-agent)到supervisor测试

    falcon-agent now is running already, pid= falcon-agent now is running already, pid= falcon-agent now ...