У меня есть несколько объектов SpatVector
, из которых я хотел бы получить координаты точки. Судя по документации и примерам, as.data.frame
должен работать...
sq = terra::vect(cbind(c(0, 1, 1, 0, 0), c(0, 0, 1, 1, 0)), type = "points", crs = "local")
terra::as.data.frame(sq)
... но я получаю только пустые значения.
data frame with 0 columns and 0 rows
Каков правильный способ получить матрицу/data.frame координат в этой ситуации?
Да, пожалуйста, добавьте это как ответ, чтобы я мог его принять. Не знал, что функция geom
тоже возвращает координаты - спасибо!
terra::geom()
возвращает матрицу с i.a. координатные столбцы, которые вы можете преобразовать в фрейм данных следующим образом (используя ваш пример данных sq):
sq |> geom() |> as.data.frame()
geom part x y hole
1 1 1 0 0 0
2 2 1 1 0 0
3 3 1 1 1 0
4 4 1 0 1 0
5 5 1 0 0 0
Чтобы получить координаты SpatVector, вы можете использовать crds
или geom
library(terra)
sq = terra::vect(cbind(c(0, 1, 1, 0, 0), c(0, 0, 1, 1, 0)), type = "points", crs = "local")
crds(sq)
# x y
#[1,] 0 0
#[2,] 1 0
#[3,] 1 1
#[4,] 0 1
#[5,] 0 0
geom(sq)
# geom part x y hole
#[1,] 1 1 0 0 0
#[2,] 2 1 1 0 0
#[3,] 3 1 1 1 0
#[4,] 4 1 0 1 0
#[5,] 5 1 0 0 0
geom(sq, wkt=TRUE)
#[1] "POINT (0 0)" "POINT (1 0)" "POINT (1 1)" "POINT (0 1)" "POINT (0 0)"
Если вам также нужны атрибуты (но в этом примере их нет), вы можете использовать as.data.frame
с соответствующим значением для аргумента «geom».
as.data.frame(sq, geom = "XY")
# x y
#1 0 0
#2 1 0
#3 1 1
#4 0 1
#5 0 0
as.data.frame(sq, geom = "WKT")
# geometry
#1 POINT (0 0)
#2 POINT (1 0)
#3 POINT (1 1)
#4 POINT (0 1)
#5 POINT (0 0)
terra::geom(sq)
то, что вам нужно?