gpt4 book ai didi

r - 简化 rgeos 中的多边形并维护 SpatialPolygonsDataFrame 中的数据

转载 作者:行者123 更新时间:2023-12-04 09:30:30 26 4
gpt4 key购买 nike

背景

我对使用 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")

Simplified and original polygons

问题

除了简化多边形之外, 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
  • 我认为一种方法只会涉及 attaching data frame ;但这取决于元素的顺序不变。有没有其他更好的方法(最好保留初始对象类)?
  • 最佳答案

    sf包完全基于数据框,因此其几何操作始终保留附加到每个要素的数据。该包还没有 catch R 中的所有标准空间包,但是在 sf 之间来回相当容易。和 sp需要更多功能时的对象。

    在这里,st_simplify()完成这项工作,但您需要先投影多边形:

    library(sf)

    # Download and read example data
    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)

    us_shps <- st_read(paste(tmp_dir, "cb_2014_us_state_20m.shp", sep = "/"))

    # st_simplify needs a projected CRS
    us_shps_merc <- st_transform(us_shps, 3857)
    simple_us_merc <- st_simplify(us_shps_merc)

    # Change back to original CRS
    simple_us <- st_transform(simple_us_merc, st_crs(us_shps))

    # Change to sp object, if you like
    simple_us_sp <- as(st_zm(simple_us), "Spatial")

    关于r - 简化 rgeos 中的多边形并维护 SpatialPolygonsDataFrame 中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46057249/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com