ลบช่องว่างระหว่างเศษไม้กับรูปหลายเหลี่ยมด้วย R


10

มีวิธีการกำจัด "slivers" ขนาดเล็กระหว่างรูปหลายเหลี่ยมที่ใช้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)

slivers ที่น่ารำคาญระหว่างรูปหลายเหลี่ยม

ดังที่คุณเห็นในภาพหน้าจอด้านบนมีช่องว่างเล็ก ๆ ระหว่างรูปหลายเหลี่ยมของกลุ่มบล็อกการสำรวจสำมะโนประชากร ตำแหน่งของช่องว่างเหล่านี้มีการแสดงผลที่แตกต่างกันไปขึ้นอยู่กับระดับการซูม แต่จะมีช่องว่างที่มองเห็นได้เสมอ

ใครสามารถแนะนำRฟังก์ชั่น (หรือการรวมกันของฟังก์ชั่น) เพื่อปรับรูปหลายเหลี่ยมโดยทางโปรแกรมเพื่อกำจัดช่องว่างเหล่านี้?

คำตอบ:


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%

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.