Featured image of post Geospatial Data Visualization with R Programming

Geospatial Data Visualization with R Programming

Materi ini diproduksi oleh tim dari Algoritma untuk Memperkenalkan data geospasial untuk keperluan visualisasi tidak hanya 2D melainkan 3D. Materi berikut hanya ditujukan untuk kalangan terbatas, meliputi individu/personal yang menerima materi ini secara langsung dari lembaga pelatihan. Materi ini dilarang untuk direproduksi, didistribusikan, diterjemahkan, atau diadaptasikan dalam bentuk apapun di luar izin dari individu dan organisasi yang berkepentingan.

Algoritma adalah pusat pendidikan Data Science di Jakarta. Kami mengadakan workshop dan program pelatihan untuk membantu para profesional dan pelajar untuk mendapatkan keahlian dalam berbagai bidang dalam ruang lingkup Data Science: data visualization, machine learning, data modeling, statistical inference, dan lain-lainnya.

Sebelum masuk ke dalam materi dan menjalankan kode-kode di dalam materi ini, silakan anda melihat bagian Library and Setup untuk melihat dan memastikan semua persyaratan dasar untuk mengikuti materi ini sudah terpenuhi termasuk package-package yang diperlukan. Pada bagian Tujuan Pembelajaran anda dapat melihat secara umum apa saja yang akan dipelajari dalam modul materi ini. Kami harap materi ini akan bermanfaat bagi karir ataupun menambah keahlian peserta.

Preface

Pendahuluan

Dalam era digital dan informasi yang terus berkembang, data geospasial menjadi sangat penting dalam berbagai bidang seperti pemetaan, pemodelan lingkungan, analisis berbasis lokasi, pengambilan keputusan bisnis, dan pemantauan geografis. Penggunaan data geospasial yang efektif membutuhkan keterampilan analisis dan visualisasi yang kuat, serta pemahaman tentang bahasa pemrograman yang dapat memanipulasi dan memproses data geospasial dengan efisien. Pelatihan Geospasial Analisis dan Visualisasi menggunakan bahasa pemrograman R dirancang untuk memperkenalkan peserta dengan alat-alat dan teknik yang diperlukan untuk menganalisis dan memvisualisasikan data geospasial menggunakan bahasa pemrograman R. R merupakan bahasa pemrograman yang populer di kalangan ilmuwan data dan analis statistik, dan telah menjadi salah satu pilihan dalam analisis dan visualisasi data geospasial selain menggunakan tools khusus pengolahan data GIS.

Dalam pelatihan ini, peserta akan belajar tentang dasar-dasar pemrograman R, termasuk struktur data, fungsi, dan manipulasi data. Peserta akan diperkenalkan dengan library-library R yang berguna untuk memanipulasi dan memproses data geospasial, seperti sf, raster, terra, sp, leaflet, hingga library untuk visualisasi 3D yakni rayshader. Peserta akan mempelajari bagaimana mengimpor data geospasial dari berbagai format seperti shapefile, raster, dan data spasial lainnya, serta melakukan manipulasi dan transformasi data geospasial menggunakan R.

Selain itu, peserta akan dilibatkan dalam pembelajaran mengenai visualisasi data geospasial menggunakan grafik, peta, dan animasi dalam bahasa R.Peserta pelatihan akan mendapatkan pemahaman yang solid tentang analisis dan visualisasi data geospasial menggunakan bahasa pemrograman R. Mereka akan dapat mengaplikasikan keterampilan yang diperoleh dalam berbagai proyek yang melibatkan data geospasial, baik itu dalam akademik, penelitian, maupun lingkungan bisnis. Karena, untuk memahami apa yang akan divisualisasikan perlu adanya pemahaman dasar mengenai dasar-dasar geospasial agar tidak terjadi salah representasi.Sehigga, dengan menguasai keterampilan analisis dan visualisasi geospasial menggunakan bahasa pemrograman R, peserta pelatihan akan memiliki keunggulan kompetitif dalam memahami dan memanfaatkan data geospasial untuk pengambilan keputusan yang lebih baik, pemodelan yang lebih akurat, dan pemecahan masalah yang lebih efektif dalam konteks geografis.

Terdapat banyak alat yang tersedia untuk memvisualisasikan informasi geografis; mulai dari aplikasi GIS (Sistem Informasi Geografis) penuh seperti ArcGIS dan QGIS, hingga alat berbasis web seperti Google Maps hingga berbagai bahasa pemrograman. Dengan beragam paket yang tersedia, penggunaan R untuk analisis geospasial semakin populer. Mulai dari statistik geospasial, pemodelan, dan visualisasi, IDE RStudio juga membuat R menjadi alat yang ramah pengguna untuk pembuatan peta dan analisis.

Tujuan Pembelajaran

Tujuan utama dari workshop ini adalah untuk memberikan pengenalan yang komprehensif mengenai tools dan perangkat lunak yang digunakan untuk menganalisa dan melakukan visualisasi data geospatial dengan sebuah aplikasi open-source populer: R. Selain menggunakan tools khusus GIS yang mana perlu pemahaman dari segi aplikasi yang digunakan serta fungsi dari tools-tools yang digunakan. Adapun materi ini akan mencakup:

Introductory Module:

  • Dasar Bahasa Pemrograman R
    • Pengenalan bahasa pemrograman R
    • Bekerja dengan RStudio
    • Fungsi standar pada R
    • Data manipulasi dan persiapan data menggunakan R dplyr
  • Data Wrangling dan visualisasi dengan R
    • Bekerja dengan data tabular di R: Tips dan Teknik
    • Data Wrangling dan Agregasi
    • Pengenalan untuk visualisasi dengan ggplot2

Main Module:

  • Introduction to Geospatial Data
    • Data Spasial:
      • Data Vektor -> Introduction to Manipulation Data
      • Data Raster -> Introduction to Manipulation Data
      • Representasi sederhana
    • Reading and Writing spatial data
      • File Vektor
      • File Raster
    • Sistem Koordinat Referensi
      • Coordinate Reference Systems (CRS)
        • Angular coordinates
        • Projections
        • Notation
      • Assigning a CRS
      • Transforming vector data
      • Transforming raster data
  • Membuat Peta Interaktif
    • Pengenalan tentang Peta Interaktif
    • Menggunakan Leaflet - API JavaScript untuk membuat peta interaktif.
    • Membangun berbagai peta analisis geospasial dengan Leaflet: Choropleth, Heatmap, etc.
  • Membuat Peta 3D dengan Rayshader
    • Pengenalan tentang Pustaka Rayshader
    • Memahami Konsep Pemetaan Topografis
    • Membangun Peta 3D dari Data Topografis Spatial.

Library dan Setup

Untuk dapat mengikuti materi ini, peserta diharapkan sudah menginstall beberapa packages di bawah ini. Apabila package tersebut belum terinstall, silahkan jalankan chunk atau baris kode berikut. Apabila sudah ter-install, lewati chunk berikut dan muat package yang dibutuhkan dengan menjalankan chunk selanjutnya.

1
2
3
4
## DO NOT RUN CHUNK
# packages <- c("readr", "readxl", "stringr","dplyr", "rgdal","sf", "maps", "leaflet", "raster", "osmdata", "ggplot2", "terra")
# 
# install.packages(packages)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# Data Cleaning
library(readxl) # untuk membaca data excel
library(readr) # untuk membaca data
library(stringr) # untuk persiapan data text
library(dplyr) # untuk data manipulation

# Data Visualization
library(leaflet) # untuk visualisasi interaktif peta
library(ggplot2) # untuk visualisasi plot grafik

# Data Geospatial
library(raster) # untuk read data raster
library(osmdata) # untuk mendapatkan data polygon dari open street map
library(sf) # untuk manipulasi dan analisis data spasial
library(rgdal) # untuk membaca dan menulis data geospatial dalam format yang berbeda (shp)
library(terra) # untuk analisis data spasial dan raster yang lebih kompleks
library(maps) # untuk membuat peta dasar dalam berbagai proyek visualisasi geografis

# Day 3 (Data Visualization)
# library(rayshader) # untuk visualisasi data spatial 3D

Geospatial in R

Materi utama yang akan kita kerjakan yakni mengenai Geospatial Data Visualization. Kita akan mengeksplor bagaimana caranya menggunakan data spatial di R untuk membuat sebuat output yang populer seperti peta baik itu statik maupun interaktif hingga pembuatan peta 3 Dimensi.

Sebelum berangkat lebih jauh dalam membuat peta interaktif menggunakan Leaflet, kita perlu memahami :

  1. Dasar-Dasar GIS (Sistem Informasi Geografis): data geospasial, koordinat, struktur data
  2. Leaflet: memahami apa itu leaflet, kegunaan, hingga cara implementasi
  3. Mempersiapkan data Geospatial sebelum digunakan: memahami format-format

Analisis Geospasial dan pemetaan adalah bidang yang berkembang pesat. Dalam tahap ini, kita akan mempelajari tentang Leaflet, sebuah pustaka JavaScript untuk membuat peta interaktif, dan bagaimana menggunakannya di R sebelum kita membuat peta yang lebih bagus menggunakan data asli spatial topografi.

Data Spatial ***

Data Geospasial

Data geospasial adalah bentuk data yang sangat penting dalam ilmu geografi, ilmu lingkungan, pemetaan, dan banyak bidang lainnya. Data geospasial memungkinkan kita untuk merepresentasikan dan menganalisis dunia nyata dengan cara yang lebih terstruktur. Dalam pemrosesan data geospasial, kita dapat memanfaatkan dua jenis utama data: data vektor dan data raster.

Data geospasial memberikan wawasan yang penting dalam pemahaman dunia kita, dan kemampuan untuk menggabungkan lokasi, atribut, dan informasi temporal membuatnya sangat berharga dalam pemodelan, analisis, dan pengambilan keputusan.

Library terra adalah alat yang kuat untuk bekerja dengan data geospasial, membantu kita menjelajahi dan memahami dunia dengan lebih baik. Library terra juga sangat berguna untuk mengolah data raster. Ini memungkinkan kita untuk memanipulasi data raster, menerapkan analisis spasial, dan membuat visualisasi berbasis raster.

Data Vektor

Data Vektor: Data vektor adalah jenis data geospasial yang merepresentasikan objek sebagai titik, garis, atau poligon. Data vektor terdiri dari tiga komponen utama:

  • Lokasi (Geometri): Ini adalah informasi tentang di mana objek atau fitur tersebut berada di permukaan bumi, seperti koordinat geografis (lintang dan bujur).
  • Atribut: Atribut adalah informasi tentang karakteristik objek tersebut, misalnya nama, jenis, ukuran, dan sebagainya.
  • Temporal: Beberapa data vektor juga dapat mencakup informasi waktu, seperti kapan objek tersebut dibuat atau berubah.

Representasi titik

Geometri titik terdiri dari satu titik sudut (X, Y dan opsional Z).

1
2
3
4
5
6
7
# Koordinat titik stasiun
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)

# Data stasiun dalam bentuk matriks
stasiun_crh <- cbind(lon, lat)
stasiun_crh
#>         lon  lat
#> [1,] -116.8 41.3
#> [2,] -114.2 42.9
#> [3,] -112.9 42.4
#> [4,] -111.9 39.8
#> [5,] -114.2 37.6
#> [6,] -115.4 38.3
#> [7,] -117.7 37.6

Kesalahan umum: Jangan sampai salah penempatan antara longitude (bujur) dan latitude (lintang). Karena, penempatan yang salah ini dapat mengakibatkan interpretasi yang salah terhadap data geografis Anda.

Pada umumnya, dalam representasi geografis, latitude (lintang) digunakan untuk mengukur posisi relatif utara-selatan di bola bumi, sementara longitude (bujur) digunakan untuk mengukur posisi relatif timur-barat. Dalam sebagian besar peta, sumbu vertikal atau garis meridian (garis vertikal yang menghubungkan Kutub Utara dan Kutub Selatan) biasanya digunakan untuk menggambarkan latitude, sementara sumbu horizontal atau garis ekuator (garis horizontal yang mengelilingi bola bumi secara horizontal) digunakan untuk menggambarkan longitude.

Kita bisa menggunakan fungsi plot() untuk menampilkan tampilan data vektor tersebut secara langsung.

1
plot(stasiun_crh)
1
2
# Tampilan alas peta agar lebih rapih
plot(stasiun_crh, main='Peta Stasiun Curah Hujan', xlab='Longitude', ylab='Latitude')
1
2
3
4
5
# Plot alas peta
plot(stasiun_crh, main='Peta Stasiun Curah Hujan', xlab='Longitude', ylab='Latitude')

# Menambahkan titik pada koordinat stasiun dengan warna oranye tua
points(stasiun_crh, cex=2, pch=20, col='black')
\### Representasi Polyline/Garis Untuk menampilkan garis, secara mudah kita hanya perlu titik-titik koordinat. Geometri poliline terdiri dari dua atau lebih simpul yang membentuk garis terhubung.
1
2
3
4
5
# Plot peta
plot(stasiun_crh, main='Peta Stasiun Curah Hujan', xlab='Longitude', ylab='Latitude')

# Menambahkan polyline dengan warna yang lebih menarik dan lebih tebal
lines(stasiun_crh, col='darkred', lwd=3)

Representasi Poligon

Geometri poligon terdiri dari setidaknya empat simpul yang membentuk suatu area tertutup. Simpul pertama dan terakhir selalu berada pada tempat yang sama.

1
2
3
4
5
# Plot peta
plot(stasiun_crh, main='Peta Stasiun Curah Hujan', xlab='Longitude', ylab='Latitude')

# Menambahkan polygon sebagai latar belakang dengan warna yang lebih menarik
polygon(stasiun_crh, col='#FFA07A', border='#FF6347')
\### Tampilan Data Vektor (Gabungan)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# Plot peta Secara keseluruhan data vektor: titik, garis, area/poligon
plot(stasiun_crh, main='Peta Stasiun Curah Hujan', xlab='Longitude', ylab='Latitude')

# Menambahkan polygon sebagai latar belakang dengan warna yang lebih menarik
polygon(stasiun_crh, col='#FFA07A', border='#FF6347')

# Menambahkan polyline dengan warna yang lebih menarik dan lebih tebal
lines(stasiun_crh, col='darkred', lwd=3)

# Menambahkan titik pada koordinat stasiun dengan warna oranye tua
points(stasiun_crh, cex=2, pch=20, col='black')

# Menambahkan label pada titik stasiun dengan warna biru
text(stasiun_crh, labels=1:7, pos=3, offset=0.5, col='blue', cex=0.8)
\> urutan data yang ditampilkan pada plot menggunakan library terra diatas tidak seperti layering ggplot. Namun, data yang mau ditampilkan paling atas justru ditaruh pada kode paling akhir.

Dalam kode di atas, kita menggunakan fungsi text() sebagai tambahan untuk menambahkan label nama kota ke dalam plot. Fungsi text() memerlukan tiga argumen utama:

  1. x: Objek vektor geospasial yang akan digunakan sebagai referensi untuk menempatkan teks (dalam hal ini, stasiun_crh).
  2. labels: Vektor yang berisi label atau nama yang ingin Anda tambahkan ke plot (dalam hal ini, A sampai G).
  3. pos: Posisi teks relatif terhadap titik referensi. Di sini, pos = 4 berarti teks akan ditempatkan di atas titik referensi.

Dengan menggunakan fungsi text(), Anda dapat menambahkan label nama kota ke plot objek vektor geospasial kita.

1
2
# Menampilkan sistem referensi koordinat
crs(stasiun_crh)
#> [1] NA

Data Vector : Dilengkapi dengan representasi geometris titik, garis, poligon, dan multi-polihibrid. Berikut ini merupakan representasi sederhana dari data spasial berbentuk vektor.

Bagaimana cara merepresentasikan data diatas jika menambahkan atribut lain.

1
2
# Data stasiun dalam bentuk matriks (titik koordinat dari yang sebelumnya)
stasiun_crh
#>         lon  lat
#> [1,] -116.8 41.3
#> [2,] -114.2 42.9
#> [3,] -112.9 42.4
#> [4,] -111.9 39.8
#> [5,] -114.2 37.6
#> [6,] -115.4 38.3
#> [7,] -117.7 37.6
1
2
3
4
5
6
7
8
# Nama stasiun dari A-G
nama <- LETTERS[1:7]

# Simulasi data curah hujan (dummy data sebagai atribut)
precip <- c(200, 100, 320, 978, 153, 903, 303)
# Kolom precip (curah hujan)
crh <- cbind(stasiun_crh, nama, precip)
crh
#>      lon      lat    nama precip
#> [1,] "-116.8" "41.3" "A"  "200" 
#> [2,] "-114.2" "42.9" "B"  "100" 
#> [3,] "-112.9" "42.4" "C"  "320" 
#> [4,] "-111.9" "39.8" "D"  "978" 
#> [5,] "-114.2" "37.6" "E"  "153" 
#> [6,] "-115.4" "38.3" "F"  "903" 
#> [7,] "-117.7" "37.6" "G"  "303"

Jadi, secara keseluruhan, kode tersebut menghasilkan vektor precip yang berisi data curah hujan simulasi dengan angka-angka acak yang telah diolah agar memiliki sifat yang mirip dengan data curah hujan (dummy data).

Peta lokasi titik-titik tidak berbeda jauh dari plot dasar pada umumnya (x,y). Namun, pada kasus ini titik-titik tersebut sebanding dengan nilai jumlah curah hujan yang dimiliki (pada data precip).

1
2
3
4
# Ukuran titik berdasarkan curah hujan (lebih besar curah hujan, lebih besar titiknya)
psize <- 1 + precip/200

plot(crh, cex = psize)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
# Plot peta dengan warna yang lebih menarik
plot(crh,
     cex = psize, # ukuran
     col = "darkblue" , # warna titik (jika tidak pakai pch maka hanya border saja)
     pch = 20, # Jenis titik
     main = 'Peta Lokasi Curah Hujan berdasarkan Jumlah Curah Hujannya') # Judul

# Menambahkan nama stasiun pada plot
text(stasiun_crh, nama, pos = 4, col = 'orange')

# Membuat legenda
breaks <- c(100, 250, 500, 1000)
legend.psize <- 1 + breaks / 500
legend(
  "topright",
  legend = breaks,
  pch = 20,
  pt.cex = legend.psize,
  col = 'darkblue',
  bg = 'white'
)

Note: Tidak ada kode khusus yang harus Anda gunakan untuk menentukan psize (ukuran titik) berdasarkan nilai precip (curah hujan).

Cara Anda menghitung psize dalam kode yang Anda bagikan, yaitu psize <- 1 + precip/200, adalah cara yang umum digunakan untuk menyesuaikan ukuran titik berdasarkan data numerik.

Di dalam rumus tersebut:

  • 1 adalah ukuran dasar titik.
  • precip adalah nilai curah hujan.
  • 200 adalah faktor yang mengontrol seberapa besar perbedaan ukuran titik berdasarkan nilai curah hujan. Semakin besar faktor ini, semakin besar perbedaan ukuran titik.

Kita dapat mengubah rumus ini sesuai dengan preferensi. Misalnya, jika ingin membuat perbedaan ukuran yang lebih besar, kita dapat meningkatkan faktor pembagi (misalnya, 1000), dan sebaliknya.

Contoh lain:

  • psize <- 1 + precip/1000 akan menghasilkan titik yang lebih kecil untuk curah hujan yang lebih tinggi.
  • psize <- 1 + sqrt(precip)/10 akan menghasilkan titik yang lebih besar untuk curah hujan yang lebih tinggi dengan menggunakan akar kuadrat.

Anda dapat menyesuaikan rumus ini sesuai dengan preferensi untuk menentukan ukuran titik berdasarkan data curah hujan.

Data Raster

Data Raster: Data raster adalah sel berpiksel atau berkisi yang direpresentasikan sebagai baris dan kolom. Ini adalah data berpiksel (atau berkisi) yang setiap pikselnya dikaitkan dengan lokasi geografis tertentu. Raster geospasial hanya berbeda dengan foto digital karena disertai dengan informasi spasial yang menghubungkan data ke lokasi tertentu. Raster adalah foto udara digital, citra dari satelit, gambar digital.

Ini adalah situs web untuk memahami dengan contoh bagaimana data raster adalah data geospasial

Kumpulan data raster berpotensi sangat besar. Resolusi meningkat seiring dengan mengecilnya ukuran sel; namun, biasanya biaya juga meningkat baik pada ruang disk maupun kecepatan pemrosesan.

Data raster adalah salah satu jenis data geospasial yang sangat penting. Ini adalah representasi dari permukaan yang dibagi menjadi sel berpiksel atau berkisi, dengan setiap piksel memiliki nilai yang mewakili atribut atau fenomena di lokasi geografis tertentu. Berikut ini penjelasan tentang contoh kode dan materi yang Anda bagikan:

  1. Membuat Data Raster:
    • Pada contoh kode berikut, kita menggunakan fungsi rast dari library terra untuk membuat objek data raster.
    • ncol dan nrow adalah argumen yang menentukan jumlah kolom dan baris pada data raster.
    • xmin, xmax, ymin, dan ymax digunakan untuk menentukan batas-batas geografis data raster.
1
2
3
4
5
6
7
r <- rast(ncol = 5,
          nrow = 5,
          xmin = -150,
          xmax = -80,
          ymin = 20,
          ymax = 60)
r
#> class       : SpatRaster 
#> dimensions  : 5, 5, 1  (nrow, ncol, nlyr)
#> resolution  : 14, 8  (x, y)
#> extent      : -150, -80, 20, 60  (xmin, xmax, ymin, ymax)
#> coord. ref. : lon/lat WGS 84

rast() -> untuk mengubah nilai-nilai piksel diatas menjadi sebuah nilai piksel untuk membentuk data raster

  1. Memberikan Nilai Piksel:
    • Setelah membuat objek data raster, kita menggunakan fungsi values untuk memberikan nilai pada piksel-piksel di dalamnya.
    • Pada contoh pertama, kita mengisi nilai piksel dengan bilangan acak antara 0 dan 1 menggunakan runif.
    • Pada contoh kedua, kita mengisi nilai piksel dengan urutan nilai dari 1 hingga jumlah sel (ncell) dalam data raster.
1
2
3
4
# Memberikan nilai pada piksel value
set.seed(99)
values(r) <- runif(ncell(r))
r
#> class       : SpatRaster 
#> dimensions  : 5, 5, 1  (nrow, ncol, nlyr)
#> resolution  : 14, 8  (x, y)
#> extent      : -150, -80, 20, 60  (xmin, xmax, ymin, ymax)
#> coord. ref. : lon/lat WGS 84 
#> source(s)   : memory
#> name        :      lyr.1 
#> min value   : 0.08052415 
#> max value   : 0.99250878
1
2
values(r) <- 1:ncell(r)
r
#> class       : SpatRaster 
#> dimensions  : 5, 5, 1  (nrow, ncol, nlyr)
#> resolution  : 14, 8  (x, y)
#> extent      : -150, -80, 20, 60  (xmin, xmax, ymin, ymax)
#> coord. ref. : lon/lat WGS 84 
#> source(s)   : memory
#> name        : lyr.1 
#> min value   :     1 
#> max value   :    25
  1. Visualisasi Data Raster:
    • Terakhir, gunakan fungsi plot untuk memvisualisasikan data raster.
    • Kita juga bisa menentukan palet warna yang sesuai dengan menggunakan argumen col. Dalam contoh ini, kita akan menggunakan palet warna terrain.colors(25).
1
2
# Visualisasi data raster dengan palet warna yang sesuai
plot(r, col = terrain.colors(25))
Hasil dari kode ini adalah data raster yang berisi piksel-piksel dengan nilai-nilai yang telah kita tentukan, dan visualisasi yang menunjukkan representasi grafis dari data tersebut dengan palet warna yang sesuai.

Data raster sangat berguna dalam berbagai aplikasi, seperti pemetaan cuaca, penginderaan jauh, pemodelan lingkungan, dan banyak lagi. Mereka memungkinkan kita untuk menganalisis fenomena yang berubah-ubah di seluruh permukaan bumi dengan tingkat detail yang beragam, tergantung pada resolusi raster.

Coordinate Reference Systems (CRS)

Sistem Referensi Koordinat (CRS) yang mendefinisikan bagaimana elemen spasial data berhubungan dengan permukaan bumi (atau benda lain). Ini seperti kita memadatkan permukaan bumi yang bulat menjadi peta yang datar.

Pentingnya CRS dalam data geospasial adalah agar kita bisa:

  1. Mengukur dengan Tepat: Jika kita ingin mengukur jarak atau luas di peta, kita harus tahu bagaimana skala pengukuran ini diubah dari bentuk asli bumi yang bulat.
  2. Pemetaan: CRS membantu kita menggambarkan peta dengan benar, karena setiap peta mungkin memiliki caranya sendiri untuk merubah permukaan bumi.
  3. Integrasi Data: Ketika kita menggabungkan data dari berbagai sumber, semua data ini harus menggunakan CRS yang sama agar bisa digunakan bersama.
  4. Georeferensi: Ini berarti mengaitkan koordinat dunia nyata dengan lokasi di peta, yang hanya bisa dilakukan jika kita tahu CRS yang digunakan.

Komponen Penting: Sebuah CRS umumnya terdiri dari beberapa komponen penting:

  1. Metode Proyeksi: Ini menentukan metode matematika yang digunakan untuk mengubah permukaan Bumi menjadi datar. Proyeksi umum meliputi Mercator, Lambert Conformal Conic, dan Albers Equal Area.
  2. Datum: Sebuah datum menentukan titik referensi dan orientasi sistem koordinat. Datum yang berbeda digunakan untuk berbagai bagian dunia.
  3. Satuan: Ini menentukan satuan pengukuran yang digunakan untuk jarak, seperti meter, kaki, derajat, atau satuan lainnya.
  4. Titik Asal: Beberapa proyeksi memiliki titik tertentu di permukaan Bumi sebagai titik asal mereka.
  5. Garis Bujur Pusat: Ini sering digunakan dalam proyeksi untuk menentukan garis bujur pusat peta.

Semua komponen ini bekerja bersama-sama untuk menggambarkan lokasi dan bentuk objek di dunia nyata ke dalam sistem koordinat yang bisa digunakan dalam analisis dan pembuatan peta.

Jadi, kesimpulannya, CRS adalah cara kita membuat peta yang akurat dan melakukan berbagai analisis berdasarkan lokasi. Yang penting, kita harus memilih CRS yang sesuai untuk setiap proyek berdasarkan kebutuhan dan daerah yang akan dipetakan.

Ilustrasi Proyeksi Peta

Sistem koordinat geografis

Sistem koordinat geografis mengidentifikasi lokasi mana pun di permukaan bumi menggunakan dua nilai — garis bujur dan garis lintang. Bujur adalah letaknya yang berarah Timur-Barat pada jarak sudut dari bidang Meridian Utama. Lintang adalah jarak sudut Utara atau Selatan bidang ekuator. Oleh karena itu, jarak dalam CRS geografis tidak diukur dalam meter. Permukaan bumi dalam sistem koordinat geografis diwakili oleh permukaan bola atau ellipsoidal. Ellipsoid adalah bagian dari komponen CRS yang lebih luas: datum . Ini berisi informasi tentang ellipsoid apa yang digunakan dan hubungan yang tepat antara koordinat Cartesian dan lokasi di permukaan bumi. Ada dua jenis datum — geosentris (misalnya WGS84) dan lokal (misalnya NAD83).

Source:[DataCarpentry](https://datacarpentry.org/)

Figure 1: Source:[DataCarpentry](https://datacarpentry.org/)

Proyeksi sistem referensi koordinat

Sistem proyeksi adalah cara yang lebih praktis untuk melakukan perhitungan dan sangat penting untuk membuat peta. Sistem referensi ini disebut “proyeksi” karena mengubah koordinat sudut 3D menjadi sistem datar (planar). Beberapa contoh proyeksi yang umum digunakan adalah UTM, Mercator, dan lainnya.

Ada tiga kelompok utama jenis proyeksi - berbentuk kerucut, silindris, dan planar (azimut). Dalam proyeksi kerucut, permukaan bumi diproyeksikan ke dalam kerucut sepanjang satu garis singgung atau dua garis singgung.

Contoh Implementasi Definisi Koordinat

Data titik koordinat curah hujan x dan y diatas tadi masih belum memiliki koordinat referensi karena masih dalam format matrix, sehingga perlu kita define masih menggunakna library terra. Dalam kasus ini, Kita telah menggunakan proyeksi +proj=longlat +datum=WGS84 untuk mendefinisikan koordinat referensi sebagai koordinat geografis WGS84, yang sangat umum digunakan.

Ini adalah langkah-langkah yang diperlukan untuk memberikan koordinat referensi ke objek data vektor geospasial di paket terra. Dengan koordinat referensi yang sudah ditentukan, Kita dapat melakukan analisis geospasial yang lebih akurat dan visualisasi yang tepat pada peta.

1
2
3
4
5
6
7
8
# Definisi koordinat referensi
coor_ref <- "+proj=longlat +datum=WGS84"

#  Buat objek data vektor
titik_crh <- vect(stasiun_crh, crs = coor_ref)

# Menampilkan objek vektor dengan atribut curah hujan
crs(titik_crh)
#> [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]]]]"
1
class(titik_crh)
#> [1] "SpatVector"
#> attr(,"package")
#> [1] "terra"

Berikut adalah penjelasan singkat tentang langkah-langkah diatas:

  1. Mendefinisikan koordinat referensi dengan menggunakan string "+proj=longlat +datum=WGS84", yang mendefinisikan proyeksi geografis dan datum sebagai WGS84.

  2. Membuat objek data vektor geospasial titik_crh dari koordinat stasiun dengan menentukan crs (koordinat referensi) yang telah Anda definisikan sebelumnya yakni coor_ref.

  3. Kemudian, memeriksa objek data vektor geospasial titik_crh untuk memastikan bahwa koordinat referensinya telah ditambahkan dengan benar.

Mambaca data spasial

Jenis-Jenis Data Geospasial

  • Terdapat berbagai jenis data geospasial yang digunakan untuk merepresentasikan informasi geografis. Beberapa jenis data geospasial yang umum meliputi:
    • Shapefile: Format file vektor yang sangat umum digunakan dalam pemetaan dan sistem informasi geografis (SIG).
    • GeoJSON: Format file vektor berbasis JSON yang populer untuk pertukaran data geospasial.
    • Raster: Representasi data dalam bentuk kisi piksel, seperti citra satelit atau peta tematik.
    • KML: Format file yang digunakan untuk pertukaran data geospasial dan digunakan dalam Google Earth.
    • TopoJSON: Format file yang mengurangi ukuran data geospasial untuk pengiriman dan pengolahan yang lebih efisien.

Membaca shapefile

Ada banyak format data yang dapat digunakan untuk menyimpan data spasial. KML, GeoJSON, GeoTIFF, Tab File, adalah beberapa format umum yang mungkin pernah Anda temui. Namun, format yang paling umum digunakan dalam pemetaan sistem informasi geografis adalah Shapefile.

Shapefile adalah standar universal format geospasial yang dikembangkan dan diatur oleh Esri, penyedia perangkat lunak sistem informasi geografis internasional. Format ini kemudian diadopsi oleh banyak bahasa pemrograman, termasuk R.

Nama Shapefile mungkin sedikit menyesatkan karena file ini umumnya terdiri dari beberapa file terpisah:

  • .shp (wajib): berisi data geometri.
  • .shx (wajib): berisi data indeks yang digunakan untuk mengidentifikasi geometri yang berbeda.
  • .dbf (wajib): berisi informasi atribut (tabel dengan info lebih lanjut tentang setiap fitur).
  • .prj berisi informasi tentang sistem koordinat referensi.

Selain file yang tercantum di atas, sebuah shapefile dapat mencakup komponen file lainnya. Daftar komponen shapefile yang komprehensif dapat diakses di sini.

Membaca shapefile (inageoportal)

Untuk kasus ini, saya telah menyediakan shapefile untuk mengakses dan mendownload data SHAPEFILE (shp) dari portal Tanah Air Indonesia. Langkah unduh bisa dilihat pada: PPT

Mari baca file menggunakan fungsi st_read() dari paket sf:

1
adm_bantul <- st_read("dataset/Kec_Bantul/kec_bantul.shp")
#> Reading layer `kec_bantul' from data source 
#>   `G:\My Drive\Algoritma-G\RnD\algotech\content\post\2024-06-20-geospatial-rayshader-part2\dataset\Kec_Bantul\kec_bantul.shp' 
#>   using driver `ESRI Shapefile'
#> Simple feature collection with 17 features and 5 fields
#> Geometry type: POLYGON
#> Dimension:     XY
#> Bounding box:  xmin: 110.2045 ymin: -8.028906 xmax: 110.5213 ymax: -7.76771
#> Geodetic CRS:  WGS 84
1
adm_bantul
#> Simple feature collection with 17 features and 5 fields
#> Geometry type: POLYGON
#> Dimension:     XY
#> Bounding box:  xmin: 110.2045 ymin: -8.028906 xmax: 110.5213 ymax: -7.76771
#> Geodetic CRS:  WGS 84
#> First 10 features:
#>    fid ogc_fid        desa     kecamatan kabupaten
#> 1    1       1  Tirtohargo        Kretek    Bantul
#> 2    2       2    Argodadi        Sedayu    Bantul
#> 3    3       3 Gadingharjo        Sanden    Bantul
#> 4    4       4   Sidomulyo Bambanglipuro    Bantul
#> 5    5       5  Caturharjo        Pandak    Bantul
#> 6    6       6   Poncosari     Srandakan    Bantul
#> 7    7       7      Canden         Jetis    Bantul
#> 8    8       8 Timbulharjo         Sewon    Bantul
#> 9    9       9    Jambidan   Banguntapan    Bantul
#> 10  10      10   Seloharjo       Pundong    Bantul
#>                          geometry
#> 1  POLYGON ((110.3166 -7.98874...
#> 2  POLYGON ((110.2767 -7.83451...
#> 3  POLYGON ((110.2765 -7.95940...
#> 4  POLYGON ((110.2846 -7.93789...
#> 5  POLYGON ((110.2821 -7.94244...
#> 6  POLYGON ((110.2548 -7.95308...
#> 7  POLYGON ((110.3691 -7.91989...
#> 8  POLYGON ((110.3768 -7.86053...
#> 9  POLYGON ((110.4281 -7.84666...
#> 10 POLYGON ((110.3594 -7.95803...

Ada beberapa informasi yang disimpan dalam geometri sf:

  • Geometry Type/Jenis Geometri: Ada tujuh jenis geometri paling umum dalam fitur sederhana: POINT, LINESTRING, POLYGON, MULTIPOINT, MULTILINESTRING, MULTIPOLYGON dan GEOMETRYCOLLECTION.
  • Dimension/Dimensi: Mengacu pada ruang 2-(XY), 3-(XYZ/XYM) atau 4 dimensi (XYZM).
  • Bbox (Bounding Box): area yang ditentukan oleh dua garis bujur dan dua garis lintang.
  • CRS: Sistem Referensi Koordinat.

sf merupakan singkatan dari “Simple Features” yang merepresentasikan data sebagai catatan dalam sebuah data.frame atau tibble dengan sebuah kolom list geometri1. Simple Features adalah model data hierarkis yang mewakili berbagai jenis geometri. Dari 17 jenis geometri yang didukung oleh spesifikasi, hanya 7 yang digunakan dalam sebagian besar penelitian geografis 2:

Source:[Geocomputation with R](https://geocompr.robinlovelace.net/)

Figure 2: Source:[Geocomputation with R](https://geocompr.robinlovelace.net/)

Jika Anda menggunakan fungsi class() untuk objek idn yang baru dibuat, Anda dapat melihat bagaimana kelas sf mengelola data spasial dengan cara yang mirip dengan struktur data tabel biasa; dengan menyimpannya sebagai data frame:

1
class(adm_bantul)
#> [1] "sf"         "data.frame"

Perbedaan utama antara sebuah data frame biasa dan sebuah objek sf adalah bahwa objek sf memiliki kolom geometry yang menjelaskan di mana fitur tersebut terletak di Bumi, dan mereka memiliki atribut, yang menjelaskan properti lainnya:

1
adm_bantul$geometry
#> Geometry set for 17 features 
#> Geometry type: POLYGON
#> Dimension:     XY
#> Bounding box:  xmin: 110.2045 ymin: -8.028906 xmax: 110.5213 ymax: -7.76771
#> Geodetic CRS:  WGS 84
#> First 5 geometries:

POLYGON:

  • Ini adalah atribut yang berkaitan dengan data vektor berupa poligon (POLYGON).
  • Geometri jenis POLYGON dengan dimensi XY (2D).
  • Bounding box (kotak pembatas) menunjukkan kotak yang mencakup seluruh poligon dalam data tersebut dalam koordinat geografis.
  • CRS adalah “WGS 84” yang juga mengindikasikan sistem referensi koordinat geografis WGS 84.

Untuk mendapatkan gambaran yang lebih baik tentang informasi geometry dalam objek sf, mari kita lanjutkan dan plot adm_bantul$geometry menggunakan fungsi plot():

1
plot(adm_bantul)

Membaca shapefile (GADMTools)

Tip Ekstra:
Anda juga dapat mengakses basis data GADM langsung dari R dengan bantuan pustaka GADMTools:

1
2
3
4
5
6
7
8
# install.packages("https://cran.r-project.org/src/contrib/Archive/maptools/maptools_1.1-8.tar.gz", repos = NULL, type = "source")
# install.packages("https://cran.r-project.org/src/contrib/Archive/rgeos/rgeos_0.6-4.tar.gz", repos = NULL, type = "source")
# install.packages("https://cran.r-project.org/src/contrib/Archive/GADMTools/GADMTools_3.9-1.tar.gz", repos = NULL, type = "source")
# 
# install.packages("ggmap")
# install.packages("rosm")
# install.packages("ggspatial")
# install.packages("prettymapr")
1
2
3
4
5
# Code example to load Indonesia's spatial vector in Kabupaten/Kota level  
library(GADMTools)  
library(sf)  

# map <- gadm_sf_loadCountries(c("IDN"), level=2, basefile = "./")

Mari baca file menggunakan fungsi st_read() dari paket sf:

1
idn <- st_read(dsn = "shp", layer = "idn")
#> Reading layer `idn' from data source 
#>   `G:\My Drive\Algoritma-G\RnD\algotech\content\post\2024-06-20-geospatial-rayshader-part2\shp' 
#>   using driver `ESRI Shapefile'
#> Simple feature collection with 6694 features and 16 fields
#> Geometry type: MULTIPOLYGON
#> Dimension:     XY
#> Bounding box:  xmin: 95.0097 ymin: -11.00762 xmax: 141.0194 ymax: 6.076941
#> Geodetic CRS:  WGS 84

Cek tipe data

1
class(idn)
#> [1] "sf"         "data.frame"

Cek atribut:

1
idn$geometry
#> Geometry set for 6694 features 
#> Geometry type: MULTIPOLYGON
#> Dimension:     XY
#> Bounding box:  xmin: 95.0097 ymin: -11.00762 xmax: 141.0194 ymax: 6.076941
#> Geodetic CRS:  WGS 84
#> First 5 geometries:

SpatRaster:

  • Ini adalah atribut yang berkaitan dengan data raster (SpatRaster).
  • Dimensinya 5x5 dengan resolusi 14x8, rentang dari -150 hingga -80 di bujur (longitude) dan dari 20 hingga 60 di lintang (latitude).
  • Sumber datanya adalah “memory” yang mungkin berarti dibuat secara dinamis di dalam memori.
  • Koordinat referensi (coord. ref.) adalah “lon/lat WGS 84” yang mengindikasikan bahwa data ini dalam sistem referensi koordinat geografis WGS 84 (longitude/latitude).

Note: Perbedaan dalam tipe data antara kedua dataset shp diatas (satu sebagai POLYGON dan satu sebagai SpatRaster) disebabkan oleh perbedaan dalam representasi dan struktur data dari sumber asalnya.

  1. Data Pertama (POLYGON):
    • Data kedua, yang Anda dapatkan dari InaGeoPortal Kabupaten Bantul, mungkin awalnya adalah data vektor yang sudah dalam format POLYGON.
    • Data ini mungkin telah disimpan dalam format yang berbeda (Shapefile) atau dalam struktur yang lebih sederhana daripada SpatRaster.
  2. Data Kedua (SpatRaster):
    • Data pertama, yang Anda sebutkan didapatkan dari GADMTools, mungkin awalnya merupakan data vektor yang mewakili batas administrasi dalam format seperti data POLYGON.
    • Namun, ketika data ini diolah atau dimuat dengan GADMTools, mungkin telah diubah menjadi tipe data raster (SpatRaster). Ini bisa terjadi jika ada proses transformasi atau pengolahan data yang mengubah representasi geometri menjadi format raster, misalnya, ketika data diubah menjadi grid atau citra raster.

Kedua dataset ini mungkin mewakili informasi geografis yang sama (misalnya, batas administrasi) tetapi dalam format yang berbeda. Perbedaan dalam representasi dan struktur data dapat muncul karena sumber data yang berbeda dan pemrosesan yang berbeda yang diterapkan pada data tersebut. Penting untuk memahami format dan struktur data saat bekerja dengan data geospasial untuk memastikan bahwa Anda menggunakan alat dan metode yang sesuai untuk jenis data yang Anda miliki.

Untuk mendapatkan pemahaman yang lebih baik tentang informasi geometri dalam objek sf, mari lanjutkan dan gambarkan idn$geometry menggunakan fungsi plot():

Studi Kasus 1: Peta Tematik Kepadatan Penduduk

Menggunakan data shp Kecamatan Bantul

1
2
# cek keseluruhan data shp
plot(adm_bantul)
1
2
# hanya plot polygon adm nya saja berdasarkan kolom geometry
plot(adm_bantul$geometry)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# library(sf)
# library(ggmap)
# library(rgeos)
# library(maptools)
# library(dplyr)
# library(sp)

# kec_bantul_ori <- read_sf("dataset/Kec_Bantul/kec_bantul.shp")
adm_bantul <- st_transform(adm_bantul, CRS("+init=epsg:4326"))
plot(adm_bantul$geometry)
1
2
3
4
library(readxl)

kpdt_pddk <- read_excel("dataset/Kec_Bantul/kpdt.xls")
kpdt_pddk
#> # A tibble: 17 × 2
#>    kecamatan     kpdt_pddk
#>    <chr>             <dbl>
#>  1 Kretek            1155.
#>  2 Sedayu            1539.
#>  3 Sanden            1364.
#>  4 Bambanglipuro     1851.
#>  5 Pandak            2177.
#>  6 Srandakan         1715.
#>  7 Jetis             2475.
#>  8 Sewon             4113.
#>  9 Banguntapan       4460.
#> 10 Pundong           1526.
#> 11 Imogiri           1187.
#> 12 Kasihan           3622.
#> 13 Bantul            3015.
#> 14 Pleret            2256.
#> 15 Piyungan          1724.
#> 16 Dlingo             716.
#> 17 Pajangan          1199.
1
2
3
4
5
kpdt_bantul <- adm_bantul %>%
  left_join(kpdt_pddk, by = c("kecamatan" = "kecamatan")) %>% 
  arrange(kecamatan)

glimpse(kpdt_bantul)
#> Rows: 17
#> Columns: 7
#> $ fid       <int> 4, 9, 13, 16, 11, 7, 12, 1, 17, 5, 15, 14, 10, 3, 2, 8, 6
#> $ ogc_fid   <dbl> 4, 9, 13, 16, 11, 7, 12, 1, 17, 5, 15, 14, 10, 3, 2, 8, 6
#> $ desa      <chr> "Sidomulyo", "Jambidan", "Palbapang", "Dlingo", "Selopamioro…
#> $ kecamatan <chr> "Bambanglipuro", "Banguntapan", "Bantul", "Dlingo", "Imogiri…
#> $ kabupaten <chr> "Bantul", "Bantul", "Bantul", "Bantul", "Bantul", "Bantul", …
#> $ kpdt_pddk <dbl> 1850.75, 4460.29, 3015.13, 716.48, 1187.06, 2474.83, 3622.21…
#> $ geometry  <POLYGON [°]> POLYGON ((110.2846 -7.93789..., POLYGON ((110.4281 -7.84666.…
1
plot(kpdt_bantul)

Membuat Peta di R

Membuat Peta dengan Library ggplot2

1
2
ggplot(kpdt_bantul)+ # add base canvas
  geom_sf() # plot the geometry

🗺️ Pembuatan Peta Tematik

Secara umum, data spasial dapat direpresentasikan sebagai peta referensi atau peta tematik. Sementara peta referensi menekankan lokasi objek di dunia, peta tematik menunjukkan variabilitas spasial dari distribusi tertentu. Peta distribusi harga rumah yang telah kita buat sebelumnya adalah salah satu jenis peta tematik yang paling sering digunakan dalam data geospasial, yang disebut peta Choropleth.

Source: [Mapping Ideas from Cyberspace to Realspace](http://mappingideas.sdsu.edu/CaliforniaAtlas/atlas/pages/10_types_of_maps.pdf)

Figure 3: Source: [Mapping Ideas from Cyberspace to Realspace](http://mappingideas.sdsu.edu/CaliforniaAtlas/atlas/pages/10_types_of_maps.pdf)

Membuat Peta dengan Library leaflet

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# Leaflet
library(leaflet)
library(BAMMtools) # untuk menghitung pembingkaian data (jenks breaks)

# Mendefinisikan Label Pop-up:
labels <- sprintf("<strong>%s</strong><br/>%g penduduk / km<sup>2</sup>",
  kpdt_bantul$kecamatan, kpdt_bantul$kpdt_pddk) %>% lapply(FUN = htmltools::HTML)

# Mendefinisikan Warna:
col <- kpdt_bantul$kpdt_pddk

# kategorisasi variabel kepadatan penduduk kedalam 4 kelompok = 5 
bins <- c(getJenksBreaks(kpdt_bantul$kpdt_pddk, 5))

# melakukan pewarnaan
pal <- colorBin("YlOrRd", 
                domain = col, #variabel yang ingin dipetakan
                bins = bins ) 
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# Plot Peta:
Bantul <- leaflet(kpdt_bantul) %>%
  addProviderTiles(providers$Esri.WorldStreetMap) %>% 
  # addProviderTiles("Stamen.Terrain",
  #                  group = "Stamen.Terrain") %>% 
  addPolygons(fillColor = pal(col), # memberi warna pada poligon sesuai dengan nilai kpdt_pddk
              weight = 2,
              opacity = 1,
              color = "white",
              dashArray = "3",
              fillOpacity = 0.7, 
              highlightOptions = highlightOptions(weight = 5,
                                                  color = "#666",
                                                  dashArray = "",
                                                  fillOpacity = 0.7,
                                                  bringToFront = TRUE),
              label = labels,
              labelOptions = labelOptions(
                style = list("font-weight" = "normal", padding = "3px 8px"),textsize = "15px")) %>% 
  addLegend("bottomright", 
            pal = pal,
            values = ~col,
            title = "Kepadatan Penduduk Kabupaten Bantul",
            labFormat = labelFormat(digits = 2),
            opacity = 1)
Bantul

Studi Kasus: Peta Tematik Lain [Optional]

Secara umum, data spasial dapat direpresentasikan baik sebagai peta referensi maupun peta tematik. Sementara peta referensi menekankan lokasi objek di dunia, peta tematik menunjukkan variasi spasial dari distribusi tertentu. Peta distribusi harga rumah yang telah kita buat sebelumnya adalah salah satu jenis peta tematik yang paling sering digunakan dalam data geospasial, yaitu peta korelasi.

Keuntungan besar penggunaan sf adalah bagaimana setiap fungsi dapat digabungkan menggunakan operator %>% dan berfungsi dengan baik dengan koleksi paket R dari tidyverse, yang memberikan kami kendali yang lebih baik atas informasi geometri dalam objek sf. Misalnya, untuk mengambil subset provinsi tertentu, Anda dapat menggunakan metode filter() seperti yang Anda lakukan dengan data frame biasa:

1
unique(idn$NAME_1)
#>  [1] "Aceh"                "Bali"                "Bangka Belitung"    
#>  [4] "Banten"              "Bengkulu"            "Gorontalo"          
#>  [7] "Jakarta Raya"        "Jambi"               "Jawa Barat"         
#> [10] "Jawa Tengah"         "Jawa Timur"          "Kalimantan Barat"   
#> [13] "Kalimantan Selatan"  "Kalimantan Tengah"   "Kalimantan Timur"   
#> [16] "Kepulauan Riau"      "Lampung"             "Maluku"             
#> [19] "Maluku Utara"        "Nusa Tenggara Barat" "Nusa Tenggara Timur"
#> [22] "Papua"               "Papua Barat"         "Riau"               
#> [25] "Sulawesi Barat"      "Sulawesi Selatan"    "Sulawesi Tengah"    
#> [28] "Sulawesi Tenggara"   "Sulawesi Utara"      "Sumatera Barat"     
#> [31] "Sumatera Selatan"    "Sumatera Utara"      "Yogyakarta"

Selain fitur sederhana sf, sebenarnya ada metodologi lain untuk menyimpan model fitur geografis ke dalam R. Jika Anda pernah melakukan penelitian geospasial di R, Anda mungkin juga familiar dengan penggunaan paket sp. Sebenarnya, sp adalah paket yang sangat baik dikembangkan sejak tahun 2005 yang praktis mendukung hampir setiap analisis GIS di R, bahkan sampai sekarang.

Masalah utama dari sp adalah kompatibilitasnya yang rendah dengan struktur data frame R. sf dibangun untuk mengisi kesenjangan tersebut. Dirilis pada tahun 2016, sf menggunakan standar OGC (Open Geospatial Consortium) & ISO dalam mencatat dan mengatur data spasial dengan fitur sederhana.

Kerugian dari sf adalah, karena relatif baru, beberapa paket spasial mungkin belum mendukung objek sf. Untungnya, kita masih dapat mengonversi objek sf ke kelas spasial yang digunakan dalam sp:

1
2
3
4
library(sp)
idn_sp <- as(idn, Class = "Spatial")

class(idn_sp)
#> [1] "SpatialPolygonsDataFrame"
#> attr(,"package")
#> [1] "sp"

Objek spasial dapat dikonversi kembali ke objek sf dengan cara yang sama atau dengan menggunakan fungsi st_as_sf() dari sf:

1
2
3
idn_sf <- st_as_sf(idn_sp)

class(idn_sf)
#> [1] "sf"         "data.frame"

Pada kasus ini kita menggunakan data yang diambil dari GADMTools idn dengan melakukan filter Jakarta Raya saja.

1
2
3
4
dki <- idn %>% 
  filter(NAME_1 == "Jakarta Raya" & NAME_2 != "Kepulauan Seribu") # remove kelupauan seribu

plot(dki$geometry)
1
dki$geometry
#> Geometry set for 43 features 
#> Geometry type: MULTIPOLYGON
#> Dimension:     XY
#> Bounding box:  xmin: 106.6862 ymin: -6.370783 xmax: 106.9728 ymax: -6.089036
#> Geodetic CRS:  WGS 84
#> First 5 geometries:
1
2
# Melihat nilai unik dari data
unique(dki$NAME_2)
#> [1] "Jakarta Barat"   "Jakarta Pusat"   "Jakarta Selatan" "Jakarta Timur"  
#> [5] "Jakarta Utara"
1
class(dki)
#> [1] "sf"         "data.frame"
1
dki$geometry
#> Geometry set for 43 features 
#> Geometry type: MULTIPOLYGON
#> Dimension:     XY
#> Bounding box:  xmin: 106.6862 ymin: -6.370783 xmax: 106.9728 ymax: -6.089036
#> Geodetic CRS:  WGS 84
#> First 5 geometries:
1
2
3
4
5
dki_prov <- dki %>% 
  group_by(NAME_1) %>% 
  summarise()

plot(dki_prov$geometry)
1
head(dki)
#> Simple feature collection with 6 features and 16 fields
#> Geometry type: MULTIPOLYGON
#> Dimension:     XY
#> Bounding box:  xmin: 106.6862 ymin: -6.225213 xmax: 106.8107 ymax: -6.095124
#> Geodetic CRS:  WGS 84
#>   GID_0    NAME_0   GID_1       NAME_1 NL_NAME_1     GID_2        NAME_2
#> 1   IDN Indonesia IDN.7_1 Jakarta Raya      <NA> IDN.7.1_1 Jakarta Barat
#> 2   IDN Indonesia IDN.7_1 Jakarta Raya      <NA> IDN.7.1_1 Jakarta Barat
#> 3   IDN Indonesia IDN.7_1 Jakarta Raya      <NA> IDN.7.1_1 Jakarta Barat
#> 4   IDN Indonesia IDN.7_1 Jakarta Raya      <NA> IDN.7.1_1 Jakarta Barat
#> 5   IDN Indonesia IDN.7_1 Jakarta Raya      <NA> IDN.7.1_1 Jakarta Barat
#> 6   IDN Indonesia IDN.7_1 Jakarta Raya      <NA> IDN.7.1_1 Jakarta Barat
#>   NL_NAME_2       GID_3           NAME_3 VARNAME_3 NL_NAME_3    TYPE_3
#> 1      <NA> IDN.7.1.1_1       Cengkareng      <NA>      <NA> Kecamatan
#> 2      <NA> IDN.7.1.2_1 Grogolpetamburan      <NA>      <NA> Kecamatan
#> 3      <NA> IDN.7.1.3_1        Kalideres      <NA>      <NA> Kecamatan
#> 4      <NA> IDN.7.1.4_1       Kebonjeruk      <NA>      <NA> Kecamatan
#> 5      <NA> IDN.7.1.5_1        Kembangan      <NA>      <NA> Kecamatan
#> 6      <NA> IDN.7.1.6_1         Palmerah      <NA>      <NA> Kecamatan
#>      ENGTYPE_3    CC_3 HASC_3                       geometry
#> 1 Sub-district 3174070   <NA> MULTIPOLYGON (((106.7004 -6...
#> 2 Sub-district 3174040   <NA> MULTIPOLYGON (((106.7833 -6...
#> 3 Sub-district 3174080   <NA> MULTIPOLYGON (((106.7004 -6...
#> 4 Sub-district 3174020   <NA> MULTIPOLYGON (((106.7771 -6...
#> 5 Sub-district 3174010   <NA> MULTIPOLYGON (((106.7603 -6...
#> 6 Sub-district 3174030   <NA> MULTIPOLYGON (((106.7827 -6...

Membuat Peta di R

Membuat Peta dengan Library ggplot2

R dilengkapi dengan alat bawaan dan paket sumber terbuka untuk membantu kita mengubah objek sp dan sf menjadi visualisasi peta yang rapi. Pada sesi pertama workshop ini, Anda telah mempelajari tentang sebuah perpustakaan plot yang banyak digunakan dan kuat untuk R, yaitu ggplot2. Hal hebatnya adalah bahwa ggplot dapat langsung memplot objek sf dengan menggunakan geom_sf.

Ingat tentang sistem layering ggplot2 dan lihat kode di bawah ini:

1
2
ggplot(dki)+ # add base canvas
  geom_sf() # plot the geometry
\### Membuat Peta dengan Library `leaflet`
1
2
3
4
# leaflet
leaflet(dki) %>% # create map widget
  addTiles() %>% # add basemap
  addPolygons() # add polygons from `sf` data %

Sebagai contoh, mari kita lihat dataset lokasi Perumahan di daerah Jakarta:

1
2
perum <- read.csv('dataset/perumahan.csv')
head(perum)
#>               perumahan            kota  latitude longitude
#> 1 Bintaro Jaya Sektor 2 Jakarta Selatan -6.278108  106.7522
#> 2        Buaran Regency   Jakarta Timur -6.232117  106.9251
#> 3    Casa Permata Hijau Jakarta Selatan -6.221427  106.7832
#> 4     Cempaka Residence Jakarta Selatan -6.291828  106.7779
#> 5       Green Lake City   Jakarta Barat -6.177477  106.7113
#> 6          Green Lontar Jakarta Selatan -6.364691  106.7983

Mari kita coba untuk membuat peta titik density menggunakan leaflet’s addCircles() function:

1
2
3
leaflet(perum) %>% 
  addTiles() %>% 
  addCircles(label = ~perumahan)

Cara umum lainnya untuk menggambarkan peta kerapatan geografis atau peta density adalah dengan menggunakan peta panas (heatmap). Untuk membuat peta panas di leaflet, kita dapat menggunakan paket leaflet.extras:

Kode diatas dibuat menggunakan library leaflet dalam R untuk membuat peta kerapatan perumahan dengan menggunakan heatmap. Di bawah ini adalah penjelasan dari setiap bagian kode:

  1. leaflet(perum): Ini memulai pembuatan objek peta dengan menggunakan data perum sebagai dasar peta. perum adalah objek sf yang berisi informasi tentang perumahan.

  2. addTiles(): Ini menambahkan lapisan dasar peta yang menggunakan tile dari penyedia peta yang telah ditentukan. Dalam hal ini, Anda menggunakan tile dasar.

  3. addCircles(): Ini menambahkan titik perumahan ke peta. Anda menggunakan label untuk menampilkan label pada setiap titik, dan Anda mengatur warna titik menjadi merah dengan color = "red".

  4. addHeatmap(): Ini menambahkan lapisan heatmap ke peta. Heatmap adalah cara visualisasi kerapatan titik pada peta. Anda dapat mengatur radius heatmap dengan radius. Semakin besar nilai radius, semakin besar area yang dicakup oleh setiap titik pada heatmap.

Layering bersama batas admin perkecamatan di DKI Jakarta.

Insight: Warna merah digunakan untuk menunjukkan titik-titik perumahan. Semakin merah warnanya, semakin tinggi kerapatan perumahan di daerah tersebut. Dalam konteks peta kerapatan, biasanya warna-warna yang lebih gelap atau cerah (seperti merah tua) digunakan untuk menunjukkan kerapatan yang lebih tinggi, sedangkan warna-warna yang lebih terang (seperti merah muda) digunakan untuk menunjukkan kerapatan yang lebih rendah.

Jadi, jika ada area dengan banyak titik perumahan yang berwarna merah tua, itu menandakan kerapatan perumahan yang tinggi di daerah tersebut. Sebaliknya, jika ada area dengan titik-titik perumahan yang berwarna merah muda atau lebih terang, itu menandakan kerapatan perumahan yang lebih rendah. Warna merah adalah cara visual untuk memperlihatkan perbedaan dalam kerapatan perumahan di berbagai bagian wilayah pada peta.

Membaca data Raster format .Tiff

Mirip dengan paket sf , terra juga menyediakan plot() metode untuk kelasnya sendiri. Raster dapat dibuat dari awal menggunakan rast().

1
gtif
#> class       : SpatRaster 
#> dimensions  : 3333, 3333, 1  (nrow, ncol, nlyr)
#> resolution  : 0.0000750075, 0.0000750075  (x, y)
#> extent      : 116.5, 116.75, -8.5, -8.25  (xmin, xmax, ymin, ymax)
#> coord. ref. : lon/lat WGS 84 
#> source      : DEMNAS_1807-61_v1.0_bali.tif 
#> name        : DEMNAS_1807-61_v1.0_bali

Bagaimana kita memberikan koordinat pada data yang belum terdefinisasi (seperti data raster)? R menggunakan PROJ.4 untuk melakukan transformasi CRS (Coordinate Reference System). Namun, dalam beberapa kasus, PROJ.4 mungkin tidak cukup, dan Anda perlu menggunakan kode EPSG. Kode EPSG ini digunakan untuk mendefinisikan proyeksi, datum, dan sejumlah parameter lain yang menggambarkan di mana pusat peta tersebut berada.

Contoh:

1
2
gtif_utm = project(gtif, "EPSG:32750")
gtif_utm
#> class       : SpatRaster 
#> dimensions  : 3343, 3329, 1  (nrow, ncol, nlyr)
#> resolution  : 8.275388, 8.275388  (x, y)
#> extent      : 444933.8, 472482.6, 9060391, 9088055  (xmin, xmax, ymin, ymax)
#> coord. ref. : WGS 84 / UTM zone 50S (EPSG:32750) 
#> source(s)   : memory
#> name        : DEMNAS_1807-61_v1.0_bali 
#> min value   :                 -4.98096 
#> max value   :               2308.05127
\[Optional\] Menghitung luasan area
1
st_area(dki_prov) # Data Vektor luas area provinsi DKI
#> 645545871 [m^2]
1
res(gtif_utm) # Data Raster area Bali
#> [1] 8.275388 8.275388

Namun, disini res() tersebut hanya mengembalikan vektor numerik tanpa satuan apa pun, memaksa kita mengetahui bahwa satuan proyeksi UTM adalah meter. Berbeda dengan st_area yang outputnya memang m2 karena berasal dari data vektor.

Mengapa penting melakukan define koordinat pada data spasial?

Pentingnya mendefinisikan koordinat pada data spasial adalah sebagai berikut:

  1. Presisi Lokasi: Mendefinisikan koordinat membantu dalam menentukan lokasi yang tepat dari objek geografis. Ini memungkinkan kita untuk merujuk pada lokasi geografis secara akurat dan menjaga presisi data.

  2. Analisis Spatial: Untuk melakukan analisis spasial, seperti perhitungan jarak, luas area, dan sebagainya, kita perlu menggunakan sistem koordinat yang konsisten. Tanpa sistem koordinat yang terdefinisi, analisis ini akan tidak mungkin dilakukan.

  3. Pemetaan dan Visualisasi: Mendefinisikan koordinat memungkinkan kita untuk membuat peta yang akurat dan visualisasi data geografis dengan benar. Ini membantu dalam pemahaman yang lebih baik tentang pola geografis dan distribusi data.

  4. Kompatibilitas Data: Dalam proyek yang melibatkan beberapa set data geografis yang berbeda, mendefinisikan koordinat adalah langkah penting untuk memastikan bahwa data-data tersebut dapat digabungkan dan diintegrasikan dengan benar.

  5. Pemahaman Terhadap Referensi Geodetik: Mendefinisikan koordinat juga berarti memahami referensi geodetik yang digunakan dalam data tersebut. Ini penting ketika berhubungan dengan data-data geodetik yang diukur di berbagai lokasi di seluruh dunia.

  6. Kepatuhan Standar: Banyak organisasi dan proyek yang memiliki standar spesifik terkait dengan sistem koordinat yang harus digunakan. Mendefinisikan koordinat adalah cara untuk memastikan kepatuhan terhadap standar-standar tersebut.

Dengan mendefinisikan koordinat, kita dapat menggambarkan lokasi objek secara konsisten, melakukan analisis spasial, dan mengintegrasikan data geografis dengan lebih baik, yang semuanya penting dalam berbagai bidang seperti geografi, geologi, ekologi, pemetaan, dan banyak lagi.

Untuk saat ini, cukup mengetahui:

  • Bahwa sistem koordinat merupakan komponen kunci dari objek geografis

  • Mengetahui di CRS mana data Anda berada, dan apakah data tersebut berada dalam geografis (lon/lat) atau proyeksi (biasanya meter), adalah hal yang penting dan memiliki konsekuensi terhadap cara R menangani operasi spasial dan geometri.

  • CRS sf objek dapat dikueri dengan fungsi st_crs(), CRS terra objek dapat dikueri dengan fungsi crs()

Source:[Koordinat Refernsi](https://r.geocompx.org/figures/02_vector_crs.png)

Figure 4: Source:[Koordinat Refernsi](https://r.geocompx.org/figures/02_vector_crs.png)

Reference

Built with Hugo
Theme Stack designed by Jimmy