如何根据IP地址获取用户机器的准确经纬度
Posted
技术标签:
【中文标题】如何根据IP地址获取用户机器的准确经纬度【英文标题】:How to obtain accurate latitude and longitude of user machine based on IP address 【发布时间】:2015-06-20 06:16:36 【问题描述】:在我基于 php 的应用程序中,我想在用户基于 IP 地址登录到 webapp 时捕获用户机器的位置。
我按照这个方法:
$url = "http://freegeoip.net/json/$ip";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$data = curl_exec($ch);
curl_close($ch);
我正在获取纬度和经度值,但这些值并不准确,而是绝对值。在响应中,我得到这样的 JSON:
["ip"]=> string(11) "59.90.210.9"
["country_code"]=> string(2) "IN"
["country_name"]=> string(5) "India"
["region_code"]=> string(0) ""
["region_name"]=> string(0) ""
["city"]=> string(0) ""
["zip_code"]=> string(0) ""
["time_zone"]=> string(12) "Asia/Kolkata"
["latitude"]=> int(20)
["longitude"]=> int(77)
["metro_code"]=> int(0)
没有城市没有邮编。有没有更好的 API 可以根据需要获得确切的东西?提前感谢您的任何回复。
【问题讨论】:
IP 将永远给你一个确切的位置,如果城市是正确的你很幸运 【参考方案1】:还有很多其他服务。你可能想看看这个: Longitude and latitude value from IP address
【讨论】:
【参考方案2】:您可以使用MaxMind's GeoIP 服务/数据库,它有两个版本:GeoIP2 和(旧版)GeoIP。他们提供免费数据库和商业数据库,后者更准确。他们有一个GeoIP2 PHP SDK on Github 和Legacy GeoIP is included with PHP。
MaxMind GeoIP2 Demo Page 允许您输入 IP 地址并取回以下数据:
-
坐标(纬度/经度)
国家代码(2 个字母的国家代码)
域
互联网服务供应商
位置(城市、州、国家、大陆)
地铁代码
组织结构
邮政编码(例如邮政编码)
链接:
-
MaxMind's GeoIP2 and Legacy GeoIP product page
GeoIP2 demo page (enter IPs and get results)
GeoIP2-php SDK on Github
GeoIP on PHP.net
【讨论】:
【参考方案3】:Ricky,您可以使用 IP2Location 地理定位服务或数据库。它有两个版本:a)commercial 和 b)LITE。他们有一个developer 页面,其中包含许多编程语言的编程 API。
有一个在线的demo页面可以让你使用单个IP地址获取以下数据:
-
位置(国家、州、城市)
坐标(纬度、经度)
海拔
邮政编码
电话(IDD 和区号)
域名
ISP 名称
时区
连接速度
气象站(气象站名称和代码)
移动运营商(mnc、mcc、品牌)
使用类型
【讨论】:
以上是关于如何根据IP地址获取用户机器的准确经纬度的主要内容,如果未能解决你的问题,请参考以下文章
Python根据域名批量获取IP地址和经纬度(2021.12.1)
Python根据域名批量获取IP地址和经纬度(2021.12.1)