Задний план
Меня интересует упрощение многоугольников с помощью gSimplify
, доступная в пакете rgeos
.
Воспроизводимый пример
Воспроизводимый пример может быть создан с использованием приведенного ниже кода:
# Data sourcing -----------------------------------------------------------
# Download an read US state shapefiles
tmp_shps <- tempfile()
tmp_dir <- tempdir()
download.file(
"http://www2.census.gov/geo/tiger/GENZ2014/shp/cb_2014_us_state_20m.zip",
tmp_shps
)
unzip(tmp_shps, exdir = tmp_dir)
# Libs
require(rgdal)
require(rgeos)
# Read
us_shps <- readOGR(dsn = tmp_dir, layer = "cb_2014_us_state_20m")
# Simplified --------------------------------------------------------------
# Simplifiy
us_shps_smpl <- gSimplify(spgeom = us_shps,
tol = 200,
topologyPreserve = TRUE)
Предварительный просмотр
par(mfrow = c(2,1))
plot(us_shps_smpl, main = "Simplified")
plot(us_shps, main = "Original")
Проблема
Помимо упрощения многоугольников, gSimplify
функция изменила классы полученного объекта:
>> class(us_shps)
[1] "SpatialPolygonsDataFrame"
attr(,"package")
[1] "sp"
>> class(us_shps_smpl)
[1] "SpatialPolygons"
attr(,"package")
[1] "sp"
>> names(us_shps)
[1] "STATEFP" "STATENS" "AFFGEOID" "GEOID" "STUSPS" "NAME" "LSAD" "ALAND" "AWATER"
>> names(us_shps_smpl)
[1] "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12" "13" "14" "15" "16" "17" "18" "19"
[21] "20" "21" "22" "23" "24" "25" "26" "27" "28" "29" "30" "31" "32" "33" "34" "35" "36" "37" "38" "39"
[41] "40" "41" "42" "43" "44" "45" "46" "47" "48" "49" "50" "51"
Вопросы
Как я могу безопасно повторно подключить данные, которые изначально были доступны в исходном объекте, и преобразовать полученный объект
SpatialPolygons
вSpatialPolygonsDataFrame
Я полагаю, что один из подходов просто включал бы присоединение фрейма данных, но это зависит от порядка, в котором элементы не меняются. Есть ли другие лучшие подходы (в идеале с сохранением исходного класса объекта)?
gSimplify
обрабатываетSpatialPolygonDataFrame
класс, а не с количественной географией аспект проблемы. Я считаю, что это не совсем однозначно, но я полагаю, что многие люди, которые следят за rgeos и gis посмотрите на обе доски. - person Konrad   schedule 05.09.2017SpatialPolygonsDataFrame(us_shps_smpl, us_shps@data)
. У вас есть пример, где порядок элементов изменился послеgSimplify
? - person Z.Lin   schedule 05.09.2017SpatialPolygonsDataFrame
match.ID = FALSE
, чтобы избежать сбоев при несовпадении идентификаторов. - person Konrad   schedule 05.09.2017rgeos
? В противном случае, я считаю,sf::st_simplify()
мог бы вам здесь помочь. - person coletl   schedule 09.10.2017