depok_vect <- vect("kota_depok_2020.shp")
depok_vect
## class : SpatVector
## geometry : polygons
## dimensions : 11, 8 (geometries, attributes)
## extent : 106.7167, 106.9188, -6.461283, -6.314414 (xmin, xmax, ymin, ymax)
## source : kota_depok_2020.shp
## coord. ref. : lon/lat WGS 84 (EPSG:4326)
## names : Shape_Leng Shape_Area ADM3_EN ADM3_PCODE ADM2_EN
## type : <num> <num> <chr> <chr> <chr>
## values : 0.1951 0.001207 Beji ID3276050 Kota Depok
## 0.2806 0.001583 Bojongsari ID3276011 Kota Depok
## 0.2442 0.001271 Cilodong ID3276031 Kota Depok
## ADM2_PCODE ADM1_EN ADM1_PCODE
## <chr> <chr> <chr>
## ID3276 Jawa Barat ID32
## ID3276 Jawa Barat ID32
## ID3276 Jawa Barat ID32Eksplorasi Data Spasial
Manipulasi Data Vektor
Pada bagian ini ditunjukkan beberapa cara dalam memanipulasi data vector
plot(depok_vect, "ADM3_EN")Dasar
Atribut dan geometri
Untuk menampilkan informasi atribut dari SpatVector, gunakan:
depok_df <- as.data.frame(depok_vect)
depok_df| Shape_Leng | Shape_Area | ADM3_EN | ADM3_PCODE | ADM2_EN | ADM2_PCODE | ADM1_EN | ADM1_PCODE |
|---|---|---|---|---|---|---|---|
| 0.1950645 | 0.0012065 | Beji | ID3276050 | Kota Depok | ID3276 | Jawa Barat | ID32 |
| 0.2805737 | 0.0015832 | Bojongsari | ID3276011 | Kota Depok | ID3276 | Jawa Barat | ID32 |
| 0.2442310 | 0.0012712 | Cilodong | ID3276031 | Kota Depok | ID3276 | Jawa Barat | ID32 |
| 0.3565971 | 0.0017641 | Cimanggis | ID3276040 | Kota Depok | ID3276 | Jawa Barat | ID32 |
| 0.1552971 | 0.0008562 | Cinere | ID3276061 | Kota Depok | ID3276 | Jawa Barat | ID32 |
| 0.1708723 | 0.0008929 | Cipayung | ID3276021 | Kota Depok | ID3276 | Jawa Barat | ID32 |
Ekstrak geometri sebagai matriks juga dapat dilakukan (tapi jarang sekali diperlukan)
depok_mtx <- geom(depok_vect)
head(depok_mtx)
## geom part x y hole
## [1,] 1 1 106.8353 -6.356507 0
## [2,] 1 1 106.8352 -6.357034 0
## [3,] 1 1 106.8352 -6.357333 0
## [4,] 1 1 106.8352 -6.357709 0
## [5,] 1 1 106.8352 -6.358073 0
## [6,] 1 1 106.8352 -6.358186 0Well-Known Text (WKT)
Skema penulisan bentuk representasi dari suatu geometri secara sederhana diatur ke dalam sebuah kumpulan string menjadi format teks baku yang dikenal dengan Well-Known Text (WKT)1.
1 Lott, Roger. 2015. “Geographic Information-Well-Known Text Representation of Coordinate Reference Systems.” Open Geospatial Consortium. http://docs.opengeospatial.org/is/12-063r5/12-063r5.html
Bentuk geometri yang umum digunakan ditulis sebagai berikut:
| tipe | deskripsi |
|---|---|
POINT |
single point geometry |
MULTIPOINT |
set of points |
LINESTRING |
single linestring (two or more points connected by straight lines) |
MULTILINESTRING |
set of linestrings |
POLYGON |
exterior ring with zero or more inner rings, denoting holes |
MULTIPOLYGON |
set of polygons |
GEOMETRYCOLLECTION |
set of the geometries above |
Sebagai contoh berikut ini adalah bentuk 7 geometri yang umum diketahui:
Sehingga WKT dalam bentuk geometri pada gambar di atas:
POINT (0 1)
MULTIPOINT ((1 1), (2 2), (4 1), (2 3), (1 4))
LINESTRING (1 1, 5 5, 5 6, 4 6, 3 4, 2 3)
MULTILINESTRING ((1 1, 5 5, 5 6, 4 6, 3 4, 2 3), (3 0, 4 1, 2 1))
POLYGON ((2 1, 3 1, 5 2, 6 3, 5 3, 4 4, 3 4, 1 3, 2 1),
(2 2, 3 3, 4 3, 4 2, 2 2))
MULTIPOLYGON (((2 1, 3 1, 5 2, 6 3, 5 3, 4 4, 3 4, 1 3, 2 1),
(2 2, 3 3, 4 3, 4 2, 2 2)), ((3 7, 4 7, 5 8, 3 9, 2 8, 3 7)))
GEOMETRYCOLLECTION (
POLYGON ((2 1, 3 1, 5 2, 6 3, 5 3, 4 4, 3 4, 1 3, 2 1),
(2 2 , 3 3, 4 3, 4 2, 2 2)),
LINESTRING (1 6, 5 10, 5 11, 4 11, 3 9, 2 8),
POINT (2 5),
POINT (5 4)
)
Data tersebut dapat dilihat dengan sintaks berikut
depok_wkt <- geom(depok_vect, wkt=TRUE)
substr(depok_wkt, 1, 50)
## [1] "POLYGON ((106.835259 -6.356507, 106.835175 -6.3570"
## [2] "POLYGON ((106.730734 -6.3605, 106.73082 -6.360508,"
## [3] "POLYGON ((106.859915 -6.398481, 106.86 -6.39849, 1"
## [4] "POLYGON ((106.850464 -6.336821, 106.850632 -6.3368"
## [5] "POLYGON ((106.807165 -6.314414, 106.80893 -6.31451"
## [6] "POLYGON ((106.809376 -6.413101, 106.809749 -6.4137"
## [7] "POLYGON ((106.79044 -6.3476, 106.79045 -6.34844, 1"
## [8] "POLYGON ((106.800798 -6.383479, 106.800775 -6.3837"
## [9] "POLYGON ((106.769799 -6.356591, 106.770083 -6.3567"
## [10] "POLYGON ((106.86012 -6.372697, 106.86038 -6.372718"
## [11] "POLYGON ((106.88813 -6.38563, 106.888646 -6.38578,"Variabel
Ekstrak variabel tertentu dapat dilakukan seperti pada data frame
depok_vect$ADM3_EN
## [1] "Beji" "Bojongsari" "Cilodong" "Cimanggis" "Cinere"
## [6] "Cipayung" "Limo" "Pancoran Mas" "Sawangan" "Sukma Jaya"
## [11] "Tapos"Berbeda dengan cara di atas, ekstrak satu atau lebih variabel juga dapat dilakukan beserta bentuk geometrinya
depok_vect[, "ADM3_EN"]
## class : SpatVector
## geometry : polygons
## dimensions : 11, 1 (geometries, attributes)
## extent : 106.7167, 106.9188, -6.461283, -6.314414 (xmin, xmax, ymin, ymax)
## source : kota_depok_2020.shp
## coord. ref. : lon/lat WGS 84 (EPSG:4326)
## names : ADM3_EN
## type : <chr>
## values : Beji
## Bojongsari
## CilodongVariabel baru juga dapat ditambahkan ke SpatVector seperti halnya pada data frame
depok_vect$lets <- sample(letters, nrow(depok_vect))
depok_vect
## class : SpatVector
## geometry : polygons
## dimensions : 11, 9 (geometries, attributes)
## extent : 106.7167, 106.9188, -6.461283, -6.314414 (xmin, xmax, ymin, ymax)
## source : kota_depok_2020.shp
## coord. ref. : lon/lat WGS 84 (EPSG:4326)
## names : Shape_Leng Shape_Area ADM3_EN ADM3_PCODE ADM2_EN
## type : <num> <num> <chr> <chr> <chr>
## values : 0.1951 0.001207 Beji ID3276050 Kota Depok
## 0.2806 0.001583 Bojongsari ID3276011 Kota Depok
## 0.2442 0.001271 Cilodong ID3276031 Kota Depok
## ADM2_PCODE ADM1_EN ADM1_PCODE lets
## <chr> <chr> <chr> <chr>
## ID3276 Jawa Barat ID32 o
## ID3276 Jawa Barat ID32 d
## ID3276 Jawa Barat ID32 pMenghapus variabel
p$lets <- NULLMerge
Menambahkan atribut baru berdasarkan kolom unik dapat dilakukan dengan perintah merge
df_val <- data.frame(Kecamatan = depok_vect$ADM3_EN,
Value = round(runif(length(depok_vect), 100, 1000)))
depok_merge <- merge(depok_vect, df_val, by.x="ADM3_EN", by.y="Kecamatan")
depok_merge
## class : SpatVector
## geometry : polygons
## dimensions : 11, 10 (geometries, attributes)
## extent : 106.7167, 106.9188, -6.461283, -6.314414 (xmin, xmax, ymin, ymax)
## coord. ref. : lon/lat WGS 84 (EPSG:4326)
## names : ADM3_EN Shape_Leng Shape_Area ADM3_PCODE ADM2_EN
## type : <chr> <num> <num> <chr> <chr>
## values : Beji 0.1951 0.001207 ID3276050 Kota Depok
## Bojongsari 0.2806 0.001583 ID3276011 Kota Depok
## Cilodong 0.2442 0.001271 ID3276031 Kota Depok
## ADM2_PCODE ADM1_EN ADM1_PCODE lets Value
## <chr> <chr> <chr> <chr> <num>
## ID3276 Jawa Barat ID32 o 123
## ID3276 Jawa Barat ID32 d 938
## ID3276 Jawa Barat ID32 p 275Baris/record
Memilih baris/record tertentu pada SpatVector
beji <- depok_vect[which(depok_vect$ADM3_EN == 'Beji'), ]
beji
## class : SpatVector
## geometry : polygons
## dimensions : 1, 9 (geometries, attributes)
## extent : 106.7943, 106.8419, -6.390085, -6.354528 (xmin, xmax, ymin, ymax)
## coord. ref. : lon/lat WGS 84 (EPSG:4326)
## names : Shape_Leng Shape_Area ADM3_EN ADM3_PCODE ADM2_EN ADM2_PCODE
## type : <num> <num> <chr> <chr> <chr> <chr>
## values : 0.1951 0.001207 Beji ID3276050 Kota Depok ID3276
## ADM1_EN ADM1_PCODE lets
## <chr> <chr> <chr>
## Jawa Barat ID32 oAppend
depok_rast <- rast('kota_depok.tif')
dim(depok_rast) <- c(2, 2)
values(depok_rast) <- 1:4
names(depok_rast) <- 'zona'
depok_zone <- as.polygons(depok_rast)
depok_zone
## class : SpatVector
## geometry : polygons
## dimensions : 4, 1 (geometries, attributes)
## extent : 106.7167, 106.9188, -6.461283, -6.314414 (xmin, xmax, ymin, ymax)
## coord. ref. : lon/lat WGS 84 (EPSG:4326)
## names : zona
## type : <int>
## values : 1
## 2
## 3depok_zone2 <- depok_zone[2,]
plot(depok_vect)
plot(depok_zone, add=TRUE, border='blue', lwd=5)
plot(depok_zone2, add=TRUE, border='red', lwd=2, col='red')depok_append <- rbind(depok_vect, depok_zone)
depok_append
## class : SpatVector
## geometry : polygons
## dimensions : 15, 10 (geometries, attributes)
## extent : 106.7167, 106.9188, -6.461283, -6.314414 (xmin, xmax, ymin, ymax)
## source : kota_depok_2020.shp
## coord. ref. : lon/lat WGS 84 (EPSG:4326)
## names : Shape_Leng Shape_Area ADM3_EN ADM3_PCODE ADM2_EN
## type : <num> <num> <chr> <chr> <chr>
## values : 0.1951 0.001207 Beji ID3276050 Kota Depok
## 0.2806 0.001583 Bojongsari ID3276011 Kota Depok
## 0.2442 0.001271 Cilodong ID3276031 Kota Depok
## ADM2_PCODE ADM1_EN ADM1_PCODE lets zona
## <chr> <chr> <chr> <chr> <int>
## ID3276 Jawa Barat ID32 o NA
## ID3276 Jawa Barat ID32 d NA
## ID3276 Jawa Barat ID32 p NAAggregate
Agregasi juga dapat dilakukan pada data spasial yang dilakukan pada atribut dengan nilai yang sama, teknik ini dikenal pula dengan istilah dissolve
depok_aggr <- aggregate(depok_vect, by='ADM2_EN')
plot(depok_aggr)Jika ditambahkan dengan depok_zone pada data sebelumnya
dz <- aggregate(depok_zone)
plot(dz, col='light gray', border='light gray', lwd=5)
plot(depok_aggr, add=TRUE, col=rainbow(3), lwd=3, border='white')Overlay
Hapus
depok_erase <- erase(depok_vect, depok_zone2)
plot(depok_erase)Intersect
depok_intersect <- intersect(depok_vect, depok_zone2)
plot(depok_intersect)Crop
# xmin, xmax, ymin, ymax
crop_box <- ext(106.77, 106.82, -6.46, -6.40)
depok_crop <- crop(depok_vect, crop_box)
plot(depok_crop)plot(depok_vect)
plot(crop_box, add=TRUE, lwd=3, col="red")
plot(depok_crop, col='light blue', add=TRUE)
plot(crop_box, add=TRUE, lwd=3, border="blue")Union
depok_union <- union(depok_vect, depok_zone)
depok_union
## class : SpatVector
## geometry : polygons
## dimensions : 27, 10 (geometries, attributes)
## extent : 106.7167, 106.9188, -6.461283, -6.314414 (xmin, xmax, ymin, ymax)
## coord. ref. : lon/lat WGS 84 (EPSG:4326)
## names : Shape_Leng Shape_Area ADM3_EN ADM3_PCODE ADM2_EN ADM2_PCODE
## type : <num> <num> <chr> <chr> <chr> <chr>
## values : 0.1951 0.001207 Beji ID3276050 Kota Depok ID3276
## 0.1951 0.001207 Beji ID3276050 Kota Depok ID3276
## 0.1951 0.001207 Beji ID3276050 Kota Depok ID3276
## ADM1_EN ADM1_PCODE lets zona
## <chr> <chr> <chr> <int>
## Jawa Barat ID32 o 1
## Jawa Barat ID32 o 2
## Jawa Barat ID32 o 3Dapat dilihat bahwa terdapat banyak poligon yang berisi semua kombinasi poligon dan atribut
plot(depok_union, col=sample(rainbow(length(depok_union))))Cover
cover adalah kombinasi dari intersect dan union. intersect mengembalikan geometri baru dengan atribut yang telah terpotong dari dua gugus data. union menggabungkan kombinasi kedua data. cover mengembalikan hasil pemotongan dan penggabungan geometri dan atribut dari dua gugus data
depok_cover <- cover(depok_vect, depok_zone[c(1, 4), ])
depok_cover
## class : SpatVector
## geometry : polygons
## dimensions : 11, 10 (geometries, attributes)
## extent : 106.7167, 106.9188, -6.461283, -6.314414 (xmin, xmax, ymin, ymax)
## coord. ref. : lon/lat WGS 84 (EPSG:4326)
## names : Shape_Leng Shape_Area ADM3_EN ADM3_PCODE ADM2_EN
## type : <num> <num> <chr> <chr> <chr>
## values : 0.1951 0.001207 Beji ID3276050 Kota Depok
## 0.2806 0.001583 Bojongsari ID3276011 Kota Depok
## 0.2442 0.001271 Cilodong ID3276031 Kota Depok
## ADM2_PCODE ADM1_EN ADM1_PCODE lets zona
## <chr> <chr> <chr> <chr> <int>
## ID3276 Jawa Barat ID32 o NA
## ID3276 Jawa Barat ID32 d NA
## ID3276 Jawa Barat ID32 p NAplot(depok_cover)Difference
Perbedaan simetris dari dua SpatVector
depok_dif <- symdif(depok_zone, depok_vect)
depok_dif
## class : SpatVector
## geometry : polygons
## dimensions : 4, 1 (geometries, attributes)
## extent : 106.7167, 106.9188, -6.461283, -6.314414 (xmin, xmax, ymin, ymax)
## coord. ref. : lon/lat WGS 84 (EPSG:4326)
## names : zona
## type : <int>
## values : 1
## 2
## 3plot(depok_dif, col=rainbow(length(depok_dif)))Spatial query
Berbeda dengan query pada umumnya, query pada data spasial dalam hal ini poligon dapat dilakukan dengan titik (point-in-polygon query)
# menentukan titik
pts <- matrix(c(106.75, 106.80, 106.83, 106.90, -6.43, -6.38, -6.4, -6.41), ncol=2)
# membuat data vector titik
spts <- vect(pts, crs=crs(depok_vect))plot(depok_zone, col='light blue', lwd=2)
points(spts, col='light gray', pch=20, cex=6)
text(spts, 1:nrow(pts), col='red', font=2, cex=1.5)
lines(depok_vect, col='blue', lwd=2)Kemudian untuk mendapatkan informasi pada titik tersebut, gunakan
extract(spts, depok_vect)
## id.y id.x
## [1,] 1 NAextract(spts, depok_zone)
## id.y id.x
## [1,] 1 NAManipulasi Data Raster
Terdapat beberapa format data raster yang umum digunakan sebagai bagian dari data penginderaan jauh (remote sensing) yaitu GeoTiff, ESRI, ENVI, dan ERDAS. Semua gugus data raster tersebut berukuran sangat besar jika dimuat ke dalam RAM sehingga penggunaannya dalam bentuk file.
Pada bahasan ini akan melibatkan fungsi-fungsi pengolahan data raster yang ada pada terra, salah satunya adalah raster aljabar. Raster yang digunakan dibuat di dalam fungsi rast yang disimpan ke dalam memory (RAM) secara temporary.
Membuat objek SpatRaster
Pengaturan bawaan fungsi rast adalah membuat struktur data raster dengan longitude/latitude dan 1-by-1 degree cell. Pengaturan ini dapat diubah dengan memasukkan sejumlah argumen. Proyeksi bisa diatur pada data raster namun untuk mengubahnya harus menggunakan fungsi projection.
# rast dengan argumen default
rst <- rast()
rst
## class : SpatRaster
## dimensions : 180, 360, 1 (nrow, ncol, nlyr)
## resolution : 1, 1 (x, y)
## extent : -180, 180, -90, 90 (xmin, xmax, ymin, ymax)
## coord. ref. : lon/lat WGS 84# rast dengan input argumen
rst <- rast(ncol=36, nrow=18, xmin=-1000, xmax=1000, ymin=-100, ymax=900)# mengubah resolusi
res(rst)
## [1] 55.55556 55.55556
res(rst) <- 100
res(rst)
## [1] 100 100Mengubah jumlah kolom (berefek pada resolusi)
ncol(rst)
## [1] 20
ncol(rst) <- 18
ncol(rst)
## [1] 18
res(rst)
## [1] 111.1111 100.0000Mengatur CRS (mendefinisikan proyeksi)
crs(rst) <- "+proj=utm +zone=48 +datum=WGS84"
rst
## class : SpatRaster
## dimensions : 10, 18, 1 (nrow, ncol, nlyr)
## resolution : 111.1111, 100 (x, y)
## extent : -1000, 1000, -100, 900 (xmin, xmax, ymin, ymax)
## coord. ref. : +proj=utm +zone=48 +datum=WGS84 +units=m +no_defsContoh rast di atas hanya membuat geometri pada data raster dengan mendefinisikan baris dan kolom, kemudian posisi pada ruang geografisnya, namun belum ada nilai pada cell tersebut.
rst <- rast(ncol=10, nrow=10)
ncell(rst)
## [1] 100
hasValues(rst)
## [1] FALSEGunakan fungsi values
values(rst) <- runif(ncell(rst))
hasValues(rst)
## [1] TRUE
values(rst)[1:10]
## [1] 0.373774545 0.793159979 0.876560054 0.019921316 0.656087097 0.944766912
## [7] 0.969056357 0.007533308 0.954169897 0.626943715
plot(rst, main='Raster dengan 100 cells')Pada beberapa kasus jika merubah besaran kolom dan baris maka nilai yang berasosiasi pada cell tersebut akan hilang. Kebanyakan studi kasus, jika resolusi diubah akan berdampak pada jumlah baris dan kolom. Nilai cell tidak akan hilang saat merubah extent karena perubahan ini menyesuaikan resolusi, namun tidak mengubah jumlah baris atau kolom.
Hubungan antara resolusi, spatial extent, dan jumlah piksel
Raster terdiri atas sekumpulan piksel dengan dimensi dan ukuran yang sama mewakili luas area yang menutupi permukaan bumi. Ukuran luas permukaan tersebut dikenal sebagai resolusi citra spasial. Misalnya, suatu gambar memiliki resolusi spasial 1m artinya masing-masing piksel pada citra tersebut mewakili luas 1m x 1m area2.
Raster pada extent yang sama tetapi memiliki lebih banyak piksel akan memiliki resolusi spasial yang semakin tinggi.
Spatial extent pada raster melambangkan koordinat x dan y pada tepi ruang geografis. Informasi ini, dalam penambahan ukuran cell memberikan perintah bagaimana melakukan render setiap piksel pada ruang dimensi yang ada.
Extent dan resolusi spasial sangat berkaitan. Untuk menghitung luas suatu raster, dibutuhkan koordinat kiri bawah dari raster terebut. Dalam sistem koordinat UTM dengan satuan meter, dapat ditambahkan jumlah kolom dan baris pada tepi koordinat lokasi raster dikalikan dengan ukuran piksel (resolusi) dari raster tersebut.
Raster aljabar
Banyak fungsi generic yang memungkinkan operasi aljabar sederhana pada objek raster seperti operator +, -, *, /, operator logika >, <, ==, !, dan fungsi seperti sqrt, max, min, dan sebagainya.
r <- rast(nrow=10, ncol=10)
values(r) <- 1:ncell(r)Lakukan operasi aljabar
s <- r + 10
s <- sqrt(s)
s <- s * r + 5
values(r) <- runif(ncell(r))
r <- round(r)
r <- r == 1Apabila menggunakan multi-layer objek dengan nomor atau layer yang berbeda, objek yang paling sedikit akan dioperasikan secara berulang. Sebagai contoh, perkalian 4-layer objek (a1, a2, a3, a4) dengan 2-layer objek (b1, b2), hasilnya menjadi (a1*b1, a2*b2, a3*b1, a4*b2).
r <- rast(ncol=5, nrow=5)
values(r) <- 1
s <- c(r, r+1)
q <- c(r, r+2, r+4, r+6)
x <- r + s + q
x
## class : SpatRaster
## dimensions : 5, 5, 4 (nrow, ncol, nlyr)
## resolution : 72, 36 (x, y)
## extent : -180, 180, -90, 90 (xmin, xmax, ymin, ymax)
## coord. ref. : lon/lat WGS 84
## source : memory
## names : lyr1, lyr2, lyr3, lyr4
## min values : 3, 6, 7, 10
## max values : 3, 6, 7, 10Fungsi summary (min, max, mean, prod, sum, median, cv, range, any, all) juga mengembalikan objek SpatRaster
a <- mean(r,s,10)
b <- sum(r,s)
st <- c(r, s, a, b)
sst <- sum(st)
sst
## class : SpatRaster
## dimensions : 5, 5, 1 (nrow, ncol, nlyr)
## resolution : 72, 36 (x, y)
## extent : -180, 180, -90, 90 (xmin, xmax, ymin, ymax)
## coord. ref. : lon/lat WGS 84
## source : memory
## name : sum
## min value : 17.33333
## max value : 17.33333Fungsi tingkat lanjut
Aggregate dan dissaggregate
r <- rast()
values(r) <- 1:ncell(r)
ra <- aggregate(r, 20)
rd <- disagg(ra, 20)Crop dan merge
r1 <- crop(r, ext(-50,0,0,30))
r2 <- crop(r, ext(-10,50,-20, 10))
m <- merge(r1, r2)
plot(m)Classify
classify dapat digunakan untuk mengganti rentang nilai tertentu dengan nilai tunggal, atau mengganti nilai tunggal dengan nilai lain
r <- rast(ncol=3, nrow=2)
values(r) <- 1:ncell(r)
values(r)
## lyr.1
## [1,] 1
## [2,] 2
## [3,] 3
## [4,] 4
## [5,] 5
## [6,] 6plot(r)Ubah semua nilai di atas 4 menjadi NA
s <- app(r, fun=function(x){ x[x < 4] <- NA; return(x)} )
as.matrix(s)
## lyr.1
## [1,] NA
## [2,] NA
## [3,] NA
## [4,] 4
## [5,] 5
## [6,] 6plot(s)Bagi raster pertama dengan 2 kali akar kuadrat raster kedua lalu ditambah 5
rs <- c(r, s)
w <- lapp(rs, fun=function(x, y){ x / (2 * sqrt(y)) + 5 } )
as.matrix(w)
## lyr1
## [1,] NA
## [2,] NA
## [3,] NA
## [4,] 6.000000
## [5,] 6.118034
## [6,] 6.224745Hapus semua nilai pada r yang berisi NA pada w
u <- mask(r, w)
as.matrix(u)
## lyr.1
## [1,] NA
## [2,] NA
## [3,] NA
## [4,] 4
## [5,] 5
## [6,] 6Mengidentifikasi nilai cell di u yang sama isinya dengan s
v <- u==s
as.matrix(v)
## lyr.1
## [1,] NaN
## [2,] NaN
## [3,] NaN
## [4,] 1
## [5,] 1
## [6,] 1Klasifikasi nilai antara 0 dan 2 menjadi 1, dan seterusnya
x <- classify(w, rbind(c(0,2,1), c(2,5,2), c(4,10,3)))
as.matrix(x)
## lyr1
## [1,] NaN
## [2,] NaN
## [3,] NaN
## [4,] 3
## [5,] 3
## [6,] 3Mengganti 2 dengan 40 dan 3 dengan 50
y <- classify(x, cbind(id=c(2,3), v=c(40,50)))
as.matrix(y)
## lyr1
## [1,] NaN
## [2,] NaN
## [3,] NaN
## [4,] 50
## [5,] 50
## [6,] 50Fungsi summarizing
Statisik deskriptif secara normal dapat menggunakan global untuk summary seluruh cell pada raster objek.
r <- rast(ncol=36, nrow=18)
values(r) <- runif(ncell(r))
global(r, mean)
## mean
## lyr.1 0.4888329zonal untuk summary berdasarkan zona atau kelas tertentu.
s <- r
values(s) <- round(runif(ncell(r)) * 5)
zonal(r, s, 'mean')
## lyr.1 lyr.1
## 1 0 0.5108268
## 2 1 0.5249918
## 3 2 0.4981636
## 4 3 0.4841889
## 5 4 0.4483667
## 6 5 0.4533527freq digunakan untuk menghitung area suatu kelas cell
freq(s)
## layer value count
## [1,] 1 0 75
## [2,] 1 1 133
## [3,] 1 2 138
## [4,] 1 3 116
## [5,] 1 4 122
## [6,] 1 5 64
freq(s, value=3)
## layer value count
## [1,] 1 3 116# contoh lain
depok_rast <- rast("kota_depok.tif")
freq(depok_rast)
## layer value count
## 1 1 Beji 303
## 2 1 Bojongsari 404
## 3 1 Cilodong 320
## 4 1 Cimanggis 447
## 5 1 Cinere 216
## 6 1 Cipayung 230
## 7 1 Limo 241
## 8 1 Pancoran Mas 373
## 9 1 Sawangan 545
## 10 1 Sukma Jaya 359
## 11 1 Tapos 690crosstab untuk membuat tabulasi silang dua objek raster
ctb <- crosstab(c(r*3, s))
head(ctb)
## lyr.1.1
## lyr.1 0 1 2 3 4 5
## 0 12 18 29 23 25 14
## 1 22 44 40 39 43 22
## 2 31 44 39 37 39 22
## 3 10 27 30 17 15 6Fungsi helper
Nomor cell adalah bagian yang sangat penting. Data raster dapat dianggap sebagai matriks, namun dalam SpatRaster lebih umum diperlakukan sebagai vektor. Cell diberi nomor dari cell kiri atas ke cell kanan atas lalu dilanjutkan di sisi kiri baris berikutnya, dan seterusnya hingga cell terakhir di sisi kanan bawah raster. Terdapat beberapa fungsi helper untuk menentukan nomor kolom atau baris suatu cell dan sebaliknya, serta menentukan nomor cell untuk koordinat x, y dan sebaliknya.
r <- rast(ncol=36, nrow=18)
ncol(r)
## [1] 36
nrow(r)
## [1] 18
ncell(r)
## [1] 648
rowFromCell(r, 100)
## [1] 3
colFromCell(r, 100)
## [1] 28
cellFromRowCol(r,5,5)
## [1] 149
xyFromCell(r, 100)
## x y
## [1,] 95 65
cellFromXY(r, cbind(0,0))
## [1] 343
colFromX(r, 0)
## [1] 19
rowFromY(r, 0)
## [1] 10Mengakses nilai cell
Nilai cell dapat diakses dengan beberapa metode. values dapat digunakan untuk menampilkan semua nilai atau subset dalam baris atau blok tertentu
r <- rast(system.file("ex/elev.tif", package = "terra"))
v <- values(r)
v[3075:3080,]
## [1] 324 288 342 313 311 291
values(r, row=33, nrow=1, col=35, ncol=6)
## elevation
## [1,] 324
## [2,] 288
## [3,] 342
## [4,] 313
## [5,] 311
## [6,] 291Menampilkan nilai menggunakan nomor cell atau koordinat dengan extract
cells <- cellFromRowCol(r, 33, 35:40)
cells
## [1] 3075 3076 3077 3078 3079 3080
r[cells]
## elevation
## 1 324
## 2 288
## 3 342
## 4 313
## 5 311
## 6 291
xy <- xyFromCell(r, cells)
xy
## x y
## [1,] 6.029167 49.92083
## [2,] 6.037500 49.92083
## [3,] 6.045833 49.92083
## [4,] 6.054167 49.92083
## [5,] 6.062500 49.92083
## [6,] 6.070833 49.92083
extract(r, xy)
## elevation
## 1 324
## 2 288
## 3 342
## 4 313
## 5 311
## 6 291