GeoLite2数据库是免费的IP地理定位数据库,但是存在一定的误差,通过IP转换成的经纬度与真实地址相比较还些许的偏差,但是GeoLite2可以离线使用,而且数据还具有丰富性。之前用纯真网下载下来的静态库,但是感觉有些笨重(需要搞一个本地的数据库,把数据先储存到数据库有兴趣的小伙伴可以玩玩,数据库脚本下载地址:https://download.csdn.net/download/weixin_37999518/84997601)
这里着重讲解的是通过GeoLite2-City.mmdb获取IP的信息的,
使用DatabaseReader.Builder读取GeoLite2数据库即可。
GeoLite2-City.mmdb静态文件下载地址:https://download.csdn.net/download/weixin_37999518/84997405
话不多说,直接上代码
引入依赖
<dependency>
<groupId>com.maxmind.geoip2</groupId>
<artifactId>geoip2</artifactId>
<version>2.15.0</version>
</dependency>
public class GeoLite2 {
public static File file = new File("");
private static GeoLite2 GetAddress;
/**
*
* @description: 获得国家
* @param reader GeoLite2 数据库
* @param ip ip地址
* @return
* @throws Exception
*/
public static String getCountry(DatabaseReader reader, String ip) throws Exception {
return reader.city(InetAddress.getByName(ip)).getCountry().getNames().get("zh-CN");
}
/**
*
* @description: 获得省份
* @param reader GeoLite2 数据库
* @param ip ip地址
* @return
* @throws Exception
*/
public static String getProvince(DatabaseReader reader, String ip) throws Exception {
return reader.city(InetAddress.getByName(ip)).getMostSpecificSubdivision().getNames().get("zh-CN");
}
/**
*
* @description: 获得城市
* @param reader GeoLite2 数据库
* @param ip ip地址
* @return
* @throws Exception
*/
public static String getCity(DatabaseReader reader, String ip) throws Exception {
return reader.city(InetAddress.getByName(ip)).getCity().getNames().get("zh-CN");
}
/**
*
* @description: 获得经度
* @param reader GeoLite2 数据库
* @param ip ip地址
* @return
* @throws Exception
*/
public static Double getLongitude(DatabaseReader reader, String ip) throws Exception {
return reader.city(InetAddress.getByName(ip)).getLocation().getLongitude();
}
/**
*
* @description: 获得纬度
* @param reader GeoLite2 数据库
* @param ip ip地址
* @return
* @throws Exception
*/
public static Double getLatitude(DatabaseReader reader, String ip) throws Exception {
return reader.city(InetAddress.getByName(ip)).getLocation().getLatitude();
}
public static void main(String[] args) throws Exception {
System.out.println(new Date().getTime());
// 创建 GeoLite2 数据库
///Users/apple/Desktop/GeoLite2-City.mmdb ,文件的存放路径
//Windows环境切换到自己的文件存放路径即可
File file = new File("/Users/apple/Desktop/GeoLite2-City.mmdb");
// 读取数据库内容
DatabaseReader reader = new DatabaseReader.Builder(file).build();
// 访问IP
String ip = "14.5.6.2";
String site = "国家:"+GetAddress.getCountry(reader, ip) + "\n省份:" + GetAddress.getProvince(reader, ip) + "\n城市:" + GetAddress.getCity(reader, ip)+ "\n经度:" + GetAddress.getLongitude(reader, ip)+ "\n纬度:" + GetAddress.getLatitude(reader, ip);
System.out.println(site);
System.out.println(new Date().getTime());
}
}
打印结果
|