4

バックグラウンド

パッケージ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

  • 1つのアプローチは単にデータフレームを添付するだけだと思いますが、これは要素の順序が変わらないことに依存します。他のより良いアプローチはありますか (理想的には初期オブジェクト クラスを保持します)?

4

1 に答える 1