group-telegram.com/sputnikDZZ/3471
Create:
Last Update:
Last Update:
Создание векторных объектов: точки
Зададим координаты (долготу и широту) точек и составим из них матрицу с помощью функции cbind()
:
longitude <- c(-116.7, -120.4, -116.7, -113.5, -115.5, -120.8, -119.5, -113.7, -113.7, -110.7)
latitude <- c(45.3, 42.6, 38.9, 42.1, 35.7, 38.9, 36.2, 39, 41.6, 36.9)
lonlat <- cbind(longitude, latitude)
Для выполнения этих операций пакет
terra
не нужен. А вот дальше он понадобится, так что не забудьте его загрузить с помощью library(terra)
.Обратите внимание, что в отличие от географии, где первой координатой указывается широта (
latitude
), здесь первой указана долгота (longitude
). Так принято во многих компьютерных программах для работы с пространственными данными. Здесь работают традиции не географии, а математики: долгота соответствует координате Х декартовой системы координат, которая обычно в математике указывается первой.Для создания объектов
SpatVector
с нуля или из файлов данных служит функция vect
пакета terra
pts <- vect(lonlat)
Фактически,
vect
является методом класса SpatVector
. Мы будем часто называть подобные методы функциями, поскольку путаницы это не создаст.Заглянем внутрь
pts
:pts
## class : SpatVector
## geometry : points
## dimensions : 10, 0 (geometries, attributes)
## extent : -120.8, -110.7, 35.7, 45.3 (xmin, xmax, ymin, ymax)
## coord. ref. :
geom(pts)
## geom part x y hole
## [1,] 1 1 -116.7 45.3 0
## [2,] 2 1 -120.4 42.6 0
## [3,] 3 1 -116.7 38.9 0
## [4,] 4 1 -113.5 42.1 0
## [5,] 5 1 -115.5 35.7 0
## [6,] 6 1 -120.8 38.9 0
## [7,] 7 1 -119.5 36.2 0
## [8,] 8 1 -113.7 39.0 0
## [9,] 9 1 -113.7 41.6 0
## [10,] 10 1 -110.7 36.9 0
Видно, что это объект класса
SpatVector
, который состоит из точек (geometry: points
). Всего этих точек 10 и атрибутов у данных нет (dimensions: 10, 0 (geometries, attributes)
). Экстент (extent
) или охват данных автоматически рассчитан по координатам точек. В свойствах объекта указана система координат (coord. ref.
). При создании pts
мы её не задали. Давайте сделаем это сейчас.Задать или узнать текущую систему координат (Coordinate Reference System, CRS) можно с помощью функции
crs
, знакомой нам по работе с растровыми данными:crdref <- "+proj=longlat +datum=WGS84"
crs(pts) <- crdref
pts
## class : SpatVector
## geometry : points
## dimensions : 10, 0 (geometries, attributes)
## extent : -120.8, -110.7, 35.7, 45.3 (xmin, xmax, ymin, ymax)
## coord. ref. : +proj=longlat +datum=WGS84 +no_defs
Такого же результата можно было добиться, задав систему координат при создании
pts
pts <- vect(lonlat, crs=crdref)
pts
Теперь добавим к нашему объекту атрибуты (переменные). Сначала создадим таблицу, число строк которой должно совпадать с числом точек (линий, полигонов, …) в векторном объекте:
precip_val <- runif(nrow(lonlat), min=0, max=100)
dt <- data.frame(ID=1:nrow(lonlat), precip=precip_val)
Здесь мы сгенерировали случайные значения осадков (
precip_val
) в диапазоне от 0 до 100, которых будет столько же, сколько и точек. Затем эти значения поместили в таблицу атрибутов.Создадим новый векторный объект
ptsv
с заданными атрибутамиptsv <- vect(lonlat, atts=dt, crs=crdref)
ptsv
## class : SpatVector
## geometry : points
## dimensions : 10, 2 (geometries, attributes)
## extent : -120.8, -110.7, 35.7, 45.3 (xmin, xmax, ymin, ymax)
## coord. ref. : +proj=longlat +datum=WGS84 +no_defs
## names : ID precip
## type : <int> <num>
## values : 1 98.93
## 2 15.76
## 3 68.81
У
ptsv
два атрибута: идентификатор точки (ID
) и значение осадков в точке (precip
).#R
BY Спутник ДЗЗ
Share with your friend now:
group-telegram.com/sputnikDZZ/3471