我有一个庞大的IP地址列表。有没有办法用R来获得这些地址的相应纬度和经度?
谢谢。
拉维
答案 0 :(得分:10)
这是一个有价值的商业流程,因此任何在线API查找都将是a)昂贵,或b)缓慢。
您最好的选择可能是下载MaxMind City IP数据库:
http://dev.maxmind.com/geoip/geolite
并获取GeoLite City - 其中的CSV版本包含两个文件,一个将IP地址块映射到位置ID,另一个将locationID映射到城镇和lat-long坐标。 e.g:
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链接来获得最佳性能。
OMG有人已经这样做了!!http://devblog.icans-gmbh.com/using-the-maxmind-geoip-api-with-r/
和OMG2 !!有人把它变成了一个包裹:
http://www.rforge.net/GeoIP/files/
请注意,最后两个解决方案使用数据库的本地副本,而不是对网页进行查询,因此不会受到限制。
我刚刚让GeoIP包非常简单,而且速度很快。您可能希望更新它附带的DB文件,或者它可能是最新的。该软件包不需要其他下载工作。
答案 1 :(得分:5)
查看 http://ipinfodb.com/ 或 http://freegeoip.net/
他们提供API以从IP地址获取lat / long。 (但不是R特定的)
答案 2 :(得分:4)
geoPlot package有一个函数ipListLookup