百度地图API的IP定位城市和浏览器定位(转)
转自博文:百度地图API的IP定位城市和浏览器定位 http://blog.csdn.net/suixufeng/article/details/13511761
百度地图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定位城市和浏览器定位(转)相关推荐
- php调用百度地图定位,php用百度地图API进行IP定位和GPS定位
/** * 根据地理坐标获取国家.省份.城市,及周边数据类(利用百度Geocoding API实现) * 百度密钥获取方法:http://lbsyun.baidu.com/apiconsole/key ...
- android的百度地图sdk获取ip,基于百度地图API的ip地址查询
说明:使用ip地址查询太麻烦,偶然搜索发现有人已经写过基于百度API的ip地址查询,这个是前人的结晶,我只是修改了一些,勿喷. 用的python2.7,编码问题真是坑. 百度mapAPI私钥申请:ht ...
- 百度地图api 自定义驾车线路规划 车辆实时定位
项目需求 根据百度api给出的接口 实现从 始发地→目的地 线路规划 以及 车辆的实时位置跟踪定位 1.首先引入百度API <script type="text/javascript& ...
- Android 百度地图API实现实时定位
首先需要注册百度地图的开发者账号,选择个人开发者就可以.百度地图开放平台 | 百度地图API SDK | 地图开发 (baidu.com) 然后获取AK这个在网上都有可以自己查看.下载.配置sdk可以 ...
- 调用百度地图API获取经纬度(详细步骤)
前端调用百度地图API获取经纬度(详细操作) 1. 浏览器搜索百度地图开放平台 2. 创建应用 点击控制台 --> 应用管理 --> 我的应用 --> 注册账号(如果没有注册过) - ...
- 利用百度地图API进行根据ip定位城市
根据ip进行定位城市,本次利用的是根据百度地图API进行定位.网上也有其他的方法.本次就将我自己写的东西总结一下: 一.首先获取ip地址 public static String getReqIp(H ...
- C# 通过百度地图API,获取访问IP详细地址(上网IP的大致位置信息,一般为城市级别)
1.创建接受Json格式数据类 namespace BaiduMap {[Serializable]public class IpLocationResult{/// <summary>/ ...
- 使用百度地图api搜索两点位置、连线、计算距离、ip定位
欢迎大家点一个关注,支持我的原创文章,谢谢! 正文 现在在企业做web项目时,偶尔会用到地图功能,而当前最流行的无疑是百度地图了,百度地图API为应用开发者提供了强大的功能,以下就介绍关于本人在做项目 ...
- vue 使用百度地图api_使用百度地图api来实现ip高精度定位
曾有人问:我们的IP地址库是否能够提供这样的结果?可以确定用户在某个网吧.写字楼甚至某个小区?那上面这样的IP数据库是如何产生的呢? 俗称"人海战术".您可别不相信,直到今天,依然 ...
最新文章
- Wiki1017(乘积最大)
- Linux日常运维管理技巧(三)iptables规则备份和恢复、firewalld的9个zone、任务计划cron、chkconfig系统服务管理、添加服务命令、systemctl管理服务
- 超神!卡内基博士ImageNet夺冠后转战NLP!
- jQuery源码研究学习笔记(二)
- Asp.Net中SqlServer数据库连接方式
- (21)tar打包命令详解
- 关于Lua的下载以及wlua、luac等文件的解释
- 高光谱图像异常探测导读
- 全国哀悼日,网站变黑白的代码
- 人生十个阶段,每七年周期变化
- 在mosquitto和Node-Red间使用基于的MQTTS双向认证通讯( 私有CA)
- python 绘制频数与正太分布图
- python shell 运行py文件,python怎么运行py文件
- 移动磁盘已用空间0字节要如何办啊
- STM32F103C8T6移植uCOS基于HAL库
- opencv学习八:高斯模糊和边缘保留滤波EPF
- RIO——健壮的IO包
- warning: LF will be replaced by CRLF in package.json. The file will have its original line endings i
- 数字三角形(动态规划经典例题)
- 从CSDN博客下载的图片如何无损去水印
热门文章
- 如何用python画一束花_武汉早樱开了!却没有赏樱人群,那就用python画一束最美的樱花...
- Unity3d 开发(二)Unity 制作可发布插件
- 无法加载协定为“ServiceReference1.xxxxxx”的终结点配置部分,因为找到了该协定的多个终结点配置。请按名称指示首选的终结点配置部分。...
- Python实现APP UI自动化以及OpenCV图像识别元素
- 关于APP上传到苹果商店的详细步骤
- OK彻底解决ping主机ping虚拟机之间ping不通的问题
- cdh 安装 agent失败
- 获取行政区划地名地址的简称
- NAS信令学习笔记 ——IP地址分配
- Android 常用开源框架汇总