如何根据IP地址获取用户机器的准确经纬度

How to obtain accurate latitude and longitude of user machine based on IP address

在我基于 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 来获得所需的确切内容?预先感谢您的任何回复。

您可以使用 MaxMind's GeoIP service / database which has two versions: GeoIP2 and (Legacy) GeoIP. They provide free databases and commercial databases, the latter of which is more accurate. They have a GeoIP2 PHP SDK on Github and Legacy GeoIP is included with PHP.

MaxMind GeoIP2 Demo Page 允许您输入 IP 地址并返回以下数据:

  1. 坐标(lat/lon)
  2. 国家代码(2个字母的国家代码)
  3. ISP
  4. 位置(城市、州、国家、大洲)
  5. 地铁代码
  6. 组织
  7. 邮政编码(例如邮政编码)

链接:

  1. MaxMind's GeoIP2 and Legacy GeoIP product page
  2. GeoIP2 demo page (enter IPs and get results)
  3. GeoIP2-php SDK on Github
  4. GeoIP on PHP.net

还有很多其他服务。你可能想看看这个: Longitude and latitude value from IP address

Ricky,您可以使用 IP2Location 地理定位服务或数据库。它有两个版本:a) commercial and b) LITE. They have a developer 编程页面 API 在许多编程语言中。

有一个在线 demo 页面允许您使用单个 IP 地址获取以下数据:

  1. 位置(国家、州、城市)
  2. 坐标(经纬度)
  3. 海拔
  4. 邮政编码
  5. Phone(IDD 和区号)
  6. 域名
  7. ISP 名称
  8. 时区
  9. 连接速度
  10. Weather Station(气象站名称和代码)
  11. 移动运营商(mnc、mcc、品牌)
  12. 使用类型