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

之前我们介绍过通过 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"

}

}

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/355664.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机专业英语第二版张强华翻译_计算机语言发展的三个阶段,机器语言、汇编语言与高级语言...

在如今信息发达的时代,科技日新月异,计算机和Internet网络的发展也成为人们日常生活的重要部分。学习一两门计算机编程语言也如当初学习英文一样的火热,随着人工智能AI和云计算的不断发展,Python语言和Scala语言已经成为这两个领域…

使用Apache Drill REST API通过Node构建ASCII仪表板

Apache Drill有一个隐藏的瑰宝:易于使用的REST接口。 该API可用于查询,分析和配置Drill引擎。 在此博客文章中,我将说明如何使用Brilled Contrib使用Drill REST API创建ascii仪表板。 ASCII仪表盘如下所示: 先决条件 Node.js …

影子场vs.属性访问器接口第2轮

如果你们还没有注意到Dirk Lemmerman和我之间的(轻松) 对决 ,那么让我快速提及一下我们是如何做到这一点的。 首先,Dirk创建了JavaFX技巧23:“ 为属性保存内存阴影字段 ”,以帮助应用程序开发人员在使用Jav…

Lowest Common Ancestor of a Binary Search Tree a Binary Tree

235. Lowest Common Ancestor of a Binary Search Tree 题目链接:https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-search-tree/#/description 题目大意:给定一棵二叉查找树和两个节点p和q,要求返回这两个节点的第一个公共…

controller调用另一个controller中的方法 获取返回值_必须掌握!你知道 Spring 中运用的 9 种设计模式吗 ?...

Spring中涉及的设计模式总结,在面试中也会经常问道 Spring 中设计模式的问题。本文以实现方式、实质、实现原理的结构简单介绍 Sping 中应用的 9 种设计模型,具体详细的刨析会在后面的文章发布,话不多说,来个转发、在看、收藏三连…

我个人的CRUD故事-或我如何来到CUBA平台

在此博客文章中,我想介绍一下我如何使用CUBA平台以及此工具的好处。 在我年轻的“业务应用程序开发”历史上,我将深入探讨不同的阶段,只为您提供一些背景知识。 因此,让我们从如何进入典型的CRUD应用程序开始,以帮助非…

java 不定参数方法_java中不定长参数的使用方法

java中不定长参数的使用方法不定长参数方法的语法如下:返回值 方法名(参数类型...参数名称)在参数列表中使用“...”形式定义不定长参数,其实这个不定长参数a就是一个数组,编译器会将(int...a)这种形式看作是(int[] a)的形式。示例&#xff1…

光盘刻录只允许读取不能拷贝_原来 8 张图,就可以搞懂「零拷贝」了

作者 | 小林coding来源 | 小林coding(ID:CodingLin)前言磁盘可以说是计算机系统最慢的硬件之一,读写速度相差内存 10 倍以上,所以针对优化磁盘的技术非常的多,比如零拷贝、直接 I/O、异步 I/O 等等,这些优化的目的就是…

纯java分布式内存数据库_最新Java岗面试清单:分布式+Dubbo+线程+Redis+数据库+JVM+并发...

最近可能有点闲的慌,没事就去找面试面经,整理了一波面试题。我大概是分成了Java基础、中级、高级,分布式,Spring架构,多线程,网络,MySQL,Redis缓存,JVM相关,调…

c++ 多核cpu序列号_详解CPU几个重点基础知识

作者 | 骏马金龙责编 | 阿秃关于CPU和程序的执行1、程序的运行过程,实际上是程序涉及到的、未涉及到的一大堆的指令的执行过程。当程序要执行的部分被装载到内存后,CPU要从内存中取出指令,然后指令解码(以便知道类型和操作数,简单…

java log4j 写日志_Java log4j同时写入文本日志和数据库日志

版权声明:转载原创文章请以超链接形式请注明原文章出处,尊重作者,尊重原创!恰饭广告Log4jUtil.javaimport org.apache.log4j.Logger;import org.apache.log4j.MDC;public class Log4jUtil {private static Logger logger Logger.…

订单生产计划表范本_工厂生产管理为什么需要ERP软件?

对于工厂来说,规模大了,管理问题也就随之多了,在工厂生产流程中,我们常见的一些生产现象,比如生产计划表徒具形式、各生产部门半成品堆积、生产计划达标率低、前后工序原材料或半成品衔接不上、经常追加或取消生产计划…

P1266 速度限制

速度限制 洛谷链接 题目大意: 在一个城市中,每条道路有限速和长度,通过一条道路的时间为这条道路的长度除以限制的速度,有的道路不知道限速为多少,那么就按现在的速度走这条路,找出从第一个点到目标点的最短…

mysql递归查询所有上下节点_非递归打印二叉树的所有路径,保存父节点和孩子节点到底有啥差别...

题目解读题目要求输出二叉树的所有路径(字符串形式),乍一看很简单,不就是二叉树的遍历嘛!其实不然,首先,我们用非递归的方式(C)解决这道题(递归在产品代码中是不允许使用的,其次定位 bug 的时候非常困难)。…

发现大量Java原语集合处理

在阅读博客文章5减少Java垃圾收集开销的技巧时 ,我想起了一个名为Trove的小型Java收集库,该库“为Java提供了高速的常规和原始收集”。 我对应用Trove允许原始类型的集合而不是要求集合中的元素成为完整的引用对象的能力特别感兴趣。 我在这篇文章中会更…

nginx配置多个server_Nginx基本属性配置详解

. Nginx服务的基本配置1.1 用于调试进程和定位问题的配置项是否以守护进程的方式运行nginx# 默认ondaemon on|off;是否以master/worker方式工作# 默认on,指定了是否以master-worker进程的方式运行,如果设置为off,那么所有的请求将只会由maste…

数据增长率怎么算_20年老股民告诉你5个数据可轻松算出股价是否高估

自从开通自媒体以来,有很多朋友问我该如何正确判断股票的合理价格呢?说得太专业,可能很多新入市的股民朋友看不懂。那有没有一种估值方法通俗易懂呢?说实话,真有点为难我了。我首先想到了最简单的PE估值法,…

ad 单点登录 java 访问权限_AD 单点登录以及windows认证详细说明

上篇博客我谈到了一些关于ASP.NET Forms身份认证方面的话题,这次的博客将主要介绍ASP.NET Windows身份认证。Forms身份认证虽然使用广泛,不过,如果是在 Windows Active Directory 的环境中使用ASP.NET, 那么使用Windows身份认证也…

index加载显示servlet数据_[WEB篇]-JavaWeb基础与应用-02-Servlet开发

JavaWeb基础与应用2.Servlet开发Servlet是sun公司提供的一门用于开发动态web资源的技术。Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤:编写一个Java类&…

element ui后台html_GitHub上10个开源且优秀的后台管理系统UI面板

作者:SevDotwww.jianshu.com/p/3bc7404af887Web 开发中几乎的平台都需要一个后台管理,但是从零开发一套后台控制面板并不容易,幸运的是有很多开源免费的后台控制面板可以给开发者使用,那么有哪些优秀的开源免费的控制面板呢&#…