Java通过GeoLite2-City.mmdb进行IP信息查询地理定位和经纬度
GeoLite2可以离线使用,而且数据还具有丰富性。之前用纯真网下载下来的静态库,但是感觉有些笨重(需要搞一个本地的数据库,把数据先储存到数据库有兴趣的小伙伴可以玩玩)数据库脚本下载地址:下载地址,包含50多万个公网IP和对应的城市,运营商(不建议,读取时间稍微有点长)
这里着重讲解的是通过GeoLite2-City.mmdb获取IP的信息的,
使用DatabaseReader.Builder读取GeoLite2数据库即可。
GeoLite2-City.mmdb静态文件下载地址:下载地址
话不多说,直接上代码
引入依赖
<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();// 访问IPString 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());}
}
打印结果
Java通过GeoLite2-City.mmdb进行IP信息查询地理定位和经纬度相关推荐
- IP信息查询API接口,免费好用
1.前言 IP信息查询接口,能实现获取访问者当前ip信息和指定信息ip信息.这个接口的主要特点是,能获取ip地址所在省市信息和运营商信息. 2.接口明细 注意:app_id和app_secret是临时 ...
- 基于ip的手机地理定位
现在lbs服务比较火,基本上都需要定位用户的地理信息,用户地理信息一般是通过gps来定位实现的,那么假如 用户的gps坏了,或者没有开启,那么怎么获得用户的地理信息的呢?替代的办法就是可以获得手机真实 ...
- java 豆瓣_java 语言实现豆瓣电影信息查询
豆瓣上面有很多电影,有时候要查看个电影信息,去豆瓣搜下还是很方便的,但是如何通过接口的形式来查看豆瓣电影,这对于很多网站.app其实是非常实用的功能,这里笔者附上一个java实现的豆瓣电影信息获取的代 ...
- 豆瓣电影java代码_java语言实现豆瓣电影信息查询
正版现货疯狂java讲义第5李刚教材 66元 包邮 (需用券) 去购买 > 豆瓣上面有很多电影,有时候要查看个电影信息,去豆瓣搜下还是很方便的,但是如何通过接口的形式来查看豆瓣电影,这对于很多网 ...
- 【Java】StudentsInfoQuery(简单的学生信息查询系统)
周末作业,写的草草,BUG很多,直接贴代码. 基于文本文档的,不是数据库. 功能极其有限,也没有用WindowBuilder. 教师查询窗口 package wh.one;import java.aw ...
- 工具及方法 - 查询IP信息
IP信息查询网站: Comprehensive IP address data, IP geolocation API and database - IPinfo.io 这个网站提供最稳定.准确和深入 ...
- 简单航班查询系统java_基于jsp的航班信息查询-JavaEE实现航班信息查询 - java项目源码...
基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的航班信息查询, 该项目可用各类java课程设计大作业中, 航班信息查询的系统架构分为前后台两部分, 最终实现在线上 ...
- Android中由IP地址查询经纬度坐标的实例
大家都知道,根据IP地址就可以知道它所在的具体位置,在Android中同样可以由IP地址得到它的位置,即具体的地理经纬度坐标. 本文就直接以代码的方式演示如何根据IP地址查询地理经纬度坐标位置,下面的 ...
- 基于android的旅游信息查询系统APP(ssm+uinapp+Mysql)
网络的广泛应用给生活带来了十分的便利.所以把旅游信息查询管理与现在网络相结合,利用java技术建设基于安卓的旅游信息查询系统,实现旅游信息查询的信息化.则对于进一步提高旅游信息查询管理发展,丰富旅游信 ...
- Android根据IP获取地理位置,精确到经纬度
摘要:每一个联网的设备都有一个IP地址,移动设备也不例外,如何定位Android手机当前的地理位置呢?很简单,我们依然可以利用 IP地址来获取Android手机的当前位置,可以精确到经纬度. 本文就直 ...
最新文章
- dubbo2.5-spring4-mybastis3.2-springmvc4-mongodb3.4-redis3(十)之Spring MVC中使用 Swagger2 构建Restful API...
- Rolling element bearing diagnostics using the Case Western Reserve University data-学习笔记
- python 复制文件夹内容 并结构一致_Python-移动和覆盖文件和文件夹
- mysql怎么按年份分组_mysql - MYSQL按ID分组,但根据最近的年份进行拉取 - SO中文参考 - www.soinside.com...
- linux 添加网关 多张,linux – 更改默认网关,多个NIC
- 词嵌入:探索解释和利用
- 01_Redis基础
- 谷歌不支持调用摄像头麦克风_谷歌突然推出Android 11开发者预览版 新版带来部分新功能和改进...
- 想创业就去创,愿意打工就去上班打工,每个人都有每个人的活法
- 利用logrotate系统工具切割tomcat日志
- Win7性能优化:解决多核处理器兼容问题
- 设置网页地址栏小图标
- MAC PHP集成环境安装MAMP
- Axure知识点:如何制作输入关键词模糊搜索功能?
- 开发一个APP系统软件需要多少钱及需要多长开发周期
- android banner指示器高度,Android 广告轮播 -ConvenientBanner 指示器大小、bottomMargin,leftMarfin的修改。...
- 汉化+破解Substance Painter 2019 macv2019.1.0图文展示
- Mogafx英美对有望结束连续两日的跌势
- 【贪心算法】加勒比海盗船——最优装载问题
- 公司开除并在离职证明上贬低被程序员怒怼,网友:总有耿直的员工