5 minute read

Tahun lalu, saya pernah menuliskan bagaimana caranya agar dari data berupa longitude dan latitude kita bisa mendapatkan data detail lokasi seperti:

  • Negara,
  • Provinsi,
  • Kota / Kabupaten,
  • Kecamatan, dan
  • Level lokasi lainnya.

Data ini juga bersifat umum, tidak hanya berlaku di Indonesia saja.


Beberapa hari belakangan ini, saya mendapatkan request untuk melakukan web scraping sekian ribu tempat keramaian di beberapa kota luar negeri dari Google Maps. Salah satu kota targetnya adalah kota Kuala Lumpur di Malaysia.

Langkah pertama yang saya biasanya saya kerjakan adalah membuat area persegi panjang dari Kuala Lumpur. Walaupun kita ketahui bersama bahwa tidak mungkin ada kota yang memiliki area berbentuk persegi panjang sempurna. Dari area ini, saya akan ambil semua titik keramaian yang mungkin ada.

Nah, PR saya selanjutnya adalah memilih titik-titik mana saja yang benar-benar berada di Kuala Lumpur. Bagaimana caranya?

Caranya adalah dengan menggunakan cara yang saya tulis sebelumnya.

Sebagai contoh, saya punya data longlat berikut:

lat  = 3.154614
long = 101.635143
# kita bentuk ke dalam data frame
df   = data.frame(long,lat)

Ternyata cara yang dahulu saya gunakan sudah tidak bisa lagi!. Kenapa? Salah satu proses yang wajib dijalankan pada skrip terdahulu adalah men-download data raster dari database GADM. Nah, ternyata versi GADM yang terbaru sudah tidak support lagi dengan skrip yang dahulu.

Akhirnya saya harus mencari cara lain untuk mendapatkan informasi yang dibutuhkan.


Alternatif Cara

Dari website-nya, data GADM terbaru merupakan versi 4.1 yang harus kita download manual per negara. Nah, kita cukup mengubah bentuk file hasil download ke bentuk shapefile yang siap kita gunakan. Berikut langkah-langkahnya:

Langkah I

Buka situs GADM, pilih negara yang diinginkan. Misalkan: Malaysia.

Pilih data shapefile. Tunggu hingga zipped file-nya sudah selesai masuk ke local drive kita.

Langkah II

Unzip file tersebut, lalu masukkan ke dalam working directory.

Langkah III

Sekarang kita akan import data shapefile yang sudah di-download tersebut ke dalam R dengan menggunakan library(raster) dan library(sp). Misalkan saya hendak mendapatkan informasi hingga level ke dua.

# load libraries
library(raster)
library(sp)
library(dplyr)

# import data
malaysia = shapefile("gadm41_MYS_2.shp", package = "raster")

Langkah IV

Sekarang kita akan ekstrak informasinya.

city_names = extract(malaysia,               # ini data referensinya
                     df[, c("long", "lat")]) # ini data inputnya

Berikut adalah hasilnya:

city_names
  id.y     GID_2 GID_0  COUNTRY   GID_1       NAME_1 NL_NAME_1       NAME_2
1    1 MYS.4.1_1   MYS Malaysia MYS.4_1 Kuala Lumpur      <NA> Kuala Lumpur
  VARNAME_2 NL_NAME_2              TYPE_2         ENGTYPE_2 CC_2   HASC_2
1      <NA>      <NA> Wilayah Persekutuan Federal Territory <NA> MY.KL.KL

Oke, saya hanya akan menampilkan hasil yang dibutuhkan saja:

city_names %>% 
  select(COUNTRY,NAME_2,TYPE_2,ENGTYPE_2) %>% 
  knitr::kable()
COUNTRY NAME_2 TYPE_2 ENGTYPE_2
Malaysia Kuala Lumpur Wilayah Persekutuan Federal Territory

Bagaimana? Mudah kan?


if you find this article helpful, support this blog by clicking the ads.