9 minute read

Ternyata sudah hampir dua tahun sejak postingan pertama saya terkait Google Geocoding AI saya tulis di blog yang lama. Sejak saat itu, saya kira saya tak akan pernah lagi bersinggungan mencari titik longlat dari data suatu alamat. Sampai minggu kemarin, akhirnya saya turun gunung untuk melakukan hal ini lagi.

Tentunya dengan jeda dua tahun tersebut, knowledge R saya lebih banyak dikit dibanding dulu dong. Hehe

Oleh karena itu ada banyak improvement yang saya lakukan untuk membuat pekerjaan saya kali ini lebih mudah.

Problem Statement

Ceritanya, saya memiliki ribuan baris berisi nama kecamatan di Indonesia. Tidak semua kecamatan yang ada yah, hanya sebagian saja. Berikut contoh datanya:

Data Alamat
kecamatan kota_kabupaten provinsi
PANCORAN MAS KOTA DEPOK JAWA BARAT
KARAWACI KOTA TANGERANG BANTEN
SEMARANG UTARA KOTA SEMARANG JAWA TENGAH
SIDOREJO KOTA SALATIGA JAWA TENGAH
SALAMAN KABUPATEN MAGELANG JAWA TENGAH
NGADIROJO KABUPATEN WONOGIRI JAWA TENGAH
BONTORAMBA KABUPATEN JENEPONTO SULAWESI SELATAN
TANAH JAWA KABUPATEN SIMALUNGUN SUMATERA UTARA
SIANTAR BARAT KOTA PEMATANG SIANTAR SUMATERA UTARA
MEDAN LABUHAN KOTA MEDAN SUMATERA UTARA

Nah, kali ini saya membutuhkan data longlat dari setiap kecamatan yang ada. Jika hanya ada 20 baris data, cara termudah adalah dengan menggunakan Google Maps, yakni dengan mencarinya secara manual satu persatu di maps lalu meng-copy longlat hasil pencarian.

Tapi kali ini saya memiliki banyak sekali data yang harus dicari dengan segera!

Memanfaatkan Google Geocode AI

Cara termudah dan termurah untuk melakukan ini adalah dengan memanfaatkan AI buatan Google. Kita sebenarnya bisa menggunakan AI ini dengan cara mengaktifkan akun di Google Cloud Console. Saat mengaktifkan pertama kali, kita akan mendapatkan free credit sebesar $300. Walaupun demikian, beberapa AI yang bisa kita akses memiliki harga yang murah meriah.

Saking murahnya jadi seolah-olah layanan ini gratis. Berdasarkan pengalaman, saat melakukan geocoding jutaan alamat, baru saya terkena charge (walaupun tetap murah jika dibandingkan dengan layanan sejenis yang ditawarkan para raksasa cloud computing di luar sana). Tapi saat melakukan geocoding ribuan alamat, masih free jatuhnya.

Jadi yang perlu kita lakukan di halaman Google Cloud Console adalah mengaktifkan akun dan membuat API key untuk layanan Google Geocode.

Setelah itu, API key tersebut akan kita gunakan di R menggunakan library(googleway) untuk berinteraksi dan mendapatkan data.

Kira-kira, seperti ini alur pengerjaannya:

Fungsi Geocoding di library(googleway)

Seandainya kita telah mendapatkan API key, maka kita perlu membuat function sebagai berikut:

# API key dari Google:
key = "XXXXXX"

# Function yang Saya buat
geogeo = function(xxx){
  hasil=google_geocode(address=xxx,key=key)
  lengkap = hasil$results$formatted_address
  lat = hasil$results$geometry$location$lat
  long = hasil$results$geometry$location$lng
  final = paste(lengkap,lat,long,sep=";")
  return(final)
}

Saatnya Beraksi!

Sekarang saatnya function tersebut beraksi! Kita tinggal aplikasikan fungsi tersebut ke dalam data dengan perintah sapply() berikut:

data = 
  data %>% 
  mutate(alamat_gabung = paste(kecamatan,kota_kabupaten,provinsi,sep = ","),
         geocode = sapply(alamat_gabung,geogeo)) %>% 
  select(-alamat_gabung)

Berikut hasilnya:

Data Hasil Google Geocode
kecamatan kota_kabupaten provinsi geocode
PANCORAN MAS KOTA DEPOK JAWA BARAT Pancoran Mas, Depok City, West Java, Indonesia;-6.3971623;106.8001396
KARAWACI KOTA TANGERANG BANTEN Karawaci Sub-District, Tangerang City, Banten, Indonesia;-6.1805852;106.6202025
SEMARANG UTARA KOTA SEMARANG JAWA TENGAH North Semarang, Semarang City, Central Java, Indonesia;-6.9607692;110.4083341
SIDOREJO KOTA SALATIGA JAWA TENGAH Sidorejo, Salatiga City, Central Java, Indonesia;-7.3055182;110.4947314
SALAMAN KABUPATEN MAGELANG JAWA TENGAH Salaman, Magelang, Central Java, Indonesia;-7.571206;110.128347
NGADIROJO KABUPATEN WONOGIRI JAWA TENGAH Ngadirojo, Wonogiri Regency, Central Java, Indonesia;-7.8351953;111.0102737
BONTORAMBA KABUPATEN JENEPONTO SULAWESI SELATAN Bontoramba, Jeneponto Regency, South Sulawesi, Indonesia;-5.5632196;119.6846813
TANAH JAWA KABUPATEN SIMALUNGUN SUMATERA UTARA Tanah Jawa, Simalungun Regency, North Sumatra, Indonesia;2.8901607;99.1788304
SIANTAR BARAT KOTA PEMATANG SIANTAR SUMATERA UTARA West Siantar, Pematang Siantar City, North Sumatra, Indonesia;2.9528658;99.0543447
MEDAN LABUHAN KOTA MEDAN SUMATERA UTARA Medan Labuhan, Medan City, North Sumatra, Indonesia;3.7307552;98.6930685

Kita tinggal merapikan formatnya saja dengan function separate() dari library(tidyr) sebagai berikut:

library(tidyr)
data = 
  data %>%
  separate(geocode,
           into = c("alamat_google","lat","long"),
           sep = ";")

Berikut hasilnya:

Data FINAL Google Geocode
kecamatan kota\_kabupaten provinsi alamat_google lat long
PANCORAN MAS KOTA DEPOK JAWA BARAT Pancoran Mas, Depok City, West Java, Indonesia -6.3971623 106.8001396
KARAWACI KOTA TANGERANG BANTEN Karawaci Sub-District, Tangerang City, Banten, Indonesia -6.1805852 106.6202025
SEMARANG UTARA KOTA SEMARANG JAWA TENGAH North Semarang, Semarang City, Central Java, Indonesia -6.9607692 110.4083341
SIDOREJO KOTA SALATIGA JAWA TENGAH Sidorejo, Salatiga City, Central Java, Indonesia -7.3055182 110.4947314
SALAMAN KABUPATEN MAGELANG JAWA TENGAH Salaman, Magelang, Central Java, Indonesia -7.571206 110.128347
NGADIROJO KABUPATEN WONOGIRI JAWA TENGAH Ngadirojo, Wonogiri Regency, Central Java, Indonesia -7.8351953 111.0102737
BONTORAMBA KABUPATEN JENEPONTO SULAWESI SELATAN Bontoramba, Jeneponto Regency, South Sulawesi, Indonesia -5.5632196 119.6846813
TANAH JAWA KABUPATEN SIMALUNGUN SUMATERA UTARA Tanah Jawa, Simalungun Regency, North Sumatra, Indonesia 2.8901607 99.1788304
SIANTAR BARAT KOTA PEMATANG SIANTAR SUMATERA UTARA West Siantar, Pematang Siantar City, North Sumatra, Indonesia 2.9528658 99.0543447
MEDAN LABUHAN KOTA MEDAN SUMATERA UTARA Medan Labuhan, Medan City, North Sumatra, Indonesia 3.7307552 98.6930685

Mudah kan?

Selamat mencoba!