- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 MaxMind 的 GeoLite City 数据库将 ip 地址转换为纬度/经度组合,并根据坐标找到最近的城市。
首先,我使用(这是 Java)将 ip 转换为 int:
String ip = "24.123.181.38";
private int ipToInt(String ip) {
String[] nums = ip.split("\\.");
double a = Double.valueOf(nums[0]);
double b = Double.valueOf(nums[1]);
double c = Double.valueOf(nums[2]);
double d = Double.valueOf(nums[3]);
double answer = (a*Math.pow(256, 3))+(b*Math.pow(256, 2))+(c*256)+d;
return (int) answer;
}
//Returns 410760486
我验证了我正在使用众多在线计算器之一正确执行计算,将 ip 转换为整数。
然后我使用 MySQL 查询获取纬度/经度并执行距离检查。这种距离检查似乎对我做的其他邮政编码工作很有效。
SET @ip := 410760486, @dist := 10;
SELECT @orig_lat := ip_locations_latitude, @orig_lon := ip_locations_longitude FROM ip_locations WHERE @ip BETWEEN ip_locations_start_ip AND ip_locations_end_ip;
SELECT *,
(3956 * 2 * ASIN(SQRT( POWER(SIN((@orig_lat - abs(latitude)) * pi()/180 / 2),2) + COS(@orig_lat * pi()/180 ) * COS(abs(latitude) * pi()/180) * POWER(SIN((@orig_lon - longitude) * pi()/180 / 2), 2) )))
AS distance
FROM geolite_locations
HAVING distance < @dist ORDER BY distance LIMIT 0, 1;
我正在使用位于北卡罗来纳州夏洛特的 IP 地址进行测试。结果返回北卡罗来纳州康科德(我住在这个地区,康科德非常接近,但仍然不是正确的城市)。我已经在德克萨斯州、加利福尼亚州、华盛顿州等地的其他 ips 上进行了测试,除了少数几个似乎都返回了类似的结果……接近,但不准确。
Max Minds 网站指出付费版本比免费版本更准确,但应该有这么大的不同吗?或者我在查询时做错了什么?使用付费版本的在线演示在 Max Minds 网站上测试 ip 会返回正确的城市,但我无法测试他们的免费数据库。如果免费版本非常不准确,我不反对为数据库付费,但我宁愿在没有验证数据准确得多的情况下不这样做。
附带说明,请不要对 API 提出任何建议。我更愿意在本地查询数据,因为它所涉及的项目会非常频繁地访问数据库,而 API 调用会使它变得太慢。
最佳答案
通常,IP 位置是向客户提供服务的互联网服务提供商的位置。因此,在您的情况下,您的 ISP 很可能位于北卡罗来纳州康科德,因此数据库结果是正确的。通常,除非与其他信息相结合,否则此类定位不提供精确定位。
关于mysql - MaxMind 免费 GeoLite City 数据库不可靠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18425954/
我们一直在使用 awstats 和 Maxmind 的 GeoLite City(现为 GeoLite Legacy City)数据库来获取非营利组织的网站统计数据。 未知城市(数据库中未找到的城市)
我正在尝试使用 MaxMind 的 GeoLite City 数据库将 ip 地址转换为纬度/经度组合,并根据坐标找到最近的城市。 首先,我使用(这是 Java)将 ip 转换为 int: Strin
我正在尝试编写一个 Map Reduce 程序,我正在尝试使用 GeoLite 数据库来解析 IP 地址的位置。我不确定如何将数据库文件传递给映射器以及要使用哪些依赖项? 最佳答案 在 Map Red
我下载了 GeoLite City 数据库,我可以通过以下方式使用 Java 访问该数据库以获取 IP 地址的相应位置信息: File file = new File("C:\\GeoLiteCity
我是一名优秀的程序员,十分优秀!