在R中使用tidygeocoder对空间数据进行地理编码

在之前的文章中,我已经演示了如何使用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()

Leave a Reply

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

Close

功能