Remova as folgas entre os polígonos com R

10

Existe uma maneira de eliminar as pequenas "lascas" entre polígonos usando R? A solução desejada criaria um novo SpatialPolygonsDataFrameonde os limites compartilhados entre polígonos são coincidentes. Estou especificamente interessado em uma solução que utiliza R, em vez de ArcMap ou QGIS.

Eu também estaria interessado em ouvir uma explicação sobre por que essas lacunas existem em primeiro lugar.

Aqui está um exemplo reproduzível dos dados espaciais com os quais estou trabalhando:

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)

Fendas irritantes entre os polígonos

Como você pode ver na captura de tela acima, existem pequenas lacunas entre os polígonos do grupo de blocos de censo. A localização dessas lacunas é renderizada de maneira diferente, dependendo do nível de zoom, mas sempre há algumas lacunas visíveis.

Alguém pode recomendar uma Rfunção (ou uma combinação de funções) para ajustar programaticamente os polígonos para eliminar essas lacunas?

Tiernan
fonte

Respostas:

5

Parece que as mentiras da solução em definindo o smoothFactorargumento em AddPolygonsque 0, como sugerido neste post relacionado: GeoJSON Folheto denominar deixa lacunas entre polígono

Também achei necessário adicionar um pequeno traço aos polígonos para remover completamente as lacunas do mapa de exemplo.

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

insira a descrição da imagem aqui

Curiosamente, quando diminui a opacidade do polígono, descobri que não precisava mais adicionar o traço.

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

50% de opacidade

Tiernan
fonte