Forward vs Reverse Geocoding

Cahyati Supriyati Sangaji (My Note)

Mendapat pengalaman baru lagi berkaitan dengan proses geocoding. Tentu saja artikel ini hadir dalam edisi “My Note” yang merupakan pengalaman eksplorasi berhubungan dengan teknologi. Kali ini saya akan berbagi pengalaman berhubungan dangan geocoding, yaitu proses untuk “forward & reverse geocoding”. Pengalaman ini salah satu proses menggunakan python programming. Berikut akan dijabarkan bagaimana proses “forward & reverse geocoding”.

Library & API Key

!conda install -c conda-forge geocoder --yes
print ("install geocoder")
!conda install -c conda-forge/label/gcc7 geocoder --yes
print ("install geocoder2")
!conda install -c conda-forge/label/cf201901 geocoder --yes
print ("install geocoder3")
!conda install -c conda-forge/label/cf202003 geocoder --yes
print ("install geocoder4")
!pip install opencage
print ("install opencage")

Selain itu juga juga deklarasikan API key untuk proses forward & reverse dari sevice yang anda gunakan, pada artikel ini saya menggunakan Open Cage Geocode (https://opencagedata.com/) yang membatu saya mendapatkan hasil dari forward & reverse geocoding.

import pandas as pd # library for data analsysis
from opencage.geocoder import OpenCageGeocode
key = '<Your API key>'
geocoder = OpenCageGeocode(key)
query = 'Jakarta, Indonesia'
results = geocoder.geocode(query)

Forward Geocoding

# Read in the data Hospital for treatment covid-19
df_hospital = pd.read_csv("https://raw.githubusercontent.com/cahyass/GIS_Approach_on_Covid19/master/Hospital_for_treatment_covid19.csv")
# View the top rows of the dataset
df_hospital

Kemudian memproses lokasi Jakarta yang merupakan kata kunci query kita dan lokasi-lokasi rumah sakit disini adalah rumah sakit daerah Jakarta.

# Isolate only the Latitude & Longitude of Jakarta from the Json file
lat = results[0]['geometry']['lat']
lng = results[0]['geometry']['lng']
print ('The Latitude and Longitude of Jakarta is {} and {} repectively.'.format(lat, lng))

Output:

The Latitude and Longitude of Jakarta is -6.1753942 and 106.827183 repectively.

Berikut adalah proses dari Forward Geocoding, karena yang saya proses berasal dari tabel maka dilakukan beberapa kali looping sesuai dengan jumlah index tabel yang ingin di proses. kemudian menampilakan hasil proses yang sudah terdapat data koordinat yang sesuai, yaitu data Latitude dan Longitude.

# Get the latitude and longitude of all of the specialist hospitals
list2_lat = [] # create empty lists for latitude
list2_long = [] # create empty lists for longitude
for index, row in df_hospital.iterrows(): # iterate over rows in dataframe
hosp = row['Hospital']
distr = row['District']
query = str(hosp) + ', ' + str(distr) + ', Jakarta'
results = geocoder.geocode(query)
lat = results[0]['geometry']['lat']
long = results[0]['geometry']['lng']
list2_lat.append(lat)
list2_long.append(long)
# create new columns from lists
df_hospital['Latitude'] = list2_lat
df_hospital['Longitude'] = list2_long
df_hospital

Setelah proses selesai kita dapat simpan data baru ke format csv kembali.

df_hospital.to_csv('Hospital.csv',index=False)

Hasil csv yang merupakan data baru sebagai berikut.

df_hospital = pd.read_csv("C:/Users/Cahya/Downloads/ibm-solutions-summit-2020-dataplatform-master/Hospital.csv")
# View the top rows of the dataset
df_hospital

Reverse Geocoding

df_timesheet = pd.read_csv("C:/Users/Cahya/Downloads/ibm-solutions-summit-2020-dataplatform-master/timesheet.csv")
# View the top rows of the dataset
df_timesheet

Selanjutnya proses untuk reverse geocoding, disini saya juga memproses dari data tabel sehingga ada proses looping dari data-data tersebut. Parameter yang digunakan adalah data latitude dan data longitude, yang selanjutnya di proses menjadi detail lokasi yang kita butuhkan.

add = []
for index, row in df_timesheet.iterrows(): # iterate over rows in dataframe
lat = float(df_timesheet['Latitude'][index])
lng = float(df_timesheet['Longitude'][index])
reverse = geocoder.reverse_geocode(lat,lng)
df_data = pd.json_normalize(reverse)
value = df_data.loc[0]
add.append(value[1])

df_timesheet['Address'] = add
df_timesheet

Lalu simpan data baru lagi dengan format csv.

df_timesheet.to_csv('reverse.csv',index=False)

Terakhir dapat memeriksa kembali hasil data baru tersebut.

df_timesheet = pd.read_csv("C:/Users/Cahya/Downloads/ibm-solutions-summit-2020-dataplatform-master/reverse.csv")
# View the top rows of the dataset
df_timesheet

Barikut hasil dari csv yang dapat dilihat keseluruhan.

References:

opencagedata.com, Introduction to Reverse Geocoding