我厌倦了Google的地理编码,决定尝试一种替代方法。数据科学工具包(http://www.datasciencetoolkit.org)允许你对无限数量的地址进行地理编码。R有一个很好的包,作为其函数的 Package 器(CRAN:RDSTK)。该包有一个名为street2coordinates()
的函数,与数据科学工具包的地理编码实用程序接口。
但是,如果尝试对 City,Country 这样的简单内容进行地理编码,RDSTK函数street2coordinates()
将不起作用。在以下示例中,我将尝试使用该函数获取Phoenix城的纬度和经度:
> require("RDSTK")
> street2coordinates("Phoenix+Arizona+United+States")
[1] full.address
<0 rows> (or 0-length row.names)
数据科学工具包中的实用程序可以完美地工作。下面是给出答案的URL请求:http://www.datasciencetoolkit.org/maps/api/geocode/json?sensor=false&address=Phoenix+Arizona+United+States
我对地理编码多个地址(其中完整的地址和城市名称)感兴趣。我知道数据科学工具包的URL会很好地工作。
如何连接URL并将多个纬度和经度与地址一起放入数据框?
下面是一个示例数据集:
dff <- data.frame(address=c(
"Birmingham, Alabama, United States",
"Mobile, Alabama, United States",
"Phoenix, Arizona, United States",
"Tucson, Arizona, United States",
"Little Rock, Arkansas, United States",
"Berkeley, California, United States",
"Duarte, California, United States",
"Encinitas, California, United States",
"La Jolla, California, United States",
"Los Angeles, California, United States",
"Orange, California, United States",
"Redwood City, California, United States",
"Sacramento, California, United States",
"San Francisco, California, United States",
"Stanford, California, United States",
"Hartford, Connecticut, United States",
"New Haven, Connecticut, United States"
))
2条答案
按热度按时间r6hnlfcb1#
就像这样:
这利用了street2coordinates API的POST接口(在此处进行了说明),它在一个请求中返回所有结果,而不是使用多个GET请求。
缺少Phoenix似乎是street2coordinates API中的一个bug。如果你进入API demo page并尝试“Phoenix,Arizona,United States”,你会得到一个空响应。然而,正如你的例子所显示的,使用他们的“Google风格的Geocoder”* 确实 * 给予了Phoenix的结果。所以这里有一个使用重复GET请求的解决方案。注意,这运行 * 要慢得多 *。
8hhllhi22#
ggmap package支持使用Google或Data Science Toolkit进行地理编码,后者支持“Google风格的地理编码器”。