RDSTK:反向地理编码 lat/lon 到城市(使用 coordinates2politics)

RDSTK: Reverse geocode lat/lon to city (using coordinates2politics)

我正在为 R 开发一个闪亮的应用程序,我正在尝试使用 RDSTK 包对 lat/lon 对列表进行反向地理编码,并从 json 结果中获取 CITY 和将其保存到列表中。工作流程是:

  1. SQLDF 到 select 日期范围内的所有记录。
  2. 反向地理编码记录并将列添加到具有特定城市的数据框中。
  3. 再次使用 SQLDF 按城市获取计数。

我很难理解如何获取 JSON 输出,将其转换为数据框,然后将其绑定回原始数据框。任何帮助将非常感激!请参阅以下代码以供参考:

数据框:

df <- data.frame(lat=c(34.048381, 37.757836, 40.729855, 42.356391),
             lon=c(-118.266164, -122.441033, -73.987921, -71.062307))

我能够从返回的 JSON 列表中提取城市,但我无法终生想出如何针对更大的 [=36= 列表多次执行此操作] 对。通过Whosebug搜索主要是在R之外的dstk。

我的理想输出是:

lat        lon           city
34.048381  -118.266164   Los Angeles
37.757836  -122.441033   San Francisco
40.729855  -73.987921    New York
42.356391  -71.062307    Boston

我也试过这个例子:R: How to GeoCode a simple address using Data Science Toolbox虽然我似乎无法为 coordinates2politics 重新设计它。

有输入吗?

FWIW,这是使用 Google API 的一种简单替代方法:

library(ggmap)
res <- lapply(with(df, paste(lat, lon, sep = ",")), geocode, output = "more")
transform(df, city = sapply(res, "[[", "locality"))
# lat        lon          city
# 1 34.04838 -118.26616   los angeles
# 2 37.75784 -122.44103 san francisco
# 3 40.72986  -73.98792      new york
# 4 42.35639  -71.06231        boston

听起来很酷。我最近在使用 RDSTK 时遇到了一些麻烦......我假设 the stock server is no longer working for you, as the author's blog describes。太可惜了。

这里有两个解决方法。您可以使用 tigerfile 中的城市地点文件获取原始 lat/lon 对,并在 sp 包中使用 %over% ,然后从返回的形状中提取名称。这应该比重复调用 API 更快。

但是,我对 R 中的开放式地理编码器有同样的需求,并且有几个选项。查看 ggmap,在 LukeA 的回答中引用 - 可以使用 DSTK(现已失效)并且是 google API 的简单接口,只需几次调用。另见 this fantstic post describing how to use the census bureau's geocoder API。编写一个小包装函数来处理 JSON 就可以了。截至 2016 年 1 月 1 日,该代码对我有效。