#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