Проверьте, к какому региону относится вектор точек в шейп-файле в R - PullRequest
0 голосов
/ 14 февраля 2020

У меня есть шейп-файл с их регионами / полигонами и функциями. Затем у меня есть фрейм данных с широтой / длинной точкой.

Я хотел бы добавить столбец в таблицу с индексом региона, в котором находится данная точка.

Некоторый воспроизводимый код:

### SETUP

library("tidyverse")

library("rgdal")
library("maptools")
library("rgeos")

library("ggmap")

unzipURL <- function(url, exdir){
  if(!dir.exists(exdir)){
    temp <- tempfile()
    download.file(url,temp)
    unzip(temp, exdir = exdir)
    unlink(temp)
  }
  return(exdir)
}

### DATA INGESTION

# Municipalities in Milan

municipi.mi.url <- "https://geoportale.comune.milano.it/Download/area_download/SIT/Municipi/Municipi_RDN2008.zip"

municipi.shp.path <- unzipURL(municipi.mi.url, exdir = file.path(".", "Municipi", criterion = is_git_root))

municipi.mi <- readOGR(dsn = municipi.shp.path, layer = "Municipi")
municipi.mi <- spTransform(municipi.mi,"+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0")

# ARPA CONTROL STATIONS

centraline.mi.url <- "http://dati.comune.milano.it/dataset/d6960c75-0a02-4fda-a85f-3b1c4aa725d6/resource/59b3476e-9081-4601-a95a-a64925da3af5/download/qaria_stazione_shp.zip"

centraline.shp.path <- unzipURL(centraline.mi.url, exdir = file.path(".", "Centraline", criterion = is_git_root))

centraline.mi <- readOGR(dsn = centraline.shp.path, layer = "qaria_stazione")

### DATA PREP

municipi.mi@data$id = rownames(municipi.mi@data)
municipi.mi.points = fortify(municipi.mi, region="id")
municipi.mi.df = inner_join(municipi.mi.points, municipi.mi@data, by="id")

municipi.mi.df <- municipi.mi.df %>% mutate(MUNICIPIO = as.factor(MUNICIPIO))

# PLOT

ggplot(municipi.mi.df, mapping = aes(long, lat)) + 
  geom_polygon(mapping = aes(group=group, fill = MUNICIPIO)) +
  geom_path(mapping = aes(group=group), color="white") +
  geom_point(data=centraline.mi@data, mapping=aes(x=lon, y=lat), color = "white", cex=3) + 
  coord_map() +
  scale_fill_brewer(palette = "RdYlBu", type= "div") +
  theme(plot.background=element_blank(), 
        panel.background = element_blank(), 
        axis.title=element_blank(), 
        axis.ticks=element_blank(), 
        axis.text=element_blank()) +
  ggtitle("Municipalità di Milano",
          subtitle="Dislocazione centraline ARPA controllo della qualità dell'aria")

, что дает график ниже

Municipalities in Milan

Как уже говорилось, мне нужно добавить столбец к centraline.mi@data со столбцом region с индексом многоугольника, в который попадает данная точка (в этом конкретном примере я мог бы заметить, но это не обязательно верно для всех слоев, которые у меня есть)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...