Обратное геокодирование с базой данных gadm на языке r.

#r #overlay #raster #reverse-geocoding

#r #наложение #растр #обратное геокодирование

Вопрос:

У меня есть объект 6000 только с lng и широтой. Используя набор данных GADM для Польши, я могу найти, где находится точка. Здесь у меня есть LargeSpdataframe с границами воеводств

 library(raster)

voiv<-getData("GADM", country = "PL", level = 1)
 

округа

 county<-getData("GADM", country = "PL", level = 2)
 

и на уровень ниже, более детализированная разбивка

 gm<-getData("GADM", country = "PL", level = 3)
 

Я хочу найти, где находятся точки, вот так.(его единственный пример.)

 lng      lat      voiv   county     gm

20.28222 50.72641 Lubuskie Sieradz Sieradz
 

Как определить точки Ggps. Я использовал over функцию, но не работает.

Ответ №1:

Это должно быть возможно с помощью функции revgeocode из ggmap, но вам нужен свой собственный ключ API

 library(ggmap)

ggmap::register_google(key = "your api key")


revgeocode(location = c(20.28222, 50.72641), output = c("address", "all"), force = FALSE, urlonly = FALSE, override_limit = FALSE)


"Mniszek 4, 28-366, Poland"
 

Ответ №2:

Координаты и имена находятся в разных слотах. Извлеките первое с помощью coordinates . После этого вы могли cbind бы объединить их.

 r <- cbind(gm[grep("^NAME", names(gm))], `colnames<-`(coordinates(gm), c("lng", "lat")))
 

Найдите Любуские в результате:

 head(r[r$NAME_1 %in% "Lubuskie", ])
#       NAME_0   NAME_1 NAME_2            NAME_3      lng      lat
# 41070 Poland Lubuskie Gorzów         Bogdaniec 15.09408 52.68379
# 41116 Poland Lubuskie Gorzów          Deszczno 15.29237 52.65471
# 40825 Poland Lubuskie Gorzów           Klodawa 15.26856 52.82939
# 41258 Poland Lubuskie Gorzów Kostrzyn Nad Odra 14.63813 52.61470
# 40855 Poland Lubuskie Gorzów          Lubiszyn 14.98341 52.79892
# 40950 Poland Lubuskie Gorzów            Santok 15.43891 52.74680
 

Ответ №3:

Вы можете использовать raster::extract

 library(raster)
voiv <- getData("GADM", country = "POL", level = 1)
xy <- cbind(20.28222, 50.72641)

e <- extract(voiv[, c("NAME_0", "NAME_1")], xy)
e
#  point.ID poly.ID NAME_0         NAME_1
#1        1      13 Poland Swietokrzyskie