Usuń szczeliny między wielobokami za pomocą R

10

Czy istnieje sposób na wyeliminowanie małych „kawałków” między wielobokami R? Pożądane rozwiązanie stworzyłoby nowy, w SpatialPolygonsDataFramektórym wspólne granice między wielokątami są zbieżne. Szczególnie interesuje mnie rozwiązanie, które wykorzystuje R, a nie ArcMap lub QGIS.

Byłbym również zainteresowany wyjaśnieniem, dlaczego te luki istnieją przede wszystkim.

Oto odtwarzalny przykład danych przestrzennych, z którymi pracuję:

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)

Irytujące fragmenty między wielokątami

Jak widać na powyższym zrzucie ekranu, między wielobokami grupy bloków spisowych są małe przerwy. Lokalizacja tych przerw jest renderowana w różny sposób w zależności od poziomu powiększenia, ale zawsze są widoczne pewne przerwy.

Czy ktoś może polecić Rfunkcję (lub kombinację funkcji) programowego dostosowania wielokątów w celu wyeliminowania tych luk?

Tiernan
źródło

Odpowiedzi:

5

Wydaje się, że rozwiązanie leży w ustawieniu smoothFactorargumentu w AddPolygonscelu 0, jak zasugerowano w tym powiązanej postu: Ulotka GeoJSON stylizacji liści luki między wielokąta

Stwierdziłem również, że konieczne jest dodanie niewielkiego obrysu do wielokątów, aby całkowicie usunąć luki między taśmami z przykładowej mapy.

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

wprowadź opis zdjęcia tutaj

Co ciekawe, kiedy zmniejszyłem krycie wielokąta, stwierdziłem, że nie muszę już dodawać obrysu.

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

50% Krycia

Tiernan
źródło