R - class AsIs 不适用于 sf 包
R - class AsIs will not work with sf package
我在 Spotfire 中使用 .shp 文件,当我保存它时,几何数据与 class "AsIs" 一起保存。使用 sf 包和函数 st_as_sfc (以便我可以执行其他功能)我收到如下所示的错误消息。我在下面的示例中重新创建了它。
如何将 Geometry 转换为 sf 可以使用的东西,或者更具体地说 class?
library(sf)
nc <- st_read(system.file("shape/nc.shp", package="sf"), quiet = TRUE)
class(nc$geometry) <- "AsIs"
st_as_sfc(nc$geometry)
Error in UseMethod("st_as_sfc") :
no applicable method for 'st_as_sfc' applied to an object of class "AsIs"*
您的实际数据与您问题中的示例不太一样。
几何图形以原始格式表示为 Well-Known Binary
library(sf)
load("~/Downloads/sec_shp.RData")
sec_shp$Geometry[[1]]
# [1] 01 03 00 00 00 01 00 00 00 06 00 00 00 0f d5 78 9b 80 63 59 c0 bb 0f 16 3b dd 1e 40 40 79 1f cd 16 3c 63 59 c0 04 bf
# [40] e8 1a 19 1d 40 40 d0 8f b7 4d 3b 63 59 c0 b5 71 ce eb 13 1d 40 40 44 a3 aa 2a 49 64 59 c0 dc 03 be fe 9b 1c 40 40 42
# [79] d0 d2 eb 8e 64 59 c0 65 05 c1 d3 64 1e 40 40 0f d5 78 9b 80 63 59 c0 bb 0f 16 3b dd 1e 40 40
您可以使用
阅读
sf:::st_as_sfc.raw( sec_shp$Geometry[[1]] )
# Geometry set for 1 feature
# geometry type: POLYGON
# dimension: XY
# bbox: xmin: -101.5712 ymin: 32.22351 xmax: -101.5505 ymax: 32.24113
# CRS: NA
# POLYGON ((-101.5547 32.24113, -101.5505 32.2273...
因此,要一次性阅读所有内容,请将 class 设置为 WKB
,然后调用 st_as_sfc()
attr(sec_shp$Geometry, "class") <- c("WKB")
sfc <- sf::st_as_sfc( sec_shp$Geometry )
sec_shp$Geometry <- sfc
sf <- sf::st_as_sf( sec_shp )
大功告成
我很想看看你的数据是什么样的,所以就在这里
library(mapdeck)
set_token( secret::get_secret( "mapbox" ) )
mapdeck() %>%
add_polygon(
data = sf
, fill_colour = "OBJECTID"
)
我在 Spotfire 中使用 .shp 文件,当我保存它时,几何数据与 class "AsIs" 一起保存。使用 sf 包和函数 st_as_sfc (以便我可以执行其他功能)我收到如下所示的错误消息。我在下面的示例中重新创建了它。
如何将 Geometry 转换为 sf 可以使用的东西,或者更具体地说 class?
library(sf)
nc <- st_read(system.file("shape/nc.shp", package="sf"), quiet = TRUE)
class(nc$geometry) <- "AsIs"
st_as_sfc(nc$geometry)
Error in UseMethod("st_as_sfc") :
no applicable method for 'st_as_sfc' applied to an object of class "AsIs"*
您的实际数据与您问题中的示例不太一样。
几何图形以原始格式表示为 Well-Known Binary
library(sf)
load("~/Downloads/sec_shp.RData")
sec_shp$Geometry[[1]]
# [1] 01 03 00 00 00 01 00 00 00 06 00 00 00 0f d5 78 9b 80 63 59 c0 bb 0f 16 3b dd 1e 40 40 79 1f cd 16 3c 63 59 c0 04 bf
# [40] e8 1a 19 1d 40 40 d0 8f b7 4d 3b 63 59 c0 b5 71 ce eb 13 1d 40 40 44 a3 aa 2a 49 64 59 c0 dc 03 be fe 9b 1c 40 40 42
# [79] d0 d2 eb 8e 64 59 c0 65 05 c1 d3 64 1e 40 40 0f d5 78 9b 80 63 59 c0 bb 0f 16 3b dd 1e 40 40
您可以使用
阅读sf:::st_as_sfc.raw( sec_shp$Geometry[[1]] )
# Geometry set for 1 feature
# geometry type: POLYGON
# dimension: XY
# bbox: xmin: -101.5712 ymin: 32.22351 xmax: -101.5505 ymax: 32.24113
# CRS: NA
# POLYGON ((-101.5547 32.24113, -101.5505 32.2273...
因此,要一次性阅读所有内容,请将 class 设置为 WKB
,然后调用 st_as_sfc()
attr(sec_shp$Geometry, "class") <- c("WKB")
sfc <- sf::st_as_sfc( sec_shp$Geometry )
sec_shp$Geometry <- sfc
sf <- sf::st_as_sf( sec_shp )
大功告成
我很想看看你的数据是什么样的,所以就在这里
library(mapdeck)
set_token( secret::get_secret( "mapbox" ) )
mapdeck() %>%
add_polygon(
data = sf
, fill_colour = "OBJECTID"
)