2017-11-06 3 views
1

ich eine Shape-Datei auf einer Meso-Ebene habe (sul.ms), die ein einzigartiges Attribut namens MesoRegionMerging zwei Shape-Dateien in R

library(brazilmaps) 
sul.ms <- get_brmap(geo="MesoRegion",geo.filter = list(State = 43),class="SpatialPolygonsDataFrame") 
plot(sul.ms) 
[email protected]$MesoRegion 

[1] 4301 4302 4303 4304 4305 4306 4307 

enter image description here

ich eine andere Shape-Datei habe (Download von here)

die auf Gemeindeebene (aus einer anderen Quelle). Diese Datei hat auch ein eindeutiges Attribut namens ID.

library(rgdal) 
sul.mun <- readOGR("~","Rio_Grande_do_Sul_municipalities") 
plot(sul.mun) 
[email protected]$ID # should give 497 ID 

State map

ich sie auf der jeweils anderen zeichnen können, die zeigt, dass jede Gemeinde einen Teil eines Meso-Region ist wie folgt:

enter image description here

Ich möchte ein erstellen Tabelle, die die Gemeinde ID in einer Spalte und die entsprechende MesoRegion in einer anderen Spalte hat. Gibt es eine Möglichkeit in R, dies zu tun, vorausgesetzt, es gibt eine Möglichkeit, die Gemeinde mit einer einzelnen Mesoregion abzuschneiden und dem beschnittenen Distrikt den Namen der Mesoregion zuzuweisen.

EDIT: Ich habe versucht, die Funktion over

library(sp) 
over(sul.mun, sul.ms,returnList = T) 

dies macht die Arbeit zu verwenden. Ich glaube jedoch, dass eine einzige Gemeinde Teil von zwei Mesoregionen ist. Nicht sicher, warum das passiert.

+0

okay. Ich habe die Shapefiles zur Verfügung gestellt – KS89

+0

Ihre erste Shapefile hat kein Attribut 'state.id' – Val

+0

Sorry für die Verwirrung. Ich habe die Frage jetzt bearbeitet, um Ihre Zweifel auszuräumen. – KS89

Antwort

1

Hier ist eine mögliche Lösung für die Verwendung von „sf“ Funktionen basiert:

library(sf) 
#convert to "sf" 
sul.ms_sf <- sf::st_as_sf(sul.ms) 
sul.mun_sf <- sf::st_as_sf(sul.mun) 

# find centroids of the different municipalities 
centroids <- sf::st_centroid(sul.mun_sf) 

# find out to which region they belong 
inters <- sf::st_intersection(sul.ms_sf, centroids) %>% 
    sf::st_set_geometry(NULL) 

# re-join with the municipalities to get the additional 
# "nome" column 
out <- dplyr::left_join(sul.mun_sf, inters) %>% 
    sf::st_sf(sf_column_name = "geometry") 
head(out) 

Simple feature collection with 6 features and 7 fields 
geometry type: POLYGON 
dimension:  XY 
bbox:   xmin: -56.66047 ymin: -31.95874 xmax: -51.95982 ymax: -27.53024 
epsg (SRID): NA 
proj4string: +proj=longlat +ellps=GRS80 +no_defs 
    ID CD_GEOCODM NM_MUNICIP       nome MesoRegion State Region 
1 4609 4300034  ACEGUÃ   SUDOESTE RIO-GRANDENSE  4306 43  4 
2 4610 4300059 ÃGUA SANTA   NOROESTE RIO-GRANDENSE  4301 43  4 
3 4611 4300109  AGUDO CENTRO OCIDENTAL RIO-GRANDENSE  4303 43  4 
4 4612 4300208 AJURICABA   NOROESTE RIO-GRANDENSE  4301 43  4 
5 4613 4300307  ALECRIM   NOROESTE RIO-GRANDENSE  4301 43  4 
6 4614 4300406 ALEGRETE   SUDOESTE RIO-GRANDENSE  4306 43  4 

plot(out["nome"]) 

plot

scheint außer auf dem Osten für eine Region zu arbeiten, die als „NA“ bleibt.