1. 概述

GeoIP 有收费版本 GeoIP2 和 GeoLite2 ,GeoLite2 为免费版本。

2. 安装GeoLite2数据库文件

  • 下载RPM包安装
# centos版本
wget https://github.com/maxmind/geoipupdate/releases/download/v4.2.2/geoipupdate_4.2.2_linux_amd64.rpm
# windows版本
# wget https://github.com/maxmind/geoipupdate/releases/download/v4.2.2/geoipupdate_4.2.2_windows_amd64.ziprpm -ivh geoipupdate_4.2.2_linux_amd64.rpm
  • 通过yum来安装
yum install -y geoipupdate
  • 修改GeoIP更新配置文件
    vim /etc/GeoIP.conf
AccountID 0
LicenseKey 000000000000
EditionIDs GeoLite2-ASN GeoLite2-City GeoLite2-Country

或者到 https://www.maxmind.com/en/my_license_key 申请 AccountID 和 LicenseKey。

3. 更新GeoLite2数据库

具体帮助可参考 man geoipupdate

  • 手动更新
geoipupdate -v
  • 自动更新(利用crontab)
# top of crontab
MAILTO=your@email.com30 2 * * 3#1 /usr/local/bin/geoipupdate
# end of crontab

在每个月第一个星期三自动执行 geoipupdate 命令,执行时间在凌晨2点30分。因为Maxmind是每月的第一个星期二更新IP库,所以我们选择延迟一点,避免时差引起误差。

  • 更新的数据库文件的存放位置
    可以使用 geoipupdate -d /path/to/db_file 指定数据库文件的存放位置。如果不指定则默认将数据库文件存放于 /usr/share/GeoIP。此外使用 -f 参数可以指定配置文件的位置。

4. 使用Java查询IP的地理信息

可参考官方MaxMind官方API:

  • http://maxmind.github.io/GeoIP2-java/doc/v2.13.0/
  • https://github.com/maxmind/GeoIP2-java
  • http://maxmind.github.io/GeoIP2-java/

一个例子
maven导入jar包

<dependency><groupId>com.maxmind.geoip2</groupId><artifactId>geoip2</artifactId><version>2.13.0</version>
</dependency>
package demo;import java.io.File;
import java.net.InetAddress;import com.maxmind.geoip2.DatabaseReader;
import com.maxmind.geoip2.model.CityResponse;
import com.maxmind.geoip2.record.City;
import com.maxmind.geoip2.record.Country;
import com.maxmind.geoip2.record.Location;
import com.maxmind.geoip2.record.Subdivision;public class GeoipTest {public static void main(String[] args) throws Exception {// GeoIP2-City 数据库文件mmdbFile database = new File("D:\\Tools\\GeoIP\\db\\GeoLite2-City.mmdb");// 创建 DatabaseReader对象DatabaseReader reader = new DatabaseReader.Builder(database).build();// 设置地址是使用IPv4还是IPv6
//      System.setProperty("java.net.preferIPv4Stack", "true");System.setProperty("java.net.preferIPv6Addresses", "true");// 设置IP地址
//      InetAddress ipAddress = InetAddress.getByName("39.130.56.106");InetAddress ipAddress = InetAddress.getByName("240C::6666");// 获取查询结果CityResponse response = reader.city(ipAddress);// 获取国家信息Country country = response.getCountry();System.out.println("国家code:" + country.getIsoCode());System.out.println("国家:" + country.getNames().get("zh-CN"));// 获取省份Subdivision subdivision = response.getMostSpecificSubdivision();System.out.println("省份code:" + subdivision.getIsoCode());System.out.println("省份:" + subdivision.getNames().get("zh-CN"));// 城市City city = response.getCity();System.out.println("城市code:" + city.getGeoNameId());System.out.println("城市:" + city.getName());// 获取城市Location location = response.getLocation();// 这里获得的经纬度是WGS84坐标系统下的坐标System.out.println("经度:" + location.getLatitude());System.out.println("维度:" + location.getLongitude());}
}

也可以在执行命令中设定:

java -Djava.net.preferIPv4Stack=true -cp .;classes/ my.main.className
或
java -Djava.net.preferIPv6Addresses=true -cp .;classes/ my.main.className

对于Tomcat服务器,可以在 catalina.bat 或者 catalina.sh 中增加如下环境变量即可:

SET CATALINA_OPTS=-Djava.net.preferIPv4Stack=true
或
SET CATALINA_OPTS=-Djava.net.preferIPv6Addresses=true

5. 关于地图坐标系

  • 我们常说的坐标系有哪些?

WGS84:为一种大地坐标系,也是目前广泛使用的GPS全球卫星定位系统使用的坐标系。
GCJ02:又称火星坐标系,是由中国国家测绘局制定的地理坐标系统,是由WGS84加密后得到的坐标系。
BD09:为百度坐标系,在GCJ02坐标系基础上再次加密。其中bd09ll表示百度经纬度坐标,bd09mc表示百度墨卡托米制坐标。

  • 百度地图使用什么坐标体系?

使用百度地图的服务,需使用BD09坐标。
若使用非BD09坐标、未经过坐标转换(非BD09转成BD09)直接叠加在地图上,地图展示位置会偏移,因此通过其他坐标(WGS84、GCJ02)调用服务时,需先将其他坐标转换为BD09。

  • 港澳台及海外,百度地图返回什么坐标?

中国地区(包括港澳台),百度地图开放平台的所有产品,都支持返回GCJ02坐标系、BD09坐标系。
海外地区,目前返回的是WGS84坐标。

  • 注意

互联网地图在国内必须至少使用GCJ02进行首次加密,不允许直接使用WGS84坐标下的地理数据,同时任何坐标系均不可转换为WGS84坐标。

  • 坐标系的转换

如果您想调用服务器端的坐标转换方法:请参考坐标转换API
如果您想在JS的前端网页中使用坐标转换功能:请参考JavaScript API坐标转换示例
如果您想在Android终端系统上使用坐标转换功能:请参考Android地图SDK坐标转换开发指南
如果您想在iOS的终端系统上使用坐标转换功能:请参考iOS地图SDK坐标转换开发指南

Java调用MaxMind GeoIP库查询IP地理信息相关推荐

  1. php查询ip归属地api接口_php调用新浪接口查询ip获取地理位置(ip归属地查询)

    php调用新浪接口查询ip获取地理位置(ip归属地查询) 发布于 2014-11-17 08:35:58 | 115 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: ...

  2. java调用solr的分词查询结果

    java调用solr的分词查询结果 https://www.jianshu.com/p/cb4cc151d23c

  3. 登录显示离线_使用emoji加密文本;nali—终端离线查询 IP 地理信息

    1.使用emoji加密文本. 原理是将文本进行AES加密,然后替换字符串,变身后的Emoji可以添加任意字符.文字,而不影响还原.因为各版本操作系统对Emoji支持不一,可能出现Emoji显示不全的问 ...

  4. Java调用so动态库方法

    在Java里面调用so动态库的方法 1.引入jna依赖 <dependency><groupId>net.java.dev.jna</groupId><art ...

  5. java调用C++ DLL库方法

    转载地址: https://www.cnblogs.com/xiaocainiao2hao/p/5619862.html 最近一个项目要开发网页端人脸识别项目,人脸识别的算法已经写好,是C++版,但是 ...

  6. java 调用企查查API查询企业信息

    效果图: 首先需要设置token,API中要求token的格式为key+Timespan+SecretKey组成的32位md5加密的大写字符串,所以我也附赠了MD5加密的工具类.token要放在htt ...

  7. java linux so_linux平台java调用so动态库

    实现将一个自己编写的Hello.c文件打包成libHello.so动态库,并通过gcc编译工具实现用一个test.c程序调用libHello.so和自定义头文件Hello.h的过程. 具体程序代码如下 ...

  8. Nali:一个离线查询 IP 地理信息和 CDN 提供商的终端利器

    什么是 Nali dig.nslookup.traceroute 等都是非常实用的网络调试工具,Nali 是一个可以自动解析这些工具 stdout 中的 IP 并附上所属 ISP 和地理信息,对这些已 ...

  9. 调用淘宝接口查询IP所在地

    #!/usr/bin/python # -*- coding: UTF-8 -*- import requests IP = raw_input("请输入:"); def chec ...

最新文章

  1. 华为八爪鱼自动驾驶云
  2. 02-NLP-01-python正则表达式
  3. 查询各个年级的平均分_二年级数学:期中考试前精心准备一下,会有意想不到的收获哦!...
  4. .net excel循环插数据_科普:1根、2根、4根内存条插在主板内存插槽的位置
  5. python手机自动化截图_python UI自动化截图对比
  6. cookies的存值问题
  7. 红帽安装Oracle步骤
  8. iPhone 9或于4月3日发布;复制粘贴之父Larry Tesler去世;Android 11开发者预览版来了!| 极客头条...
  9. anaconda 虚拟环境
  10. 万能五笔输入法下载|万能五笔输入法电脑版下载
  11. 2021-07-21
  12. Discuz!开发之模板制作CSS扩展规范与语法规范
  13. 第一章-问题求解策略-LA4234-Binary Clock
  14. 机器学习、深度学习、神经网络还傻傻分不清吗?
  15. 5 个免费的受欢迎的 SQLite 管理工具
  16. iptables火墙服务
  17. Vue +Element UI (饿了么UI) +Echarts 实现图表自适应配置
  18. JS实例、静态的属性和方法
  19. 虚幻引擎5 (UE5):开发你的前两个游戏
  20. 给自己写一个年终总结,新年快乐!

热门文章

  1. 国考证监会计算机考试真题
  2. 基于ESP8266与Blinker(点灯科技平台)的智能遥控器设计
  3. android 蓝牙传输文件,android-通过蓝牙发送文件
  4. PMP项目管理 | 项目质量管理
  5. C#使用GetPixel函数获取指定坐标点的rgb值
  6. Steam内存测试工具
  7. 随机的Lazy-Greedy:lazier than lazy greedy
  8. halcon中面到面的距离_halcon学习网
  9. Windows获取系统托盘图标
  10. Stimulsoft Reports 2023.2.1 Crack