RDSTK:反向地理编码lat / lon到city(使用coordinate2politics)

时间:2015-03-21 23:29:21

标签: r maps reverse-geocoding

我正在研发一款适用于R的Shiny应用程序,我试图使用RDSTK软件包来反转地理编码纬度/经度对的列表,并从json结果中获取CITY并将其保存到名单。工作流程是:

  1. SQLDF选择日期范围内的所有记录。
  2. 反向地理编码记录并将列添加到具有特定城市的数据框。
  3. 再次使用SQLDF按城市获取计数。
  4. 我在理解如何获取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列表中提取城市,但是我不能为我的生活,找出如何多次为更大的纬度/经度对列表做这件事。搜索stackoverflow主要导致在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虽然我似乎无法为coordinate2politics重新设计它。

    任何输入?

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

听起来很酷。我最近在RDSTK遇到了一些麻烦...我假设the stock server已经不再适合你了,作为作者的blog describes。太糟糕了。

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

但是,我对R中的开放式地理编码器有同样的需求,并且有一些选择。查看在LukeA的答案中引用的ggmap - 可以使用DSTK(现已不存在),并且是一个简单的google API接口,只需几个电话。另请参阅this fantstic post,了解如何使用census bureau's geocoder API。写一个小的包装函数来处理JSON,你很高兴。截至2016年1月1日,该代码对我有用。