Удалить щепки между полигонами с помощью R

10

Есть ли способ устранить небольшие «осколки» между полигонами, используя R? Желаемое решение создаст новый, SpatialPolygonsDataFrameгде общие границы между полигонами совпадают. Меня особенно интересует решение, которое использует R, а не ArcMap или QGIS.

Мне также было бы интересно услышать объяснение, почему эти пробелы существуют в первую очередь.

Вот воспроизводимый пример пространственных данных, с которыми я работаю:

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)

Раздражающие осколки между полигонами

Как вы можете видеть на скриншоте выше, между полигонами группы блоков переписи есть небольшие промежутки. Расположение этих промежутков отображается по-разному в зависимости от уровня масштабирования, но всегда есть некоторые видимые промежутки.

Кто-нибудь может порекомендовать Rфункцию (или комбинацию функций) для программной настройки полигонов для устранения этих пробелов?

Tiernan
источник

Ответы:

5

Представляется , что решение заключается в установке smoothFactorаргумента в AddPolygonsк 0, как это было предложено в этой должности: связанной листовка GeoJSON укладки листьев зазоры между полигоном

Я также счел необходимым добавить небольшой штрих к многоугольникам, чтобы полностью убрать пробелы ленты из примера карты.

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

введите описание изображения здесь

Интересно, что когда я уменьшил непрозрачность многоугольника, я обнаружил, что мне больше не нужно добавлять обводку.

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

Непрозрачность 50%

Tiernan
источник