sf
간격과 은색을 도입하지 않고 다각형을 단순화하려면 어떻게해야 합니까?
예를 들어 shapefile을 사용하면 rmapshaper::ms_simplify()
다음 을 사용합니다 .
library("pryr")
library("rgdal")
library("rmapshaper")
download.file("https://borders.ukdataservice.ac.uk/ukborders/easy_download/prebuilt/shape/England_gor_2011.zip",
destfile = "regions.zip")
unzip("regions.zip")
regions <- readOGR(".", "england_gor_2011")
object_size(regions)
# ~13MB
regions <- ms_simplify(regions)
object_size(regions)
# < 1MB
나는 시도했다 sf::st_cast()
man 페이지에서, 어떤 상태 :
다른 유형으로 형상 캐스트 : 단순화 또는 명시 적 캐스트
과:
논쟁 : 캐릭터; 목표 유형이 없으면 단순화를 시도합니다. x가 sfg 유형 인 경우 (즉, 단일 형상) 지정해야합니다.
내가 to
누락 된 것으로 남겨 두었 을 때 이것은 예상대로 작동하지 않았습니다 (사실이 너무 좋다는 것을 알았습니다!) :
library("sf")
regions <- sf::read_sf("england_gor_2011.shp")
object_size(regions)
# ~13MB
regions <- sf::st_cast(regions)
object_size(regions)
# Still 13MB
현재으로 파일을 열고 rgdal::readOGR()
단순화하고 저장 한 다음 다시로드합니다 sf
.
더 좋은 방법이 있습니까?
rgeos::gSimplify()
@sk의 제안은 rgeos::gSimplify()
다음과 같은 인수로 지정하면 위상을 인식하여 단순화 할 수 있습니다 (즉, 슬라이서 를 만들지 않고 단순화 할 수 있음).
library("rgeos")
regions_gSimplify <- gSimplify(regions, tol = 0.05, topologyPreserve = TRUE)
gSimplify
@data
프레임을 보존하지 않으므로 프레임을 다시 만들어야합니다.
regions_df <- regions@data
regions_gSimplify <- sp::SpatialPolygonsDataFrame(regions_gSimplify, regions_df)
그리고 이것은 실제로 파일 크기를 tol
작게 만듭니다 (작은 값을 줄이기 위해 인수를 조정할 수 있음). 이는 QGIS에서 파일을 검사하여 조각기가 만들어지지 않았 음을 확인했습니다.
object_size(regions_gSimplify)
# ~8MB
따라서 이것은 rmapshaper::ms_simplify()
여전히 같은 문제가 있습니다. 즉, 작동하지 않습니다 sf
.
regions_sf <- sf::read_sf("england_gor_2011.shp")
object_size(regions_sf)
regions_gSimplify <- gSimplify(regions_sf, topologyPreserve = TRUE, tol = 0.05)
# Error in gSimplify(regions_sf, topologyPreserve = TRUE, tol = 0.05) :
# no slot of name "proj4string" for this object of class "sf"
@obrl_soil의 답변 도 적용 할 수 있습니다 . gSimplify()
대신 사용하십시오 ms_simplify()
.
st_simplify
그렇게 하지 않아야합니까? (아직 사용하지 않았습니다)
st_simplify
. 지적 해 주셔서 감사합니다. 나는 rmapshaper::ms_simplify
지금까지 시도한 다른 모든 것보다 기본적으로 사용 되는 알고리즘을 선호 하지만 새로운 옵션으로 플레이 할 것입니다 (업데이트 : whoa는 신중 preserveTopology = TRUE
하게 진행 하지만 확실히 제대로 작동하지 않습니다)
regions
) 에서 최대 약 1000까지의 공차에 대해 작동 하지만 그 이상으로 더 이상 토폴로지를 유지하지 않습니다. 특정 시점에서 중단 될 때 의도 된 동작이 아니라고 말하고 싶습니다