「GIS技巧」使用IP地址定位用户位置的方法小结
基于WebGIS的相关开发中,经常遇到的场景是获取用户的地理信息,然后基于用户的位置信息来展示相关业务场景。在很长的一段时间里,我都是借助HTML5的GeoLocation实现的,或者是通过JS-Bridge调用Native提供的API。最近遇到一个需求,对用户的位置精度要求极低,只要知道大概的城市就可以了,本来也想借助GeoLocation实现的,但客户系统比较老,不支持HTTPS,所以就换了个思路,通过用户的IP地址来获取用户的地理位置信息。
思路一:使用传统互联网公司已经封装好的接口,这样的好处是不需要自己的后端支持,前端直接调用,不强要求HTTPS,主要有下面几个。
搜狐
接口:
https://pv.sohu.com/cityjson?ie=utf-8
搜狐这个实现比较有意思,属于比较传统的实现方式,类似JSONP的解决方案。优点也很明显,直接前端JS引用,不需要后端支持;缺点是数据更新慢并且不全,好多IP只到了省级。
淘宝
淘宝提供了2个接口。
- http://www.taobao.com/help/getip.php
- http://ip.taobao.com/service/getIpInfo.php
第一个接口用于获取用户IP,再二个接口用于获取用户IP的详细信息(包括地理位置信息)。不过淘宝目前做了QPS的限制,这个接口经常会挂掉。
黑客联盟
接口:https://fulivv.com/ip.php
这个只能通过JS获取到IP,并不能确认归属。
PS:网上还有一些教程说什么360、太平洋、新浪之类的,根据我找的测试,基本都已经挂了,上面列的基本没有能用的。
思路二:自行提供后端支持,毕竟获取用户的IP这事本来就是后端做比较方便,通过自有后端拿到IP,(不同的后端都有拿到用户IP的方法,这里不赘述了。)然后换到位置信息并返回给前端就可以了,这里就有我们比较常见的地图服务商解决方案了。
百度地图
百度地图提供了IP定位的服务,需要认证成为百度地图的开发者,并创建应用。
请求的地址:
http://api.map.baidu.com/location/ip?ak=您的AK&ip=您的IP&coor=bd09ll //HTTP协议
https://api.map.baidu.com/location/ip?ak=您的AK&ip=您的IP&coor=bd09ll //HTTPS协议
返回的数据结构示例:
{
address: "CN|北京|北京|None|CHINANET|1|None", #详细地址信息
content: #结构信息
{
address: "北京市", #简要地址信息
address_detail: #结构化地址信息
{
city: "北京市", #城市
city_code: 131, #百度城市代码
province: "北京市", #省份
},
point: #当前城市中心点
{
x: "116.39564504", #当前城市中心点经度
y: "39.92998578" #当前城市中心点纬度
}
},
status: 0 #结果状态返回码
}
百度地图认证个人开发者每天调用限制是100W,但QPS只有5-10,不够用怎么办?花钱,价格如下:
一个月2万,可以根据项目需要来,企业用户可以开发票。
高德地图
高德地图同样提供这种服务,也要注册开发者,申请应用的KEY。
请求接口:
[GET] https://restapi.amap.com/v3/ip?parameters
[PARAM] KEY, ip
返回示例:
{
"status" : "1",
"info" : "OK",
"infocode" : "10000",
"province" : "北京市",
"city" : "北京市",
"adcode" : "110000",
"rectangle" : "116.0119343,39.66127144;116.7829835,40.2164962"
}
高德的免费额度,每天30W次,QPS200,这比百度良心多了。如果不够用,也可以付费提升额度。
高德的特点是付费的粒度更细一些。
腾讯地图
腾讯地图的IP定位服务也很好用,相信做过小程序开发的并不陌生。
接口地址:
https://apis.map.qq.com/ws/location/v1/ip
参数:
- ip 否 IP地址,缺省时会使用请求端的IP ip=202.106.0.20
- key 是 开发密钥(Key) key=OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77
- output 否 返回格式:支持JSON/JSONP,默认JSON output=json
- callback 否 JSONP方式回调函数 callback=function1
返回示例:
{
"status": 0,
"message": "query ok",
"result": {
"ip": "202.106.0.30",
"location": {
"lng": 116.407526,
"lat": 39.90403
},
"ad_info": {
"nation": "中国",
"province": "",
"city": "",
"adcode": 110000
}
}
}
腾讯限制每天调用1W次,并发5,这果然很腾讯,当然不够也可以买。
其他解决方案
阿里云有这种接品调用包,ipip.net,ip138之类的也提供这种调用服务,基本没免费额度,要钱。
思路三:之前的2种思路,还是把IP换地址这种信息给其他服务来做,思路二还是需要API Call的,所以最后一种思路是这个IP转地址的工作我们自己后端完成,这需要一个地址和IP的映射关系了,通常要搞一个这样的数据库。
GeoIP
比较出名的就是GeoIP了,GeoIP是国外maxmind提供的比较知名的IP转地址的数据库,价格不算便宜。
如果要在自己的机器部署,要定时来维护,更新这个数据库。GeoIP提供了各种语言调用的方式,需要的可以搜一下。
总结
好多朋友可能觉得使用IP定位很鸡肋,但其实这种东西也有比较多的应用场景,尤其是对位置精度要求不高的情况下,这种方式速度快,不需要HTTPS,也不需要用户授权。像阿里的一些服务,可以做到每天更新,精确到区县级。
如果你在开发中也遇到类似的需求,可以参考。
相关阅读
声明
1.本文所分享的所有需要用户下载使用的内容(包括但不限于软件、数据、图片)来自于网络或者麻辣GIS粉丝自行分享,版权归该下载资源的合法拥有者所有,如有侵权请第一时间联系本站删除。
2.下载内容仅限个人学习使用,请切勿用作商用等其他用途,否则后果自负。