如何跟踪 用户地理位置 的调查 如何通过IP地址获取城市信息:

最近有个需求,需要获取手机App端用户的地理位置,不需要太精确,能获取到市就可以了。但是由谁来获取呢?服务器端还是客户端?

一、手机App端获取

经过调查,手机App端可以通过两种方式获取地理位置,GPS 和 LBS 。

  1. GPS(Global Positioning System,全球卫星定位系统),通过接收 GPS 卫星提供的经纬度座标信号来进行定位。

只要该系统具有包含GPS接收器的设备,能接收4颗卫星的定位信号,就可以计算地球表面上物体或人的准确地理座标,误差在5-10米。

优势:精确。

缺点:受天气和位置影响较大。高架桥、高楼角落、地下车库、见不到天空的场所等等,定位会受到影响,甚至无法定位。

  1. LBS(Location Based Service,移动位置基站系统),通过移动通信的基站信号差异来计算出手机所在的位置。

理论上说,只要计算三个基站的信号差异,就可以判断出手机所在的位置。只要用户手机处于移动通信网络的有效范围之内,就可以随时进行位置定位,而不受天气、高楼、位置等等的影响。

优点:方便;

缺点:LBS基站定位的精确度从500-5000米不等。使用范围较窄,超出手机的服务范围,或者手机所处的基站数量不足,则无法定位。还有直放站对基站数据的影响,另外数据库更新的不及时,移动通讯运营商随时都可能变更、增加、删除基站编号。

二、服务器端自行获取

手机App和即时通讯服务器是保持长连接的,只要手机App端的用户在聊天,那么即时通讯服务器就可以获取手机上网的ip地址。

// ChannelHandlerContext ctx
InetSocketAddress ipSocket = (InetSocketAddress)ctx.channel().remoteAddress();
String clientIp = ipSocket.getAddress().getHostAddress();
log.info("客户端ip地址:{}",clientIp);

一个根据本机ip获取位置的网址:

pv.sohu.com/cityjson?ie=utf-8

替换ip就可获取位置的网址:opendata.baidu.com/api.php?query=183.209.110.254&co=&resource_id=6006&t=1433920989928&ie=utf8&oe=utf-8&format=json一个自主维护ip与地址关系的git参考: https://gitee.com/lionsoul/ip2region

获取ip地址是第一步,第二步是要根据ip地址通过第三方接口获取实际的地理位置。

网上也有开源的免费插件,但是ip地址与地理位置对应的数据还要自己维护,数据不能保证准确,还是使用第三方接口可靠些。

其他参考文档:根据ip地址获取城市名的几种方法: https://blog.csdn.net/weixin_34358365/article/details/92600072

如何通过IP地址获取城市信息:

https://page.om.qq.com/page/OAV30uzMHPDj7PfDrrYHyFww0 一招教你获取当前ip地址与所处城市:https://wenku.baidu.com/view/2d3d3af687254b35eefdc8d376eeaeaad1f3160b.htmlAndroid手机获取外网ip:https://blog.csdn.net/qq_44934581/article/details/89485720 百度接口通过ip获取用户所在地:https://www.pianshen.com/article/1951171075/

三、到底是手机客户端获取,还是服务器端获取呢?

客户端获取,还需要提交给服务器,加接口加字段,麻烦!

如果客户端禁用了获取地理位置的功能,那么就没有东西提交给服务器了。

对比之下,还是服务器端获取吧!

以上便是我的调查整理,希望对你有帮助。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章