GeoLite2 Java根据IP获得城市、经纬度

avatar 2020年03月17日19:59:47 3 1513 views
之前我们介绍过通过 qqwry.dat 根据IP获得所属城市和运营商信息。但是这个 qqwry.dat 已经太久没更新了,数据有些不准确,而且现在我们有个需求就是想获取某个IP所在的经纬度。 这里我们可以使用 GeoLite2,这个是国外开源的一个库,需要在其官网注册才能下载。 下面介绍基本使用。  

一、注册账号

GeoLite2 地址:https://dev.maxmind.com/geoip/geoip2/geolite2/ 可以访问上面链接,下面有一个注册按钮,需要填写注册信息,然后会收到一个邮件,设置密码,账号为邮箱。注册完成后,点击登录。    

二、下载库文件

下载页面地址:https://www.maxmind.com/en/accounts/243575/geoip/downloads   因为我需要获取城市信息,所以选择第三个,压缩包大概30MB,解压后里面的 mmdb 有60MB  

三、Demo 实践

官方文档地址:https://dev.maxmind.com/geoip/geoip2/downloadable/ Java的地址:https://maxmind.github.io/GeoIP2-java/   我这里就介绍Java的应用 1、添加依赖
<dependency>
<groupId>com.maxmind.geoip2</groupId>
<artifactId>geoip2</artifactId>
<version>2.13.1</version>
</dependency>
或者自行下载jar包   2、Demo
import com.maxmind.geoip2.DatabaseReader;
import com.maxmind.geoip2.model.CityResponse;

import java.io.File;
import java.io.IOException;
import java.net.InetAddress;

/**
 * @author 言曌
 * @date 2020/3/17 3:23 下午
 */

public class Demo {

    public static void main(String[] args) {

        // IP V4
        String ip = "113.87.18.136";
        // IP V6 也是可以的
        DatabaseReader reader = null;
        CityResponse response = null;
        try {
            File database = new File("/Users/liuyanzhao/code/sensboot/src/main/java/GeoLite2-City.mmdb");
            // 读取数据库内容
            reader = new DatabaseReader.Builder(database).build();
            InetAddress ipAddress = InetAddress.getByName(ip);
            // 获取查询结果
            response = reader.city(ipAddress);
            System.out.println(response);
        } catch (Exception e) {
            e.printStackTrace();

        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();

                }
            }

        }
    }
}
  3.结果
{
	"city": {
		"geoname_id": 1795565,
		"names": {
			"de": "Shenzhen",
			"ru": "Шэньчжэнь",
			"pt-BR": "Shenzhen",
			"ja": "深セン市",
			"en": "Shenzhen",
			"fr": "Shenzhen",
			"zh-CN": "深圳市",
			"es": "Shenzhen"
		}
	},
	"continent": {
		"code": "AS",
		"geoname_id": 6255147,
		"names": {
			"de": "Asien",
			"ru": "Азия",
			"pt-BR": "Ásia",
			"ja": "アジア",
			"en": "Asia",
			"fr": "Asie",
			"zh-CN": "亚洲",
			"es": "Asia"
		}
	},
	"country": {
		"geoname_id": 1814991,
		"is_in_european_union": false,
		"iso_code": "CN",
		"names": {
			"de": "China",
			"ru": "Китай",
			"pt-BR": "China",
			"ja": "中国",
			"en": "China",
			"fr": "Chine",
			"zh-CN": "中国",
			"es": "China"
		}
	},
	"location": {
		"accuracy_radius": 5,
		"latitude": 22.5333,
		"longitude": 114.1333,
		"time_zone": "Asia/Shanghai"
	},
	"maxmind": {},
	"postal": {},
	"registered_country": {
		"geoname_id": 1814991,
		"is_in_european_union": false,
		"iso_code": "CN",
		"names": {
			"de": "China",
			"ru": "Китай",
			"pt-BR": "China",
			"ja": "中国",
			"en": "China",
			"fr": "Chine",
			"zh-CN": "中国",
			"es": "China"
		}
	},
	"represented_country": {
		"is_in_european_union": false
	},
	"subdivisions": [{
		"geoname_id": 1809935,
		"iso_code": "GD",
		"names": {
			"en": "Guangdong",
			"fr": "Province de Guangdong",
			"zh-CN": "广东"
		}
	}],
	"traits": {
		"ip_address": "113.87.18.136",
		"is_anonymous": false,
		"is_anonymous_proxy": false,
		"is_anonymous_vpn": false,
		"is_hosting_provider": false,
		"is_legitimate_proxy": false,
		"is_public_proxy": false,
		"is_satellite_provider": false,
		"is_tor_exit_node": false,
		"network": "113.87.18.0/23"
	}
}
  城市获取没问题,经纬度会有些偏差,我们通常想让这个经纬度为这个城市的市中心,这里实现不了。  
  • 微信
  • 交流学习,有偿服务
  • weinxin
  • 博客/Java交流群
  • 资源分享,问题解决,技术交流。群号:590480292
  • weinxin
avatar

发表评论

avatar 登录者:匿名
您需要登录才能评论,可以选择注册或者QQ快速登录

     

已通过评论:1   待审核评论数:0
  1. avatar Scott

    您好,我想詢問,如果我Centos7要使用,應該如何安裝呢? 感謝您

    • avatar 言曌

      这个跟操作系统关系不大

      • avatar Scott

        您好,主要是我是使用Linux Centos7 环境 最主要是我不清楚解压缩包应该要放在哪个路径底下 以及 Demo 实践那边的Demo 这步骤是如何去做的