Entfernen Sie die Splitterlücken zwischen den Polygonen mit R.

10

Gibt es eine Möglichkeit, die kleinen "Splitter" zwischen Polygonen mit zu beseitigen R? Die gewünschte Lösung würde eine neue schaffen, SpatialPolygonsDataFramebei der die gemeinsamen Grenzen zwischen Polygonen zusammenfallen. Ich bin speziell an einer Lösung interessiert R, die anstelle von ArcMap oder QGIS verwendet.

Es würde mich auch interessieren, eine Erklärung zu hören, warum diese Lücken überhaupt bestehen.

Hier ist ein reproduzierbares Beispiel für die Geodaten, mit denen ich arbeite:

library(rgdal)      
library(sp)
library(tigris)
library(magrittr)
library(leaflet)
library(gplots)

# This project will use WGS 84 projected coordinate system
crs_proj <- CRS("+init=epsg:4326") 

# These are the FIPS codes of the specific block groups in my study area
sel <- c("530330079005", "530330079001", "530330079004", 
         "530330085002", "530330085003", "530330086003", 
         "530330087003", "530330085001", "530330090001", 
         "530330091001", "530330091002", "530330092001", 
         "530330092002", "530330086001", "530330090002", 
         "530330086002", "530330079003", "530330079002", 
         "530330087002", "530330087001")

# Create polygons
polygons <- tigris::block_groups(state = "WA",county = "King") %>% 
        .[.@data$GEOID %in% sel,] %>% 
        spTransform(CRSobj = crs_proj)

# Map the result
leaflet() %>% 
        addProviderTiles("CartoDB.Positron") %>% 
        addPolygons(data = polygons,
                    stroke = F,
                    fillColor = col2hex("red"), fillOpacity = 1)

Ärgerliche Splitter zwischen den Polygonen

Wie Sie im obigen Screenshot sehen können, gibt es kleine Lücken zwischen den Polygonen der Zensusblockgruppe. Diese Position dieser Lücken wird je nach Zoomstufe unterschiedlich gerendert, es sind jedoch immer einige Lücken sichtbar.

Kann jemand eine RFunktion (oder eine Kombination von Funktionen) empfehlen , um die Polygone programmgesteuert anzupassen und diese Lücken zu schließen?

Tiernan
quelle

Antworten:

5

Es scheint, dass die Lösung darin besteht, das smoothFactorArgument auf AddPolygonszu setzen 0, wie in diesem verwandten Beitrag vorgeschlagen: Das Geojson-Styling von Leaflet lässt Lücken zwischen Polygonen

Ich fand es auch notwendig, den Polygonen einen kleinen Strich hinzuzufügen, um die Splitterlücken vollständig aus der Beispielkarte zu entfernen.

leaflet() %>% 
    addProviderTiles("CartoDB.Positron") %>% 
    addPolygons(data = polygons, smoothFactor = 0,
                weight = .75, color = col2hex("red"), opacity = 1,
                fillColor = col2hex("red"), fillOpacity = 1)

Geben Sie hier die Bildbeschreibung ein

Interessanterweise musste ich den Strich nicht mehr hinzufügen, als ich die Deckkraft des Polygons verringerte.

leaflet() %>% 
        addProviderTiles("CartoDB.Positron") %>% 
        addPolygons(data = polygons, smoothFactor = 0,
                    stroke = FALSE,
                    fillColor = col2hex("red"), fillOpacity = .5)

50% Deckkraft

Tiernan
quelle