name <- LETTERS[1:10]
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)
stations <- cbind(longitude, latitude)
# Generated rainfall data
set.seed(0)
precip <- round((runif(length(latitude))*10)^3)Data Spasial
Pengantar
Fenomena spasial1 secara umum dapat dikatakan sebagai objek diskret dengan batas wilayah yang jelas atau fenomena kontinu yang dapat diamati lokasinya namun tidak memiliki batasan ruang.
1 spatial (adj.) 1840 (spacial is from 1838), “occupying space, characterized by space,” from Latin spatium + adjectival suffix -al (1); formed in English as an adjective to space (n.), that goes with temporal. The meaning “of or relating to space” is from 1857.
Objek spasial diskret dapat berupa sungai, jalan, negara, kota, atau daerah penelitian. Fenomena yang bersifat kontinu atau dikenal dengan istilah “spatial fields”, misalnya elevasi, temperatur, dan kualitas udara.
Representasi objek spasial biasanya berbentuk (data) vector. Gambaran dari data ini berupa objek yang memiliki bentuk (shape), koordinat (geometry), dan peubah/variabel/atribut. Contoh dari gugus data vector yaitu peta batas negara di dunia (geometri) yang menyimpan nama dan jumlah populasi di dalamnya. Data spasial kontinu biasanya direprentasikan dengan struktur data raster.
Representasi Sederhana Data Spasial
Data spasial, secara sederhana, dapat dibangun dengan beberapa kombinasi tipe data dasar di R. Sebagai contoh dibuat peta dimana lokasi (diwakili oleh longitude dan latitude)2 dari 10 stasiun cuaca dengan simbol A-J beserta presipitasi tahunan.
2 Longitude dan latitude adalah sistem koordinat yang umum digunakan secara global. Longitude atau garis bujur adalah garis yang membentang dari utara ke selatan bumi. Latitude atau garis lintang adalah garis mendatar dari khatulistiwa (0) ke kutub selatan (90), atau khatulistiwa (0) ke kutub utara (-90)
Peta adalah plot data geospasial yang memiliki label dan objek grafis seperti skala dan legenda. Data spasial sendiri tidak sepenuhnya berupa peta
Berikut ini titik lokasi stasiun cuaca dimana besarnya diameter titik menggambarkan proporsi dari curah hujan.
psize <- 1 + precip/500
plot(stations, cex=psize, pch=20, col='red', main='Curah hujan (mm/tahun)')
# add names to plot
text(stations, name, pos=4)
# add a legend
breaks <- c(100, 250, 500, 1000)
legend.psize <- 1+breaks/500
legend("topright", legend=breaks, pch=20, pt.cex=legend.psize, col='red', bg='gray')Data di atas dibangkitkan dengan “longitude, latitude” namun terkadang pada sebagian besar peta, garis lintang (Utara/Selatan) digunakan untuk sumbu vertikal dan garis bujur (Timur/Barat) untuk sumbu horizontal. Hal ini penting untuk dicatat, karena ini adalah sumber kesalahan yang sangat umum!
Plot di tersebut dapat ditambahkan beberapa titik, garis, dan poligon:
lon <- c(-116.8, -114.2, -112.9, -111.9, -114.2, -115.4, -117.7)
lat <- c(41.3, 42.9, 42.4, 39.8, 37.6, 38.3, 37.6)
x <- cbind(lon, lat)
plot(stations, main='Curah hujan (mm/tahun)')
polygon(x, col='blue', border='light blue')
lines(stations, lwd=3, col='red')
points(x, cex=2, pch=20)
points(stations, cex=psize, pch=20, col='red', main='Curah hujan (mm/tahun)')Data spasial juga dapat dibentuk dengan sebuah matriks atau array berordo tinggi. Pendekatan yang sangat praktis dapat diimplementasikan pada tipe data titik. Kode berikut sebagai contoh dalam membuat gugus data spasial titik dengan atribut yang dapat dikombinasikan dengan geometri beserta atributnya dalam suatu data frame.
wst <- data.frame(longitude, latitude, name, precip)
kable(wst)| longitude | latitude | name | precip |
|---|---|---|---|
| -116.7 | 45.3 | A | 721 |
| -120.4 | 42.6 | B | 19 |
| -116.7 | 38.9 | C | 52 |
| -113.5 | 42.1 | D | 188 |
| -115.5 | 35.7 | E | 749 |
| -120.8 | 38.9 | F | 8 |
| -119.5 | 36.2 | G | 725 |
| -113.7 | 39.0 | H | 843 |
| -113.7 | 41.6 | I | 289 |
| -110.7 | 36.9 | J | 249 |
wst hanya sebuah data frame dan R tidak otomatis mengenal makna khusus pada dua kolom pertama. Oleh karena itu, diperlukan adanya sistem (referensi) koordinat sebagai salah satu aspek penting yang digunakan untuk memproyeksi data spasial. Untuk memfasilitasi hal tersebut beberapa R package telah tersedia untuk mengoperasikan data spasial seperti terra dan sf yang menggantikan package lama yaitu raster dan sp.
Tipe Data Spasial
Data Vector
Tipe utama dari data vector adalah titik, garis, dan poligon. Ketiga tipe tersebut memiliki koordinat berpasangan \((x, y)\).
Titik adalah tipe yang paling sederhana. Setiap titik memiliki satu pasang koordinat dan \(n\) jumlah atribut. Misalnya titik lokasi dimana tikus ditangkap. Atribut yang disimpan yaitu waktu ditangkap, penangkap, spesies, dan informasi tentang habitatnya. Kombinasi beberapa titik atau struktur multi-point dapat dimungkinkan dengan atribut tunggal di dalamnya seperti semua kedai kopi di suatu kota yang dapat dianggap sebagai suatu geometri tunggal.
Garis sedikit lebih kompleks mengacu ke suatu garis tunggal atau gugus garis yang saling terhubung (polyline). Misalnya sungai dengan atribut penyusun dari banyak garis. Perbedaan garis dengan titik, garis adalah sekumpulan koordinat yang terurut (node) atau serupa dengan struktur multi-titik.
Poligon merupakan sekumpulan garis yang saling menutup pada setiap pasang ujungnya. Setiap poligon memiliki atribut, sama seperti tipe lainnya kompilasi dari banyak poligon dapat juga dihitung sebagai geometri tunggal. Contohnya Indonesia terdiri dari banyak pulau. Masing-masing pulau diwakili oleh poligon tunggal tapi bisa juga mewakili satu negara dengan bentuk multi-poligon tunggal.
Membuat data vector
terra membuat sejumlah object-oriented class yang dimulai dengan kode Spat. SpatVectoradalah objek kelas yang digunakan untuk jenis data vector sebagai representasi geometri dan atribut yang menggambarkannya.
Titik
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)Konversi koordinat di atas dapat dilakukan dengan perintah vect
pts <- vect(lonlat)
class(pts)
## [1] "SpatVector"
## attr(,"package")
## [1] "terra"Deskripsi variabel pts sebagai berikut
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 0Dapat dilihat bahwa koordinat di atas digunakan sebagai extent, atau disebut spatial extent. Terdapat juga informasi coord. ref. atau CRS (coordinate reference system). Cara menambahkan CRS sebagai berikut
crdref <- "+proj=longlat +datum=WGS84"
pts <- vect(lonlat, crs=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
crs(pts)
## [1] "GEOGCRS[\"unknown\",\n DATUM[\"World Geodetic System 1984\",\n ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n LENGTHUNIT[\"metre\",1]],\n ID[\"EPSG\",6326]],\n PRIMEM[\"Greenwich\",0,\n ANGLEUNIT[\"degree\",0.0174532925199433],\n ID[\"EPSG\",8901]],\n CS[ellipsoidal,2],\n AXIS[\"longitude\",east,\n ORDER[1],\n ANGLEUNIT[\"degree\",0.0174532925199433,\n ID[\"EPSG\",9122]]],\n AXIS[\"latitude\",north,\n ORDER[2],\n ANGLEUNIT[\"degree\",0.0174532925199433,\n ID[\"EPSG\",9122]]]]"Atribut dapat ditambahkan pada SpatVector pada nomor baris yang sama sesuai geometrinya.
# Generate df nilai curah hujan random dengan kuantitas yang sama sebanyak titik
precipvalue <- runif(nrow(lonlat), min=0, max=100)
df <- data.frame(ID=1:nrow(lonlat), precip=precipvalue)
# Combine dengan df
ptv <- vect(lonlat, atts=df, crs=crdref)
ptv
## 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 6.179
## 2 20.6
## 3 17.66Garis dan poligon
Membuat data vector titik sedikit lebih kompleks dibanding garis atau poligon
lon <- c(-116.8, -114.2, -112.9, -111.9, -114.2, -115.4, -117.7)
lat <- c(41.3, 42.9, 42.4, 39.8, 37.6, 38.3, 37.6)
lonlat <- cbind(id=1, part=1, lon, lat)
lonlat
## id part lon lat
## [1,] 1 1 -116.8 41.3
## [2,] 1 1 -114.2 42.9
## [3,] 1 1 -112.9 42.4
## [4,] 1 1 -111.9 39.8
## [5,] 1 1 -114.2 37.6
## [6,] 1 1 -115.4 38.3
## [7,] 1 1 -117.7 37.6
# membuat garis
lns <- vect(lonlat, type="lines", crs=crdref)
lns
## class : SpatVector
## geometry : lines
## dimensions : 1, 0 (geometries, attributes)
## extent : -117.7, -111.9, 37.6, 42.9 (xmin, xmax, ymin, ymax)
## coord. ref. : +proj=longlat +datum=WGS84 +no_defs# membuat poligon
pols <- vect(lonlat, type="polygons", crs=crdref)
pols
## class : SpatVector
## geometry : polygons
## dimensions : 1, 0 (geometries, attributes)
## extent : -117.7, -111.9, 37.6, 42.9 (xmin, xmax, ymin, ymax)
## coord. ref. : +proj=longlat +datum=WGS84 +no_defsJadi, dalam membuat SpatVector diperlukan koordinat (geometri), CRS, dan atribut. Data vector di atas dapat divisualisasikan dalam bentuk peta.
plot(pols, las=1)
plot(pols, border='blue', col='yellow', lwd=3, add=TRUE)
points(pts, col='red', pch=20, cex=3)Memuat data vector
Terdapat banyak sekali format data vector. Shapefile adalah format yang paling banyak digunakan dan sangat penting untuk mengetahui sejumlah file pendukungnya setidaknya 3-4 file utama dengan nama yang sama tapi ekstensi yang berbeda.
Sebagai contoh, shapefile x harus memiliki file pada direktori yang sama dengan ektensi: x.shp, x.shx, x.dbf, biasanya dilengkapi dengan x.prj.
Berikut ini adalah daftar file yang biasa digunakan untuk mendefinisikan shapefile
| ekstensi file | konten |
|---|---|
| .dbf | Attribute information |
| .shp | Feature geometry |
| .shx | Feature geometry index |
| .aih | Attribute index |
| .ain | Attribute index |
| .prj | Coordinate system information |
| .sbn | Spatial index file |
| .sbx | Spatial index file |
depok_vect <- vect("kota_depok_2020.shp")
depok_vect
## class : SpatVector
## geometry : polygons
## dimensions : 11, 17 (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 ADM3_REF ADM3ALT1EN
## type : <num> <num> <chr> <chr> <chr> <chr>
## values : 0.1951 0.001207 Beji ID3276050
## 0.2806 0.001583 Bojongsari ID3276011
## 0.2442 0.001271 Cilodong ID3276031
## ADM3ALT2EN ADM2_EN ADM2_PCODE ADM1_EN (and 7 more)
## <chr> <chr> <chr> <chr>
## Kota Depok ID3276 Jawa Barat
## Kota Depok ID3276 Jawa Barat
## Kota Depok ID3276 Jawa BaratVisualisasi data vector
Visualisasi data vector yaitu berupa peta dengan perintah sebagai berikut
# pilih satu atribut representasi dari poligon
plot(depok_vect, "ADM3_EN")Dengan menggunakan dua atribut, kustomisasi pada plot juga dapat dilakukan dengan sintaks berikut
par(mfrow=c(1,2))
m <- c(3.1, 3.1, 2.1, 2.1)
plot(depok_vect, "ADM3_EN", col=rainbow(25), mar=m, plg=list(x="topright", title="Kecamatan", bty = "o"), pax=list(las=1))
plot(depok_vect, "ADM2_EN", col=rainbow(25), mar=m, plg=list(x="topright", title="Kota Depok", bty = "o", cex=.75), pax=list(las=1))d <- aggregate(depok_vect, "ADM3_EN")
plot(depok_vect, col="light blue", lty=2, border="red", lwd=2)
lines(d, lwd=5)
lines(d, col="white", lwd=1)
text(depok_vect, "ADM3_EN", cex=.8, halo=TRUE)Menyimpan data vector
outfile <- "shp_test.shp"
writeVector(depok_vect, outfile, overwrite=TRUE)Data Raster
Jenis data raster umumnya digunakan untuk menggambarkan fenomena kontinu secara spasial seperti elevasi. Sebuah raster dibentuk dari sebuah grid yang bebentuk persegi, dikenal dengan cell atau dalam konteks penginderaan jauh (remote sensing), piksel yang mengandung suatu nilai tertentu atau lebih (bahkan NA).
Nilai cell pada raster normalnya adalah rata-rata (atau mayoritas) luasan dari suatu wilayah. Namun, dalam beberapa studi kasus nilai tersebut adalah nilai center suatu cell. Cell tersebut dapat berkumpul menjadi suatu atribut.
Berbeda dengan data vector, geometri pada data raster tidak secara eksplisit disimpan sebagai koordinat tetapi digunakan untuk mengetahui spasial extent atau jumlah baris dan kolom sebagai pembagian atau batas areanya. Dari informasi tersebut, ukuran cell pada raster dapat dikomputasikan.
Membuat data raster
Banyak sekali fungsi atau geoprocessing tools untuk analisis data raster pada terra. Contohnya fungsi untuk membaca sepotong data raster dari file atau mengubahnya nomor baris cell menjadi suatu koordinat atau sebaliknya. Package ini juga dapat melakukan operasi aljabar dan berbagai fungsi manipulasi data raster.
SpatRaster digunakan sebagai gambaran data raster multi-layer (multi-variable) yang menyimpan sejumlah parameter dasar menggambarkan geometrinya termasuk CRS. SpatRaster juga dapat menyimpan informasi file raster yang dimuat atau menyimpannya ke dalam memory.
r <- rast(ncol=10, nrow=10, xmin=-150, xmax=-80, ymin=20, ymax=60)
r
## class : SpatRaster
## dimensions : 10, 10, 1 (nrow, ncol, nlyr)
## resolution : 7, 4 (x, y)
## extent : -150, -80, 20, 60 (xmin, xmax, ymin, ymax)
## coord. ref. : lon/lat WGS 84Variabel r di atas hanya menyimpan geometrinya saja. Untuk menambahkan nilai pada masing-masing cellnya dapat dilakukan dengan cara berikut
values(r) <- runif(ncell(r))
r
## class : SpatRaster
## dimensions : 10, 10, 1 (nrow, ncol, nlyr)
## resolution : 7, 4 (x, y)
## extent : -150, -80, 20, 60 (xmin, xmax, ymin, ymax)
## coord. ref. : lon/lat WGS 84
## source : memory
## name : lyr.1
## min value : 0.01307758
## max value : 0.9926841Atau dapat diisi dengan nomor cell
values(r) <- 1:ncell(r)
r
## class : SpatRaster
## dimensions : 10, 10, 1 (nrow, ncol, nlyr)
## resolution : 7, 4 (x, y)
## extent : -150, -80, 20, 60 (xmin, xmax, ymin, ymax)
## coord. ref. : lon/lat WGS 84
## source : memory
## name : lyr.1
## min value : 1
## max value : 100Plot objek tersebut
plot(r)
# tambah poligon dan titik
lon <- c(-116.8, -114.2, -112.9, -111.9, -114.2, -115.4, -117.7)
lat <- c(41.3, 42.9, 42.4, 39.8, 37.6, 38.3, 37.6)
lonlat <- cbind(id=1, part=1, lon, lat)
pts <- vect(lonlat)
pols <- vect(lonlat, type="polygons", crs="+proj=longlat +datum=WGS84")
points(pts, col="red", pch=20, cex=3)
lines(pols, col="blue", lwd=2)Multi-layer objek pada data raster dapat dilakukan dengan perintah c()
r2 <- r * r
r3 <- sqrt(r)
s <- c(r, r2, r3)
s
## class : SpatRaster
## dimensions : 10, 10, 3 (nrow, ncol, nlyr)
## resolution : 7, 4 (x, y)
## extent : -150, -80, 20, 60 (xmin, xmax, ymin, ymax)
## coord. ref. : lon/lat WGS 84
## sources : memory
## memory
## memory
## names : lyr.1, lyr.1, lyr.1
## min values : 1, 1, 1
## max values : 100, 10000, 10
plot(s)Memuat data raster
depok_rast <- rast("kota_depok.tif")
depok_rast
## class : SpatRaster
## dimensions : 100, 75, 1 (nrow, ncol, nlyr)
## resolution : 0.002694673, 0.001468689 (x, y)
## extent : 106.7167, 106.9188, -6.461283, -6.314414 (xmin, xmax, ymin, ymax)
## coord. ref. : lon/lat WGS 84 (EPSG:4326)
## source : kota_depok.tif
## name : ADM3_EN
## min value : Beji
## max value : TaposVisualisasi data raster
Visualisasi data raster yaitu berupa peta juga dengan perintah sebagai berikut
plot(depok_rast)Plot di atas adalah plot data raster dengan label kategori sebagai legendanya. Ilustrasi lain yang lebih mewakili penggunaan data raster misalnya adalah elevasi
f_elev <- system.file("ex/elev.tif", package="terra")
elev <- rast(f_elev)
plot(elev)SpatRaster dapat dikombinasikan dengan data vector (titik, garis, poligon).
plot(elev)
lines(p, lwd=2)
set.seed(12)
xy <- spatSample(elev, 20, "random", na.rm=TRUE, xy=TRUE)
points(xy, pch=20, col="red", cex=2)Kemudian dapat menggunakan legenda dengan interval nilai elevasi tertentu
m <- c(3.1, 3.1, 1.1, 1.1)
plot(elev, type="interval", plg=list(x="topright"), mar=m)Menyimpan data raster
# konversi data vector menjadi raster
depok_ext <- rast(depok, ncols=75, nrows=100)
depok_rast <- rasterize(depok, depok_ext, "ADM3_EN")
# save as raster
writeRaster(depok_rast, "kota_depok.tif", overwrite=TRUE)Coordinate Reference Systems
Koordinat angular
Bumi memiliki bentuk seperti bola yang tidak beraturan (geoid). Dalam menentukan posisi atau titik suatu wilayah, sistem yang sudah sangat umum digunakan adalah sistem koordinat dengan ukuran derajat longitude dan latitude.
Pada dasarnya koordinat tersebut tidak sepenuhnya dapat dijadikan ukuran muka bumi tetapi perlu pendugaan model yang disebut datum. Datum adalah serangkaian paramater yang menentukan posisi asal, skala, dan orientasi suatu sistem koordinat.
Datum yang lebih kompleks dapat memperkirakan berbagai variasi bentuk bumi (ellipsoid) berdasarkan proyeksi yang berasosiasi dengan lokasinya. Datum yang paling umum, banyak digunakan, dan cocok secara global adalah WGS84 (World Geodesic System 1984). Datum yang fit secara lokal dapat digunakan pada negara atau wilayah bumi bagian tertentu dengan aproksimasi error yang kecil.
Proyeksi
Pertanyaan utama pada analisis spasial dan kartografi adalah bagaimana melakukan transformasi sistem angular 3D ke dalam sistem planar 2D. Beberapa tipe planar mengacu pada projections. Proyeksi mengacu kepada perhitungan matematis yang dilakukan untuk meratakan data menjadi bentuk ruang 2D. Sistem referensi koordinat (CRS) pada titik koordinat \(x\) dan \(y\) yang berasosiasi dengan proyeksi dapat digunakan untuk mentransformasi bentuk 3D permukaan bumi.
Sejauh ini belum ada datum yang benar-benar memproyeksikan secara tepat keseluruhan bentuk permukaan bumi. Beberapa hanya dapat digunakan pada area kecil. Contoh beberapa proyeksi yaitu “Mercator”, “UTM”, “Robinson”, “Lambert”, “Sinusoidal”, and “Albers”. Pada dua gugus data spasial yang sama namun berbeda proyeksi tidak akan sejajar saat dirender bersamaan3.
3 Perhatikan perbedaan bentuk dari masing-masing proyeksi. Perbedaan ini adalah hasil kalkukasi transformasi data ke peta 2D. Sumber: M. Corey, opennews.org
Notasi
Planar CRS didefinisikan dengan proyeksi, datum, dan sejumlah parameter yang bergantung pada masing-masing proyeksinya. Parameter tersebut digunakan untuk menentukan titik pusat pada peta. Sebagai bagian dari pengembangan open source geospatial software, PROJ.44 hadir sebagai dukungan dalam proyeksi kartografik. Pada R, notasi dan definisi PROJ.4 digunakan untuk proyeksi dan basis transformasi CRS.
4 Beberapa referensi spasial dapat ditemukan di alamat berikut spatialreference.org
CRS yang paling umum digunakan telah ditetapkan sebagai kode EPSG (European Petroleum Survey Group). Unik ID ini dapat digunakan untuk mengidentifikasi sebuah CRS. Misalnya EPSG:27561 ekivalen dengan string PROJ.4:
+proj=lcc +lat_1=49.5 +lat_0=49.5 +lon_0=0 +k_0=0.999877341 +x_0=6 +y_0=2 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs
Semua kode unik EPSG dapat dilihat pada fungsi built-in proj4string
kable(head(rgdal::make_EPSG(), 10))| code | note | prj4 | prj_method |
|---|---|---|---|
| 3819 | HD1909 | +proj=longlat +ellps=bessel +no_defs +type=crs | (null) |
| 3821 | TWD67 | +proj=longlat +ellps=aust_SA +no_defs +type=crs | (null) |
| 3822 | TWD97 | +proj=geocent +ellps=GRS80 +units=m +no_defs +type=crs | (null) |
| 3823 | TWD97 | +proj=longlat +ellps=GRS80 +no_defs +type=crs | (null) |
| 3824 | TWD97 | +proj=longlat +ellps=GRS80 +no_defs +type=crs | (null) |
| 3887 | IGRS | +proj=geocent +ellps=GRS80 +units=m +no_defs +type=crs | (null) |
| 3888 | IGRS | +proj=longlat +ellps=GRS80 +no_defs +type=crs | (null) |
| 3889 | IGRS | +proj=longlat +ellps=GRS80 +no_defs +type=crs | (null) |
| 3906 | MGI 1901 | +proj=longlat +ellps=bessel +no_defs +type=crs | (null) |
| 4000 | MOLDREF99 | +proj=geocent +ellps=GRS80 +units=m +no_defs +type=crs | (null) |
Menetapkan CRS
Terkadang data spasial yang dimiliki belum memilik CRS karena data tersebut dibuat dengan dari data tabular biasa sehingga perlu menetapkan CRS pada data tersebut.
# empty the crs original first
crs(pts) <- ""
# set new crs
crs(pts) <- "+proj=longlat +datum=WGS84"
cat(crs(pts))
## GEOGCRS["unknown",
## DATUM["World Geodetic System 1984",
## ELLIPSOID["WGS 84",6378137,298.257223563,
## LENGTHUNIT["metre",1]],
## ID["EPSG",6326]],
## PRIMEM["Greenwich",0,
## ANGLEUNIT["degree",0.0174532925199433],
## ID["EPSG",8901]],
## CS[ellipsoidal,2],
## AXIS["longitude",east,
## ORDER[1],
## ANGLEUNIT["degree",0.0174532925199433,
## ID["EPSG",9122]]],
## AXIS["latitude",north,
## ORDER[2],
## ANGLEUNIT["degree",0.0174532925199433,
## ID["EPSG",9122]]]]Cara di atas pada dasarnya bukan cara yang tepat untuk menetapkan CRS pada data spasial. Oleh karena itu, perlu adanya transformasi data spasial
Transformasi data vector
Transformasi data dengan CRS lain dapat menggunakan fungsi project. Misalnya digunakan proyeksi Robinson.
newcrs <- "+proj=robin +datum=WGS84"rob <- terra::project(pts, newcrs)
rob
## class : SpatVector
## geometry : points
## dimensions : 1, 0 (geometries, attributes)
## extent : -10366659, -9704732, 4020871, 4583692 (xmin, xmax, ymin, ymax)
## coord. ref. : +proj=robin +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defsSetelah transformasi, unit geometri tidak lagi dalam satuan derajat tetapi dalam meter, begitu juga pada spatial extent yang digunakan. Transformasi balik dapat juga dilakukan
pts2 <- terra::project(rob, "+proj=longlat +datum=WGS84")Transformasi data raster
Data vector data ditransform dari koordinat lon/lat ke planar dan sebaliknya tanpa kehilangan presisi. Namun hal ini tidak untuk data raster. Raster terdiri dari cell persegi panjang yang berukuran sama sehingga tidak mungkin ditransformasi cell per cell.
Masing-masing nilai pada cell baru perlu diduga berdasarkan nilai yang overlap pada cell yang lama. Pada kasus data kategorik, nearest neighbor dapat digunakan selainnya menggunakan interpolasi.
Karena mengubah proyeksi raster dapat mengubah nilai suatu cell, pada banyak kasus hal ini harus dihindari namun dapat dilakukan
r <- rast(xmin=-110, xmax=-90, ymin=40, ymax=60, ncols=40, nrows=40)
values(r) <- 1:ncell(r)
r
## class : SpatRaster
## dimensions : 40, 40, 1 (nrow, ncol, nlyr)
## resolution : 0.5, 0.5 (x, y)
## extent : -110, -90, 40, 60 (xmin, xmax, ymin, ymax)
## coord. ref. : lon/lat WGS 84
## source : memory
## name : lyr.1
## min value : 1
## max value : 1600
## class : SpatRaster
## dimensions : 40, 40, 1 (nrow, ncol, nlyr)
## resolution : 0.5, 0.5 (x, y)
## extent : -110, -90, 40, 60 (xmin, xmax, ymin, ymax)
## coord. ref. : lon/lat WGS 84
## source(s) : memory
## name : lyr.1
## min value : 1
## max value : 1600
plot(r)# menggunakan proyeksi Robinson
pr1 <- terra::project(r, "+proj=robin +datum=WGS84")
crs(pr1)
## [1] "PROJCRS[\"unknown\",\n BASEGEOGCRS[\"unknown\",\n DATUM[\"World Geodetic System 1984\",\n ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n LENGTHUNIT[\"metre\",1]],\n ID[\"EPSG\",6326]],\n PRIMEM[\"Greenwich\",0,\n ANGLEUNIT[\"degree\",0.0174532925199433],\n ID[\"EPSG\",8901]]],\n CONVERSION[\"unknown\",\n METHOD[\"Robinson\"],\n PARAMETER[\"Longitude of natural origin\",0,\n ANGLEUNIT[\"degree\",0.0174532925199433],\n ID[\"EPSG\",8802]],\n PARAMETER[\"False easting\",0,\n LENGTHUNIT[\"metre\",1],\n ID[\"EPSG\",8806]],\n PARAMETER[\"False northing\",0,\n LENGTHUNIT[\"metre\",1],\n ID[\"EPSG\",8807]]],\n CS[Cartesian,2],\n AXIS[\"(E)\",east,\n ORDER[1],\n LENGTHUNIT[\"metre\",1,\n ID[\"EPSG\",9001]]],\n AXIS[\"(N)\",north,\n ORDER[2],\n LENGTHUNIT[\"metre\",1,\n ID[\"EPSG\",9001]]]]"
plot(pr1)Cara di atas bukanlah metode yang tepat karena seharusnya parameter raster yang diproyeksikan harus sesuai atau sejajar dengan raster asal.
Cara terbaik dalam memproyeksikan data raster adalah dengan menggunakan SpatRaster yang memiliki proyeksi yang dibutuhkan. Pada contoh ini, raster proyeksi harus dibuat terlebih dahulu.
x <- rast(pr1)
# Set the cell size
res(x) <- 200000
pr3 <- terra::project(r, x)
pr3
## class : SpatRaster
## dimensions : 10, 14, 1 (nrow, ncol, nlyr)
## resolution : 2e+05, 2e+05 (x, y)
## extent : -9577685, -6777685, 4283463, 6283463 (xmin, xmax, ymin, ymax)
## coord. ref. : +proj=robin +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs
## source : memory
## name : lyr.1
## min value : 111.1541
## max value : 1523.58
plot(pr3)Analisis data raster sangat penting menggunakan proyeksi yang sama terutama saat area yang digunakan besar. Hal ini untuk memastikan grid cell berukuran sama dan dapat dikomparasi satu sama lain, khususnya saat perhitungan luasan data digunakan.