R 反向地理编码速度

R 反向地理编码速度,r,apply,ggmap,R,Apply,Ggmap,我使用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) 使用system.time(),这大约需要一秒钟。然而,我计划对超过一百万次

我使用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)
使用
system.time()
,这大约需要一秒钟。然而,我计划对超过一百万次观测的数据进行此操作。如果需要一段时间来运行,我不介意,但因为我对这一点相当陌生,我永远不知道长时间运行只是获取数据不可避免的一部分,还是由于糟糕的功能设计。有没有明显的方法来显著加快这一操作

编辑:


我从评论中了解到,我可以提出的免费请求数量将受到限制(2500/天)。我所有的数据都来自纽约,目的是将纬度/经度坐标与一个自治区名称相匹配。在我发现免费用户的每日限制之前,我计划使用lat/long坐标从谷歌获取地址,从该地址提取邮政编码,然后将邮政编码与一个自治区匹配。有没有人对如何在不使用谷歌地图地理编码API的情况下做到这一点有什么建议?

据我所知,谷歌的免费API限制为每天2500次请求。名义上,OSM是由OSM提供的,但在R.没有任何API,但是对于这一数据量,我不考虑Web服务。您有ArcGIS的许可证吗

也许你也可以通过避免这样的赋值来聚合你的函数:

require(ggmap)
get_address <- function(df){
  revgeocode(c(as.numeric(df$longitude),as.numeric(df$latitude)))
}
require(ggmap)

get_address您可以找到行政区的“空间”数据源,然后使用库执行几何操作以查找多边形中的点


设置数据 查找空间数据源。这里是一个geojson格式的社区

library(sf)

sf <- sf::st_read("https://raw.githubusercontent.com/blackmad/neighborhoods/master/new-york-city-boroughs.geojson")
要执行空间操作,坐标参照系需要在两个几何图形之间匹配

## set the cooridnate reference systesm to be the same
st_crs(sf_x) <- st_crs(sf)
这将为您提供每个点所在的多边形索引的稀疏矩阵

## view the results
sapply(res, function(x) as.character(sf$name[x]))
# [1] "Bronx"     "Queens"    "Manhattan" "Brooklyn"  "Queens" 

视觉的 用图证实

library(googleway)

x$neighbourhood <- sapply(res, function(x) as.character(sf$name[x]))

mapKey <- "map_api_key"

google_map(key = mapKey) %>%
  add_markers(data = x, info_window = "neighbourhood")
library(googleway)

你知道,你有一个更大的问题。谷歌很早就会限制你。你是为额外的访问付费,还是将被限制在免费的范围内?如果没有看到revgeodocde函数的代码,很难说什么。另一方面,你可以很容易地并行执行apply()调用。普莱斯:哦,好吧,我不知道。那么,我想你可以从@symbolXau的答案中获得很多好处。对于该分辨率,多边形中的点在
sf
中会非常好并且非常快。我从未使用过arcGIS,但我相信我可以通过我的大学访问该软件。我是否正确理解您的编辑,您只是想剪辑位于该特定区域的点?对于我的数据,大多数观测都有纬度和经度坐标,但在许多情况下都缺少该自治区的名称。如果能从这些坐标中同时得到邻里的名字和自治区的名字,那就太好了,但是我很乐意得到自治区的名字。你从哪里得到的信息表明Namingm没有“R中的API”?当你不知道自己在说什么的时候,请不要发表权威性的言论。我很抱歉造成混乱。我真正想说的是,Namingm没有任何库可以使用包管理器(如ggmap)下载。
## set the cooridnate reference systesm to be the same
st_crs(sf_x) <- st_crs(sf)
res <- st_within(sf_x, sf)  ## return the indexes of sf that sf_x are within
## view the results
sapply(res, function(x) as.character(sf$name[x]))
# [1] "Bronx"     "Queens"    "Manhattan" "Brooklyn"  "Queens" 
library(googleway)

x$neighbourhood <- sapply(res, function(x) as.character(sf$name[x]))

mapKey <- "map_api_key"

google_map(key = mapKey) %>%
  add_markers(data = x, info_window = "neighbourhood")