Menemukan LongLat dari Data Berupa Alamat
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:
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:
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:
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!