如何跟蹤 用戶地理位置 的調查 如何通過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/

三、到底是手機客戶端獲取,還是服務器端獲取呢?

客戶端獲取,還需要提交給服務器,加接口加字段,麻煩!

如果客戶端禁用了獲取地理位置的功能,那麼就沒有東西提交給服務器了。

對比之下,還是服務器端獲取吧!

以上便是我的調查整理,希望對你有幫助。

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