Similar presentations:
Установка пакетов R. Лабораторная работа 5
1.
УСТАНОВКА ПАКЕТОВ RПеред
началом
работ
с
пространственными
данными
необходимо
установить
следующие пакеты:
sp,
raster,
install.packages(“sp”)
install.packages(“raster”)
Примечание: для дальнейшей работы вам понадобиться директория
к папке Lab5 Загрузите его пожалуйста с флеш-карты
преподавателя
2.
РАБОТА С ВЕКТОРНЫМИ МОДЕЛЯМИ ДАННЫХПакет sp является одним из основных пакетов в работе с пространственными
данными. Пакет sp представляет пространственные данные в виде классов.
Пакет sp вводит ряд классов с именами, которые начинаются с Spatial. Для
векторных данных, основные типы являются SpatialPoints, SpatialLines
и SpatialPolygons. Эти классы представляют только геометрию. Чтобы также
хранить атрибуты, классы доступны с этими именами плюс DataFrame, например,
SpatialPolygonsDataFrame
и
SpatialPointsDataFrame.
При
обращении к любому объекту с именем, которое начинается с Spatial него,
обычно записывается Spatial*. При обращении к a SpatialPolygons
или SpatialPolygonsDataFrame объекту, который обычно используется для
записи SpatialPolygons*.
3.
РАБОТА С ВЕКТОРНЫМИ МОДЕЛЯМИ ДАННЫХПеред началом работы вам потребуется узнать о доступе ваших данных
программному обеспечению R. Для этого на командной строке наберите
следующую команду:
> getwd()
[1] "C:/Users/…/Desktop/Lab5"
Если в результате вы получите другую директорию, то вы должны будете изменить
вашу директорию чтобы вам было доступно ваши данные. Для этого вам следует
изменить директорию следующим образом:
> setwd("C:/Users/.../Desktop/Lab5")
Примечание: Обратите внимание на знаки деления они должны выглядеть таким
образом: “/”.
4.
РАБОТА С ВЕКТОРНЫМИ МОДЕЛЯМИ ДАННЫХДля использования функции Spatial и spPoints требуется установить пакеты
raster и sp.
library("sp")
library("raster")
longitude <- c(-118.7, -115.1, -116.1, -117.5)
latitude <- c(43.3, 42.6, 40.9, 44.1)
Далее создаем объект с помощью функции SpatialPoints
lonlat <- cbind(longitude, latitude)
pts <- SpatialPoints(lonlat)
5.
РАБОТА С ВЕКТОРНЫМИ МОДЕЛЯМИ ДАННЫХИспользуйте базовую функцию pts чтобы увидеть вид вашего объекта.
class(pts)
В окне консоли у вас выйдет информация о вашем фрейме данных
## [1] "SpatialPoints"
## attr(,"package")
## [1] "sp"
6.
РАБОТА С ВЕКТОРНЫМИ МОДЕЛЯМИ ДАННЫХИспользуйте еще одну базовую функцию showDefault чтобы увидеть вид
вашего объекта изнутри.
showDefault(pts)
В окне консоли у вас выйдет информация о вашем фрейме данных
## An object of class "SpatialPoints"
## Slot "coords":
##
longitude latitude
## [1,]
-118.7
43.3
## [2,]
-115.1
42.6
## [3,]
-116.1
40.9
## [4,]
-117.5
44.1
##
## Slot "bbox":
##
min
max
## longitude
-118.7
-115.1
## latitude
40.9
44.1
## Slot "proj4string":
## CRS arguments: NA
7.
РАБОТА С ВЕКТОРНЫМИ МОДЕЛЯМИ ДАННЫХИспользуйте функцию pts чтобы увидеть информацию об объекте.
pts
В окне консоли у вас выйдет информация о вашем фрейме данных
## class : SpatialPoints
## features : 4
## extent : -118.7, -115.1, 40.9, 44.1 (xmin, xmax, ymin, ymax)
## coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84
+towgs84=0,0,0
8.
РАБОТА С ВЕКТОРНЫМИ МОДЕЛЯМИ ДАННЫХМы
можем
использовать
SpatialPoints
объект
для
создания
SpatialPointsDataFrame объекта. Сначала нам нужно число data.frame с
таким же количеством строк, что и геометрия.
df <- data.frame(ID=1: nrow(lonlat), precip=(latitude -30)^3)
Объедините SpatialPoints с data.frame.
ptsdf <- SpatialPointsDataFrame(pts, data = df)
ptsdf
## class : SpatialPointsDataFrame
## features : 4
## extent : -118.7, -115.1, 40.9, 44.1 (xmin, xmax, ymin, ymax)
## coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84
+towgs84=0,0,0
## variables : 2
## names : ID, precip
## min values : 1, 1295.029
## max values : 4, 2803.221
9.
РАБОТА С ВЕКТОРНЫМИ МОДЕЛЯМИ ДАННЫХДля того чтобы увидеть что находиться внутри вашего объекта зададим команду
str
str (ptsdf)
## Formal class 'SpatialPointsDataFrame' [package "sp"] with 5
slots
## ..@ data :'data.frame': 4 obs. of 2 variables:
## .. ..$ ID : int [1:4] 1 2 3 4
## .. ..$ precip: num [1:4] 2353 2000 1295 2803
## ..@ coords.nrs : num(0)
## ..@ coords : num [1:4, 1:2] -118.7 -115.1 -116.1 -117.5 43.3
...
## .. ..- attr(*, "dimnames")=List of 2
## .. .. ..$ : NULL
## .. .. ..$ : chr [1:2] "longitude" "latitude"
## ..@ bbox : num [1:2, 1:2] -118.7 40.9 -115.1 44.1
## .. ..- attr(*, "dimnames")=List of 2
## .. .. ..$ : chr [1:2] "longitude" "latitude"
## .. .. ..$ : chr [1:2] "min" "max"
## ..@ proj4string:Formal class 'CRS' [package "sp"] with 1
slot
## .. .. ..@ projargs: chr "+proj=longlat +datum=WGS84
+ellps=WGS84 +towgs84=0,0,0"
10.
РАБОТА С ВЕКТОРНЫМИ МОДЕЛЯМИ ДАННЫХ…или используйте команду showDefault(ptsdf).
## An object of class "SpatialPointsDataFrame"
## Slot "data":
##
ID
precip
##
1
1 2352.637
##
2
2 2000.376
##
3
3 1295.029
##
4
4 2803.221
##
## Slot "coords.nrs":
## numeric(0)
##
## Slot "coords":
##
longitude
latitude
## [1,] -118.7
43.3
## [2,] -115.1
42.6
## [3,] -116.1
40.9
## [4,] -117.5
44.1
## Slot "bbox":
##
min
max
## longitude
-118.7 -115.1
## latitude
40.9
44.1
## Slot "proj4string":
## CRS arguments:
## +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0
11.
РАБОТА С ВЕКТОРНЫМИ МОДЕЛЯМИ ДАННЫХСоздать
объект
SpatialPoints
было
легко.
Создание
объектов
SpatialLines и SpatialPolygons немного сложнее, но задание стилей
относительно просто с spLines
и
spPolygons
функциями (из
пакета raster).
Создаем координаты вершин линий и полигонов следующим образом:
lon <- c(-116.7, -120.4, -116.7, -119.5, -118.5, -120.8, 119.5, -113.7, -113.7, -110.7)
lat <- c(45.3, 42.6, 40.9, 40.1, 38.7, 38.9, 36.2, 39, 41.6,
44.9)
lonlat <- cbind(lon, lat)
12.
РАБОТА С ВЕКТОРНЫМИ МОДЕЛЯМИ ДАННЫХИспользуйте функцию spLine чтобы увидеть информацию об объекте.
lns <- spLines(lonlat, crs = crdref)
lns
В окне консоли у вас выйдет информация о вашем фрейме данных
## class : SpatialLines
## features : 1
## extent : -120.8, -110.7, 36.2, 45.3 (xmin, xmax, ymin, ymax)
## coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84
+towgs84=0,0,0
13.
РАБОТА С ВЕКТОРНЫМИ МОДЕЛЯМИ ДАННЫХCтруктура класса SpatialPolygons несколько сложна, так как она должна
учитывать возможность множественных многоугольников, каждая из которых
состоит из нескольких подполигонов, некоторые из которых могут быть
«островами».
str (pols)
## Formal class 'SpatialPolygons' [package "sp"] with 4 slots
## ..@ polygons :List of 1
## .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
## .. .. .. ..@ Polygons :List of 1
## .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
## .. .. .. .. .. .. ..@ labpt : num [1:2] -116.2 41.4
## .. .. .. .. .. .. ..@ area : num 45.3
## .. .. .. .. .. .. ..@ hole : logi FALSE
## .. .. .. .. .. .. ..@ ringDir: int 1
## .. .. .. .. .. .. ..@ coords : num [1:11, 1:2] -117 -111 -114 -114 -120
## ... .. .. .. ..@ plotOrder: int 1
## .. .. .. ..@ labpt : num [1:2] -116.2 41.4
## .. .. .. ..@ ID : chr "1"
## .. .. .. ..@ area : num 45.3
## ..@ plotOrder : int 1
## ..@ bbox : num [1:2, 1:2] -120.8 36.2 -110.7 45.3
## .. ..- attr(*, "dimnames")=List of 2
## .. .. ..$ : chr [1:2] "x" "y"
## .. .. ..$ : chr [1:2] "min" "max"
## ..@ proj4string:Formal class 'CRS' [package "sp"] with 1 slot
## .. .. ..@ projargs: chr "+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0"
14.
РАБОТА С ВЕКТОРНЫМИ МОДЕЛЯМИ ДАННЫХК счастью, вам не нужно понимать, как организованы эти структуры. Главное – это
уметь понимать модели этих объектов, их геометрии (координаты), имя, системы
координат и атрибуты.
В конечном итоге мы получим график где показаны наши модели данных.
plot(pols, axes=TRUE, las=1)
plot(pols, border='blue', col='yellow', lwd=3, add=TRUE)
points(pts, col='red', pch=20, cex=3)
15.
ОТОБРАЖЕНИЕ ФОНОВОЙ КАРТЫ (CHOROPLETHMAP) С ПОМОЩЬЮ ПАКЕТА “SP”
Ниже приведен полный скрипт программы:
library("sp")
library("raster")
longitude <- c(-118.7, -115.1, -116.1, -117.5)
latitude <- c(43.3, 42.6, 40.9, 44.1)
lonlat <- cbind(longitude, latitude)
pts <- SpatialPoints(lonlat)
class(pts)
showDefault(pts)
crdref <- CRS('+proj=lonlat +datum=WGS84')
pts <- SpatialPoints(lonlat, proj4string = crdref)
pts
df <- data.frame(ID=1: nrow(lonlat), precip=(latitude -30)^3)
ptsdf <- SpatialPointsDataFrame(pts, data = df)
ptsdf
str(ptsdf)
showDefault(ptsdf)
lon <- c(-116.7, -120.4, -116.7, -119.5, -118.5, -120.8, -119.5, -113.7, -113.7, 110.7)
lat <- c(45.3, 42.6, 40.9, 40.1, 38.7, 38.9, 36.2, 39, 41.6, 44.9)
lonlat <- cbind(lon, lat)
lns <- spLines(lonlat, crs = crdref)
lns
pols <- spPolygons(lonlat, crs = crdref)
pols
str(pols)
plot(pols, axes=TRUE, las=1)
plot(pols, border='blue', col='yellow', lwd=3, add=TRUE)
points(pts, col='red', pch=20, cex=3)