麻辣GIS微信平台

更多 GIS 干货

微信关注不错过

「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个接口。

  1. http://www.taobao.com/help/getip.php
  2. 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,也不需要用户授权。像阿里的一些服务,可以做到每天更新,精确到区县级。

如果你在开发中也遇到类似的需求,可以参考。

相关阅读

麻辣GIS-Sailor

作者:

GIS爱好者,学GIS,更爱玩GIS。

声明

1.本文所分享的所有需要用户下载使用的内容(包括但不限于软件、数据、图片)来自于网络或者麻辣GIS粉丝自行分享,版权归该下载资源的合法拥有者所有,如有侵权请第一时间联系本站删除。

2.下载内容仅限个人学习使用,请切勿用作商用等其他用途,否则后果自负。

手机阅读
公众号关注
知识星球
手机阅读
麻辣GIS微信公众号关注
最新GIS干货
关注麻辣GIS知识星球
私享圈子

留言板(小编看到第一时间回复)