RDSTK:反向地理编码 lat/lon 到城市(使用 coordinates2politics)
RDSTK: Reverse geocode lat/lon to city (using coordinates2politics)
我正在为 R 开发一个闪亮的应用程序,我正在尝试使用 RDSTK 包对 lat/lon 对列表进行反向地理编码,并从 json 结果中获取 CITY 和将其保存到列表中。工作流程是:
- SQLDF 到 select 日期范围内的所有记录。
- 反向地理编码记录并将列添加到具有特定城市的数据框中。
- 再次使用 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 日,该代码对我有效。
我正在为 R 开发一个闪亮的应用程序,我正在尝试使用 RDSTK 包对 lat/lon 对列表进行反向地理编码,并从 json 结果中获取 CITY 和将其保存到列表中。工作流程是:
- SQLDF 到 select 日期范围内的所有记录。
- 反向地理编码记录并将列添加到具有特定城市的数据框中。
- 再次使用 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 日,该代码对我有效。