Geocodificação com osmdata em R

Em uma postagem anterior, demonstrei como é possível gerar gráficos de distribuição de mapa de calor usando o pacote Leaflet em R. Nesse exemplo, implementei uma função que envia locais como strings para uma API do Open Street Map e recebe as coordenadas de latitude e longitude como retorno valores no formato JSON.

Neste post irei demonstrar como se pode utilizar o pacote osmdata para realizar a parte de geocodificação, sem ter que implementar uma função “complicada”.

Primeiro defino um conjunto de cidades e vilas para usar como localizações; Eu os adiciono a um modelo de quadro de dados vazio com nomes de cabeçalho predefinidos, bem como contagens de linhas e colunas.

# defining a data frame tempalte to populate throughut geocoding process
data_df = as.data.frame(matrix(nrow=20,ncol=4))
colnames(data_df) = c("location","lat","long","values")

# adding city and town names as locations
data_df$location = c("Siegen, Germany",      #1
                     "Kreuztal, Germany",    #2
                     "Netphen, Germany",     #3
                     "Olpe, Germany",        #4 
                     "Freudenberg, Germany", #5
                     "Hilchenbach, Germany", #6
                     "Wilnsdorf, Germany",   #7
                     "Betzdorf, Germany",    #8
                     "Dillenburg, Germany",  #9
                     "Marburg, Germany",     #10
                     "Biedenkopf, Germany",  #11
                     "Koblenz, Germany",     #12
                     "Erndtebrück, Germany", #13
                     "Herborn, Germany",     #14
                     "Cölbe, Germany",       #15
                     "Haiger, Germany",      #16
                     "Krombach, Germany",    #17
                     "Wenden, Germany",      #18
                     "Betzdorf, Germany",    #19
                     "Münchhausen, Germany"  #20
                     )

Em seguida, geocodifico os locais usando o pacote osmdata em R.

# importing osmdata package in R
library(osmdata)

# using getbb() function to geocode locations
for(i in 1:nrow(data_df)){
  coordinates = getbb(data_df$location[i])
  data_df$long[i] = (coordinates[1,1] + coordinates[1,2])/2
  data_df$lat[i] = (coordinates[2,1] + coordinates[2,2])/2
}

Agora, o quadro de dados contém nomes de locais e coordenadas de longitude e latitude geocodificadas; além disso, adiciono algum valor de observação distribuído aleatoriamente por local (isso definirá a intensidade da cor do gráfico do mapa de calor).

# adding randomly distributed values by location (uniform distribution)
data_df$values = runif(n = 20, min = 0, max = 100)

Em uma etapa final, gerei um mapa de calor exibindo a distribuição dos valores de observação por local, usando o Leaflet no R.

# importing leaflet, leaflet.extras and magrittr
library(leaflet)
library(leaflet.extras)
library(magrittr)

# creating a heat map for the burger search intensity according to Google trends
data_df %>%
  leaflet() %>% 
  addTiles() %>% 
  addProviderTiles(providers$OpenStreetMap.DE) %>% 
  setView(mean(data_df$long),mean(data_df$lat),8) %>%
  addHeatmap(lng=~long,lat=~lat,intensity=~values,max=100,radius=30,blur=20)

You May Also Like

Leave a Reply

Leave a Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.