3

我有一个庞大的 IP 地址列表。有没有办法使用R来获取这些地址对应的纬度和经度?

谢谢你。

拉维

4

3 回答 3

10

这是一个有价值的商业过程,因此任何在线 API 查找要么 a) 昂贵,要么 b) 缓慢。

您最好的选择可能是下载 MaxMind City IP 数据库:

http://dev.maxmind.com/geoip/geolite

并获取 GeoLite City - CSV 版本包含两个文件,一个将 IP 地址块映射到位置 ID,另一个将 locationID 映射到城镇和经纬度坐标。例如:

startIpNum,endIpNum,locId
"16777216","16777471","17"
"16777472","16777727","104084"
"16777728","16778239","49"

它告诉您第二个块范围内的 IP 位于:

104084,"CN","07","Fuzhou","",26.0614,119.3061,,

因此,您需要做的就是编写一些 R 代码以读取这些数据库,将您拥有的点式 IP 地址编码为此处使用的形式(可能是 32 位整数)并进行几次查找。您可以通过使用 data.table 获得最佳性能,或者将其全部粘贴到 SQL 数据库中,或者使用他们的 C API 将一些 C 代码写入文件的二进制版本并通过 Rcpp 或其他魔法将其与 R 链接。

天哪,有人已经这样做了!!

http://devblog.icans-gmbh.com/using-the-maxmind-geoip-api-with-r/

和OMG2!有人把它做成了一个包:

http://www.rforge.net/GeoIP/files/

请注意,这最后两个解决方案使用数据库的本地副本,而不是对网页进行查询,因此不会受到限制。

我刚刚让 GeoIP 包工作得非常简单,而且速度很快。您可能想要更新它附带的数据库文件,或者它可能是最新的。该软件包无需其他下载即可工作。

于 2013-04-22T07:27:52.680 回答
5

看看http://ipinfodb.com/http://freegeoip.net/

他们提供 API 来从 IP 地址获取纬度/经度。(虽然不是 R 特定的)

于 2013-04-22T05:49:11.307 回答
4

geoPlot有一个功能ipListLookup

于 2013-04-22T05:50:54.080 回答