百度地图ip定位,不算bug的bug
做为一个入行不足两年的菜鸟,能在博客园写下第一篇博客,是需要多大的勇气啊。主要还是怕大神们喷啊。其次自己文笔实在太差了。 哈哈~还请各位大神,口下留情啊。
首先说下我的需求:一个需要城市分站的手机站。 当用户访问时自动定位到用户所在的城市。因为之前做微信开发的时候,研究过一段时间的百度地图api,拿到这个需求后,第一时间想到的就是ip定位api. 先贴出百度官方的说明:
IP定位 API是一个根据IP返回对应位置信息的http形式位置服务接口,支持多种语言调用,如C# 、C++、Java等,即通过发送http请求,返回json格式的位置数据(包括坐标值、省份、城市、百度城市代码等)。
提供根据IP返回位置信息的功能,包括如下两种情况:
1.获取指定IP的位置信息:指定IP值,返回该IP对应的位置信息;
2.获取当前设备IP的地址信息:根据用户设备当前的IP返回位置信息;
使用方法
第一步,申请密钥(ak) ,作为访问服务的依据;
第二步,拼写发送http请求的url,注意需使用第一步申请的ak;
第三步,接收http请求返回的数据(json格式)。
服务地址
URL:http://api.map.baidu.com/location/ip
接口参数
| 参数 | 含义 | 格式 | 说明 |
|---|---|---|---|
| ip | ip地址 | string | 可选,ip不出现,或者出现且为空字符串的情况下,会使用当前访问者的IP地址作为定位参数 |
| ak | 用户密钥 | string | 必选,在lbs云官网注册的access key,作为访问的依据 |
| sn | 用户的权限签名 | string | 可选,若用户所用ak的校验方式为sn校验时该参数必须。(sn生成算法) |
| coor | 输出的坐标格式 | string | 可选,coor不出现时,默认为百度墨卡托坐标;coor=bd09ll时,返回为百度经纬度坐标 |
返回值说明
返回结果(地址解析的结果)
- {
- address: "CN|北京|北京|None|CHINANET|1|None", #地址
- content: #详细内容
- {
- address: "北京市", #简要地址
- address_detail: #详细地址信息
- {
- city: "北京市", #城市
- city_code: 131, #百度城市代码
- district: "", #区县
- province: "北京市", #省份
- street: "", #街道
- street_number: "" #门址
- },
- point: #百度经纬度坐标值
- {
- x: "116.39564504",
- y: "39.92998578"
- }
- },
- status: 0 #返回状态码
- }
我的实现流程是在页面加载的时候,模拟执行http请求,根据返回值,判断当前所在的城市。然后显示不同城市的数据。

返回的结果如下:
{"address":"CN|\u6d59\u6c5f|None|None|CHINANET|None|None","content":{"address_detail":{"province":"\u6d59\u6c5f\u7701","city":"","district":"","street":"","street_number":"","city_code":29},"address":"\u6d59\u6c5f\u7701","point":{"y":"3374952.26","x":"13353719.99"}},"status":0}
然后解析这段json,就可以获取到当前所在的城市,和当前的地理位置经纬度了。
做到这里,没发现有什么端倪。 但当把程序发布后,部署到阿里云后,奇迹出现了,无论我用任何设备访问,获取的位置都是北京。思索很久,也不得所知,毕竟本地执行是正确的。后来无意中发现公司的阿里云的ip就是北京的,而获取到的ip就和阿里云的ip.当时的第一个想法就是百度的接口出现了bug,还蛮天真的给百度提交了bug反馈,希望他们能尽快修复,或者给我一个反馈。结果等了半个月,至今没任何信息。 唉,谁让咱太傻太天真了呢。
后来仔细想想,问题应该就是接口获取到的是服务器端的位置。 因为代码最终是通过客户端发起的请求,然后服务器端在响应的时候运行的。换个思路来讲,如果要定位客户端的话,就必须在客户端执行,想到这里,也就想到了解决方案了,那就是通过js,在客户端获取到位置信息,然后再跳转到对应的城市分站。
<script src="/js/jquery-1.4.4.js"></script>
<script>
$(function () {
$.getJSON("http://api.map.baidu.com/location/ip?ak=此处是百度地图分配的ak&callback=?", function (data) {
alert(data.address);
})
})
</script>
由于要客户端执行,要考虑跨域的问题,所以在地址的后面要加上&callback=?,这样就可以调用接口返回来的信息了。
写完收工,大神请悠着点喷。欢迎指点。
还有,大家觉得这个算是一个bug吗?
百度地图ip定位,不算bug的bug的更多相关文章
- 百度地图IP定位,点击地图添加marker
<html> <head> <meta http-equiv="Content-Type" content="text/html; char ...
- 在Fragment中实现百度地图,定位到当前位置(基于SDKv2.1.0)
使用最新版本的百度地图需要注意的几个地方: 1.libs文件夹下要有android-support-v4.jar.baidumapapi_v2_1_0.jar.locSDK_3.1.jar三个jar包 ...
- AngularJS进阶(十九)在AngularJS应用中集成百度地图实现定位功能
在AngularJS应用中集成百度地图实现定位功能 注:请点击此处进行充电! 前言 根据项目需求,需要实现手机定位功能,考虑到百度业务的强大能力,遂决定使用百度地图第三方服务. 添加第三方模块的步骤与 ...
- Xamarin.Android 使用百度地图获取定位信息
最近做一个项目,web端使用百度地图,PDA使用手持机自带的GPS定位系统获取经纬度,然后再百度地图上显示该经纬度会有一定距离的差异,这里就像可乐的瓶子拧上雪碧的盖子,能拧的上却不美观.所以为了数据的 ...
- 利用HTML5定位功能,实现在百度地图上定位(转)
原文:利用HTML5定位功能,实现在百度地图上定位 代码如下: 测试浏览器:ie11定位成功率100%,Safari定位成功率97%,(add by zhj :在手机上测试(用微信内置浏览器打开),无 ...
- C#调用百度高精度IP定位API通过IP获取地址
API首页:http://lbsyun.baidu.com/index.php?title=webapi/high-acc-ip 1.申请百度账号,创建应用,获取密钥(AK) http://lbsyu ...
- IOS 更改百度地图的定位图片
使用了百度地图的SDK,定位图片一直是蓝色的小圆点,很不喜欢,想换成自定义的图片,在网上搜罗了一大通,找到了解决的方案. 写下如下代码: //定位图层自定义样式参数 BMKLocationViewDi ...
- 百度地图API 定位一直4.9E-324
使用百度地图Android SDK 7.0定位坐标一直为4.9E-324,网上搜索了很多,但是均未解决我的问题,在此坐下解决记录,在设置权限中将应用添加信任即可!android 6.0 其他版本未测! ...
- Android 百度地图SDK 定位
引用locSDK_6.1.3.jar,切记添加相应的so文件. 1.定位初始化,需要使用getApplicationContext() mLocClient = new LocationClient( ...
随机推荐
- Syslog
一.简介 syslog是一种工业标准的协议,可用来记录设备的日志.在UNIX系统,路由器.交换机等网络设备中,系统日志(System Log)记录系统中任何时间发生的大小事件.管理者可以通过查看系统记 ...
- Storm之spout,bolt编写
Storm,核心代码使用clojure书写,实用程序使用python开发,使用java开发拓扑. Nimbus节点接收到请求,对提交的拓扑进行分片,分成一个个的task,并将task和supervis ...
- BI测试工具之跨数据库数据对比,支持oracle,sqlserver
应用场景: 本周在进行SIT,我帮助仅有的一个测试妹妹对部分表进行数据质量验证,第一步需要做的就是比对source与stage表的table definition 与 数据内容的一致性. 本项目使用的 ...
- Canvas修行之黑客帝国代码雨
既然是修行,不卖弄关子,不吊胃口,修行成果必须先晒一晒. 下图是我用canvas画的黑客帝国代码雨,想起当年看黑客帝国时,那个代码雨场景让我心旷神怡,大开脑洞,满脑子是那种三维空间,无数0和1像雨一样 ...
- selenium依次点击页面的删除按钮
需要依次点击页面的删除按钮,如下图: @Test public static void FaBu() { TestMenuJump.jumpExam(driver); TestMenuJump.jum ...
- 51nod-1537 1537 分解(矩阵快速幂+找规律)
题目链接: 1537 分解 问(1+sqrt(2)) ^n 能否分解成 sqrt(m) +sqrt(m-1)的形式 如果可以 输出 m%1e9+7 否则 输出no Input 一行,一个数n.( ...
- HDU 1171 Big Event in HDU --暴力+生成函数
题意:给n种房子,每种房子有一个值val和个数cnt,现在要把这些房子分成两部分,争取两部分总值相等,如果不能相等,让A>B,且A-B最小. 解法:先跑一次生成函数,c[n]表示组成总值为n的方 ...
- CSU 1081 集训队分组
题意:有n个学生,比了一场比赛,但是榜单看不到了.现在告诉你m段信息,每段信息的内容是(a,b),表示a的排名比b的高.问你能不能根据这些信息得出这场比赛的前k名. 思路:用拓扑排序找出一组符合k个人 ...
- mysql完整备份时过滤掉某些库
mysql进行完整备份时使用--all-database参数比如:#mysqldump -u root -h localhost -p --all-database > /root/all.sq ...
- 优化mysql主从下的slave延迟问题
一般而言,slave相对master延迟较大,其根本原因就是slave上的复制线程没办法真正做到并发.简单说,在master上是并发模式(以InnoDB引擎为主)完成事务提交的,而在slave上,复制 ...