用于从 IP 地址获取地理编码的 Java 库

Posted

技术标签:

【中文标题】用于从 IP 地址获取地理编码的 Java 库【英文标题】:Java library to get geo-code from ipaddress 【发布时间】:2012-07-02 17:36:04 【问题描述】:

我的应用程序知道用户的 IP 地址。 我们需要识别用户所在的城市、州、国家和经纬度。

有没有可以做到这一点的java库?

如果没有,用于将 IP 地址转换为地理位置的算法或数据源是什么?

【问题讨论】:

【参考方案1】:

http://www.maxmind.com/app/developers 提供本地数据库和java 类来计算IP 地址的位置信息。我做了一些测试。结果似乎不错。

bbc.co.uk: 212.58.241.131 : 51.283295,-0.23330688;Tadworth,N7,United Kingdom,null
home: 76.126.242.196 : 37.369705,-122.0214;Sunnyvale,CA,United States,94086
google.com: 74.125.224.133 : 37.419205,-122.0574;Mountain View,CA,United States,94043
tcs.in: 202.71.129.225 : 28.666702,77.216705;Delhi,07,India,null
ebay.com: 66.135.205.13 : 37.280304,-121.956696;Campbell,CA,United States,95008
etrade.com: 12.153.224.22 : 34.091797,-84.2209;Alpharetta,GA,United States,30005
whitehouse.gov: 72.247.136.110 : 42.362595,-71.0843;Cambridge,MA,United States,02142

这是我使用的 junit 测试用例的链接,GeoLiteCityTest.java

MaxMind 提供 java 类,但不提供 jar。因此,我创建了一个可以构建代码并生成 jar 的 maven 项目。这是GitHub项目https://github.com/snambi/GeoIP

如果你需要在你的maven项目中使用这个库,添加如下依赖

<dependency>
   <groupId>org.geomind</groupId>
   <artifactId>geoip</artifactId>
   <version>1.2.8</version>
</dependency>

在 pom.xml 中的“repositories”下添加以下存储库配置

<repository>
   <id>geoip</id>
   <url>http://snambi.github.com/maven/</url>
</repository>

【讨论】:

【参考方案2】:

是的:http://www.maxmind.com/app/developers

它们提供 Java API(以及其他)。

【讨论】:

(不过,这只会让您经纬度到达城市级别。) 哇,为这个点赞,我如何为它添加书签,以便我回家时可以查看它?我一直在研究一个网络安全包,这将是很棒的搭配 @mnuss 感谢您的链接。知道他们如何将 IP 地址解码为位置吗? 我做了一些测试,它是一个很好的库。我会将调查结果作为答案发布。【参考方案3】:

我在 Scala 中编写了一个简单的库,它使用 IPInfoDB 来获取地理位置。只要您在类路径中包含 scala-library.jar,这也可以从 Java 中使用。您需要来自 IPInfoDB 的 API 密钥。您可以获取 JSON、原始或 XML 格式的输出。

代码和更多文档在我的Github 上,还有一个jar 可供下载。

这是一个 Java sn-p,它将获取具有“城市”分辨率的地理信息:

GeoIP geoip = new GeoIP("<API Key>");
//Note the $.MODULE$ syntax to refer to the case class in Scala.
System.out.println(geoip.getGeoRaw("<IP Address>", City$.MODULE$));

此示例输出OK;;0.0.0.0;US;UNITED STATES;DISTRICT OF COLUMBIA;WASHINGTON;20001;38.9048;-77.0354;-05:00,这是可以解析的原始输出。

也看到这个问题Best way to get geo-location in Java

【讨论】:

IPInfoDB 纯粹是一个 Web API。如果可以在应用程序中完成,那就太好了。上一个答案提供了一个很好的数据库。我会将详细信息作为单独的答案发布。感谢您提供另一个 *** 线程。它有很好的信息。将所有内容整合到一个地方会很好。

以上是关于用于从 IP 地址获取地理编码的 Java 库的主要内容,如果未能解决你的问题,请参考以下文章

前端页面获取访问者的IP地址经纬度和地理位置

前端页面获取访问者的IP地址经纬度和地理位置

JavaScript如何从IP地址获取地理位置? [复制]

从地理编码纬度和经度获取地址

在 python 和/或 django 中按 IP 进行地理编码

从 IP 地址获取地理位置