在之前的文章中,我已经演示了如何使用Open Street Map API通过两种不同的方式对位置字符串进行地理编码。 第一种方法是实现使用http直接向OSM API发送字符串的功能。然后,API以json格式返回空间坐标。 第二种方法是在R中使用osmdata软件包,更具体地说,是使用其getbb()函数。对于给定的位置字符串,此函数返回具有经度和纬度值的矩阵,即,其功能与第一种方法所实现的功能相同,但一定不能从头开始实现。 在本文中,我展示了R中的另一个软件包,该软件包允许使用OSM API进行简单的地理编码:tidygeocoder R软件包。 在下面的几行中,我构造了一个具有预定义位置名称(字符字符串)的数据框模板。
# 定义一个数据框模板以填充整个地理编码过程
data_df = as.data.frame(matrix(nrow=20,ncol=3))
colnames(data_df) = c("location","lat","long")
# 添加城市和城镇名称作为位置
data_df$location = c("Hamburg, Germany", #1
"Dortmund, Germany", #2
"Stuttgart, Germany", #3
"Berlin, Germany", #4
"Dresden, Germany", #5
"Bremen, Germany", #6
"Leipzig, Germany", #7
"Kiel, Germany", #8
"Rostock, Germany", #9
"Karlsruhe, Germany", #10
"Siegen, Germany", #11
"Bonn, Germany", #12
"Essen, Germany", #13
"Gelsenkirchen, Germany", #14
"Marburg, Germany", #15
"Frankfurt am Main, Germany", #16
"Heidelberg, Germany", #17
"Freiburg, Germany", #18
"Pforzheim, Germany", #19
"Flensburg, Germany" #20
)
接下来,我使用R中的tidygeocoder软件包对位置进行地理编码。更具体地说,我使用其geo_osm函数
#在R中导入tidygeocoder包
library(tidygeocoder)
#使用geo_osm()函数对位置进行地理编码
for(i in 1:nrow(data_df)){
coordinates = geo_osm(data_df$location[i])
data_df$long[i] = coordinates$long
data_df$lat[i] = coordinates$lat
}
现在,数据框已完全填充。它包含位置名称及其各自的纬度和经度坐标。 在最后一步中,我使用R中的Leaflet包使用标记在地图上绘制位置。
#导入leaflet,leaflet.extras和magrittr
library(leaflet)
library(leaflet.extras)
library(magrittr)
#根据Google趋势为汉堡搜索强度创建热图
data_df %>%
leaflet() %>%
addTiles() %>%
addProviderTiles(providers$OpenStreetMap.DE) %>%
setView(mean(data_df$long),mean(data_df$lat),5) %>%
addMarkers()
专业领域为优化和仿真的工业工程师(R,Python,SQL,VBA)
Leave a Reply