【发布时间】:2017-09-17 18:07:13
【问题描述】:
我正在使用 R 从数据框中提取纬度和经度,然后使用反向地理编码获取地址。
我这里有一些玩具数据:
latitude <- c(40.84935,40.76306,40.81423,40.63464,40.71054)
longitude <- c(-73.87119,-73.90235,-73.93443,-73.88090,-73.83765)
x = data.frame(latitude,longitude)
我编写了一个函数来进行实际的地理编码:
require(ggmap)
get_address <- function(df){
long <- as.numeric(df$longitude)
lat <- as.numeric(df$latitude)
revgeocode(c(long,lat))
}
然后申请:
apply(x,1,get_address)
使用system.time(),这大约需要一秒钟。但是,我计划对具有超过一百万个观察值的数据执行此操作。如果它需要一段时间才能运行,我不介意,但由于我对此相当陌生,我永远不知道长时间运行是否只是获取数据的不可避免的一部分,或者是由于糟糕的功能设计。有没有明显的方法可以显着加快此操作?
编辑:
我从评论者那里得知,我可以提出的免费请求数量(每天 2,500 个)将受到限制。我所有的数据都来自纽约,目的是将纬度/经度坐标与自治市镇名称相匹配。在我发现免费用户的每日限制之前,我计划使用经纬度坐标从 Google 获取地址,从该地址中提取邮政编码,然后将邮政编码与自治市镇匹配。有没有人有关于如何在不使用 Google Maps Geocoding API 的情况下执行此操作的建议?
【问题讨论】:
-
你有一个更大的问题,你知道的。谷歌很早就会扼杀你。您是为额外的访问付费还是将被限制为免费金额?
-
没有看到revgeodocde函数的代码,很难说什么。另一方面,您可以轻松地并行化 apply() 调用。
-
哦,好吧我不知道。
-
我认为你可以从@SymbolixAU 的回答中获得相当多的信息。对于该分辨率,多边形中的点在
sf中会非常好并且非常快。