2017-12-06 4 views
4

Ich versuche, einen Umriss für ein hexagonales Kartogramm zu erzeugen, indem ich die inneren Polygone über die Funktionen unionSpatialPolygons oder aggregate auflöste. Ich erhalte Streu hexs, die sich nicht auflösen ... ein Dummy-Beispiel, das Problem zu zeigen:Auflösen von Hexmap-Polygon-Formdateien

# grab a dummy example shape file 
library(raster) 
g <- getData(name = "GADM", country = "GBR", level = 2) 
# par(mar = rep(0,4)) 
# plot(g) 

# create a hexagonal cartogram 
# library(devtools) 
# install_github("sassalley/hexmapr")  
library(hexmapr) 
h <- calculate_cell_size(shape = g, seed = 1, 
         shape_details = get_shape_details(g), 
         learning_rate = 0.03, grid_type = 'hexagonal') 
i <- assign_polygons(shape = g, new_polygons = h) 
par(mar = rep(0,4)) 
plot(i) 

enter image description here

# dissolve the polygons to get coastline 
library(maptools) 
j <- unionSpatialPolygons(SpP = i, IDs = rep(1, length(i))) 
par(mar = rep(0,4)) 
plot(j) 

# same result with aggregate in the raster package 
k <- aggregate(x = i) 
par(mar = rep(0,4)) 
plot(k) 

enter image description here

Mit dem Shape-Datei ich eigentlich bin mit (nicht für das Vereinigte Königreich) bekomme ich noch mehr verirrte Sechsecke - einige komplett - manche nicht.

+0

Die beiden Streu Polygonen zusammenfallen mit den Binnen Extremitäten von zwei Meeresarmen, die nördliche der Irischen See ist, der südliche der Bristol Channel zu sein. Es könnte also ein Fehler sein, der mit diesen Küstengebieten zusammenhängt. Ich bin nicht vertraut mit "hexmapr" - ist es möglich, die Größe der Sechsecke zu reduzieren und Ergebnisse zu vergleichen? –

+0

@StuartAllen Ich denke, du hast Recht. beide sind Löcher in 'j'. – gjabel

Antwort

0

vorgeschlagene Lösung von Roger Bivand (über einen E-Mail-Austausch):

g1 <- spTransform(x = g, CRSobj = CRS("+init=epsg:27700")) 
# cellsize from calculate_cell_size() above 
h1 <- spsample(x = g1, type="hexagonal", cellsize=38309) 
i2 <- HexPoints2SpatialPolygons(hex = h1) 
j2 <- unionSpatialPolygons(SpP = i2, IDs = rep(1, length(i2))) 
plot(j2) 

dh assign_polygons() in hexmapr vermeiden und nutzen 1) spsample Form Positionen zu erzeugen, und 2) HexPoints2SpatialPolygons für das hexagonale Gitter (beide in sp Paket).

enter image description here

Verwandte Themen