Java库从ipaddress获取地理代码

时间:2012-07-02 17:36:04

标签: java geocoding

我的应用程序知道用户的IP地址。 我们需要确定用户的城市,州,国家和纬度&用户的经度。

是否有可以执行此操作的java库?

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

3 个答案:

答案 0 :(得分:4)

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中的“存储库”下添加以下存储库配置

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:2)

我在Scala中编写了一个使用IPInfoDB来获取地理位置的简单库。只要在类路径中包含scala-library.jar,也可以从Java中使用它。您需要来自IPInfoDB的API密钥。您可以获得JSON,raw或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,这是原始输出,然后可以解析。

另请参阅此问题Best way to get geo-location in Java