我有一个庞大的 IP 地址列表。有没有办法使用R来获取这些地址对应的纬度和经度?
谢谢你。
拉维
这是一个有价值的商业过程,因此任何在线 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 包工作得非常简单,而且速度很快。您可能想要更新它附带的数据库文件,或者它可能是最新的。该软件包无需其他下载即可工作。
看看http://ipinfodb.com/或http://freegeoip.net/
他们提供 API 来从 IP 地址获取纬度/经度。(虽然不是 R 特定的)
geoPlot包有一个功能ipListLookup