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

4

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

是否有一个可以完成这个任务的Java库?

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

3个回答

5

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文件。因此,我创建了一个Maven项目,可以构建代码并生成JAR文件。这是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

(这将只为您提供到城市级别的纬度/经度。) - mnuss
哇,点赞这个!我该如何收藏它,以便回家后查看?我一直在开发一个网络安全包,这将是一个很棒的补充。 - Matt Westlake
@mnuss感谢链接。 你有什么想法,他们如何将IP地址解码为位置? - Nambi
我进行了一些测试,这是一个很好的库。我会将结果发布为答案。 - Nambi

2
我用Scala编写了一个简单的库,使用IPInfoDB获取地理位置信息。只要在类路径上包含scala-library.jar,它也可以从Java中使用。您需要从IPInfoDB获取API密钥。您可以以JSON、原始或XML格式获得输出。
代码和更多文档在我的Github上,还有一个可供下载的jar
这是一个Java片段,将以“城市”分辨率获取地理信息:
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,这是原始输出,需要进行解析。
此外,还可以参考这个问题 在Java中获取地理位置的最佳方法

IPInfoDB是一个纯粹的Web API。如果可以在应用程序内完成将会很好。之前的回答提供了一个很好的数据库。我会将详细信息发布为单独的答案。感谢提供另一个stackoverflow线程。它有很好的信息。将所有内容整合到一个地方会很好。 - Nambi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接