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

本文介绍了如何利用GeoLite2库在Java中获取IP地址对应的城市、经纬度等信息,包括注册MaxMind账号、下载mmdb数据库文件、添加Java依赖以及展示基本的查询代码示例。
摘要由CSDN通过智能技术生成

之前我们介绍过通过 qqwry.dat 根据IP获得所属城市和运营商信息。但是这个 qqwry.dat 已经太久没更新了,数据有些不准确,而且现在我们有个需求就是想获取某个IP所在的经纬度。

这里我们可以使用 GeoLite2,这个是国外开源的一个库,需要在其官网注册才能下载。

下面介绍基本使用。

一、注册账号

GeoLite2 地址:https://dev.maxmind.com/geoip/geoip2/geolite2/

可以访问上面链接,下面有一个注册按钮,需要填写注册信息,然后会收到一个邮件,设置密码,账号为邮箱。注册完成后,点击登录。

05e2107399d0c51b6f35ad6b7db0fc58.png

二、下载库文件

下载页面地址:https://www.maxmind.com/en/accounts/243575/geoip/downloads

e063d4edf8bcd03cf80db24155c0df20.png

因为我需要获取城市信息,所以选择第三个,压缩包大概30MB,解压后里面的 mmdb 有60MB

0f9889b26cee01e3a1d2598a1809fd18.png

三、Demo 实践

官方文档地址:https://dev.maxmind.com/geoip/geoip2/downloadable/

Java的地址:https://maxmind.github.io/GeoIP2-java/

我这里就介绍Java的应用

1、添加依赖

com.maxmind.geoip2

geoip2

2.13.1

或者自行下载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"

}

}

城市获取没问题,经纬度会有些偏差,我们通常想让这个经纬度为这个城市的市中心,这里实现不了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值