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,一经查实,立即删除!

相关文章

Leetcode:search_insert_position

一、 题目 给定一个数组和要插入数的大小。求插入的位置。 二、 分析 太水&#xff0c;直接扫描。过……. class Solution { public:int searchInsert(int A[], int n, int target) {for(int i0;i<n;i) {if(target<A[i]) {return i;} }return n;} };转载于:https…

java mvc 面试题_2018年java技术面试题整理

1、servlet执行流程客户端发出http请求&#xff0c;web服务器将请求转发到servlet容器&#xff0c;servlet容器解析url并根据web.xml找到相对应的servlet&#xff0c;并将request、response对象传递给找到的servlet&#xff0c;servlet根据request就可以知道是谁发出的请求&…

交叉编译指定运行时库路径_运行时vs编译时类路径

交叉编译指定运行时库路径这确实应该是一个简单的区别&#xff0c;但是我一直在回答有关Stackoverflow的许多类似问题&#xff0c;并且经常有人误解此事。 那么&#xff0c;什么是类路径&#xff1f; 应用程序所需的一组所有类&#xff08;以及带有类的jar&#xff09;的集合。…

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

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

java netty html_源码时代JAVA干货分享|带你用Netty框架实现WebSocket通信

功能介绍Netty开发服务器HTML实现客户端实现服务端与客户端时实时交互开发步骤1.导包io.nettynetty‐all5.0.0.Alpha22.工程配置文件&#xff1a;NettyConfig/*** 这里放的是工程中相应的配置*/public class NettyConfig{/*** 用于存储每一个客户端接入进来时的channel对象*/pu…

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

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

mysql+cast+0x_mysql cast与convert 函数的用法

MySQL 的CAST()和CONVERT()函数可用来获取一个类型的值&#xff0c;并产生另一个类型的值。两者具体的语法如下&#xff1a;CAST(value as type);CONVERT(value, type);就是CAST(xxx AS 类型), CONVERT(xxx,类型)。可以转换的类型是有限制的。这个类型可以是以下值其中的一个&a…

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

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

java wmi远程桌面服务器_WMI实现远程监控多台windows服务器

简介WMI简介&#xff1a;WMI(Windows Management Instrumentation,Windows 管理规范)是一项核心的 Windows 管理技术&#xff1b;用户可以使用 WMI 管理本地和远程计算机。WQL简介&#xff1a;WQL就是WMI中的查询语言&#xff0c;WQL的全称是WMI Query Language&#xff0c;简称…

如何:在Spring中使用@Conditional和Condition注册组件

Spring中的Profile批注可以用于任何自动检测候选的Spring组件&#xff08;例如&#xff0c; Service Component&#xff0c; Service Component &#xff0c; Service Configuration等&#xff09;。 Profile批注接受单个配置文件或一组必须是活动的配置文件&#xff0c;以使带…

java joda_java-Jodatime的开始时间和结束时间

对于那些来这里寻找“ js-joda”答案的人&#xff0c;您有两种选择&#xff0c;具体取决于要完成的工作选项1&#xff1a;您希望同一时区的一天开始由于您已选择根据与时区相关的即时时间来计算时间&#xff0c;因此应使用ZonedDateTime&#xff1a;import { ZonedDateTime, Lo…

Lowest Common Ancestor of a Binary Search Tree a Binary Tree

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

perl java_与Perl相比Java性能问题

我已经编写了一个Perl代码来处理大量CSV文件并获取输出,这需要0.8326秒才能完成.my $opname $ARGV[0];my files find . -name "*${opname}*.csv";mtime -10 -type f;my %hash;foreach my $file (files) {chomp $file;my $time $file;$time ~ s/.*\~(.*?)\..*/$1/…

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

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

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

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

MySQL分库分表环境下全局ID生成方案

转自&#xff1a;https://my.oschina.net/u/142836/blog/174465 在大型互联网应用中&#xff0c;随着用户数的增加&#xff0c;为了提高应用的性能&#xff0c;我们经常需要对数据库进行分库分表操作。在单表时代&#xff0c;我们可以完全依赖于数据库的自增ID来唯一标识一个用…

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

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

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

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

如何:带有Thymeleaf和Spring Boot的Java 8日期和时间

如果您碰巧使用Spring Boot和Thymeleaf&#xff0c;并且需要在视图中格式化Java 8 Date&#xff06;Time对象&#xff0c;则可以使用thymeleaf-extras-java8time –用于Java 8 Date&#xff06;Time API的Thymeleaf模块。 向现有的基于Maven或Gradle的Spring Boot项目中添加th…

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

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