代码之家  ›  专栏  ›  技术社区  ›  yarek

如何使用maxmind从ip地址获取经纬度?

  •  1
  • yarek  · 技术社区  · 7 年前

    我使用geoip php扩展已经有一段时间了。 这个扩展没有像以前那样提供纬度和经度。

    查看MaxMind网站,我可以看到:

    注:经过仔细考虑,考虑到客户 反馈,我们决定不删除经纬度 Geolite2数据库中的坐标。我们正在 查看geolite2和geoip数据库中使用的坐标 以确保不存在误用的风险。

    是否有其他方法(或免费的替代方法)从IP地址获取经纬度?

    3 回复  |  直到 7 年前
        1
  •  4
  •   Ilan P    7 年前

    有免费服务 http://ip-api.com/ 你可以用的。

    向发出获取请求 http://ip-api.com/json/111.222.333.444/ (在您希望查找的末尾附加您自己的IP)

    结果如下:

    {
        "status": "success",
        "country": "COUNTRY",
        "countryCode": "COUNTRY CODE",
        "region": "REGION CODE",
        "regionName": "REGION NAME",
        "city": "CITY",
        "zip": "ZIP CODE",
        "lat": LATITUDE,
        "lon": LONGITUDE,
        "timezone": "TIME ZONE",
        "isp": "ISP NAME",
        "org": "ORGANIZATION NAME",
        "as": "AS NUMBER / NAME",
        "query": "IP ADDRESS USED FOR QUERY"
    }
    

    我相信这是您询问的数据类型;lat/lon是这个api的标准返回。注意不要每分钟执行超过150个请求,否则它们将禁止您的主机发出进一步的请求。

        2
  •  1
  •   Michael C.    7 年前

    您可以使用免费的ip2location lite db5和php库。

    php库 https://www.ip2location.com/developers/php

    IP2位置Lite DB5 https://lite.ip2location.com/database/ip-country-region-city-latitude-longitude

    <?php
    require_once 'IP2Location.php';
    
    /*
        Default file I/O lookup
    */
    $db = new \IP2Location\Database('./databases/IP-COUNTRY-SAMPLE.BIN', \IP2Location\Database::FILE_IO);
    
    $records = $db->lookup('8.8.8.8', \IP2Location\Database::ALL);
    
    echo '<pre>';
    echo 'IP Number             : ' . $records['ipNumber'] . "\n";
    echo 'IP Version            : ' . $records['ipVersion'] . "\n";
    echo 'IP Address            : ' . $records['ipAddress'] . "\n";
    echo 'Country Code          : ' . $records['countryCode'] . "\n";
    echo 'Country Name          : ' . $records['countryName'] . "\n";
    echo 'Region Name           : ' . $records['regionName'] . "\n";
    echo 'City Name             : ' . $records['cityName'] . "\n";
    echo 'Latitude              : ' . $records['latitude'] . "\n";
    echo 'Longitude             : ' . $records['longitude'] . "\n";
    echo 'Area Code             : ' . $records['areaCode'] . "\n";
    echo 'IDD Code              : ' . $records['iddCode'] . "\n";
    echo 'Weather Station Code  : ' . $records['weatherStationCode'] . "\n";
    echo 'Weather Station Name  : ' . $records['weatherStationName'] . "\n";
    echo 'MCC                   : ' . $records['mcc'] . "\n";
    echo 'MNC                   : ' . $records['mnc'] . "\n";
    echo 'Mobile Carrier        : ' . $records['mobileCarrierName'] . "\n";
    echo 'Usage Type            : ' . $records['usageType'] . "\n";
    echo 'Elevation             : ' . $records['elevation'] . "\n";
    echo 'Net Speed             : ' . $records['netSpeed'] . "\n";
    echo 'Time Zone             : ' . $records['timeZone'] . "\n";
    echo 'ZIP Code              : ' . $records['zipCode'] . "\n";
    echo 'Domain Name           : ' . $records['domainName'] . "\n";
    echo 'ISP Name              : ' . $records['isp'] . "\n";
    echo '</pre>';
    ?>
    
        3
  •  1
  •   camt    7 年前

    他们最近已经改变了关于删除数据的想法,所以它将在现有的数据框中再次使用。他们只是在重新部署lat/lon数据之前验证数据。

    注:经过仔细考虑,考虑到客户 反馈,我们决定不删除经纬度 来自Geolite2数据库的坐标。*我们正在处理 查看geolite2和geoip数据库中使用的坐标 以确保不存在误用的风险。

    参考: https://dev.maxmind.com/geoip/geoip2/geolite2/

    [编辑]因此,要根据上述内容进行实际响应,您将能够继续进行,而无需实现新的库/服务