Beberapa waktu lalu mendapat sebuah kasus untuk menghitung jarak satu titik koordinat (latitude dan longitude) dengan titik koordinat lain. Setelah searching ke beberapa referensi akhirnya mendapat satu persamaan yang bisa digunakan untuk menghitung jarak 2 titik koordinat. Nama persamaan ini disebut Haversine Formula.
Haversine Formula adalah persamaan yang penting dalam bidang navigasi untuk mencari jarak antara dua tempat / lokasi. Persamaan ini bekerja dengan menarik sebuah garis dari satu titik ke titik kedua. Pada artikel ini, implementasi dari persamaan haversine ini akan dibuat dengan Python. Untuk satuan jarak yang digunakan adalah Kilometer.
Kode
from math import *
def haversine(lon1, lat1, lon2, lat2):
"""
Calculate the great circle distance between two points
on the earth (specified in decimal degrees)
"""
# convert decimal degrees to radians
lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])
# haversine formula
dlon = lon2 - lon1
dlat = lat2 - lat1
a = sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2
c = 2 * asin(sqrt(a))
r = 6371 # Radius of earth in kilometers. Use 3956 for miles
return c * r
center_point = [{'lat': -7.7940023, 'lng': 110.3656535}]
test_point = [{'lat': -7.79457, 'lng': 110.36563}]
lat1 = center_point[0]['lat']
lon1 = center_point[0]['lng']
lat2 = test_point[0]['lat']
lon2 = test_point[0]['lng']
a = haversine(lon1, lat1, lon2, lat2)
print('Distance (km) : ', a)
area = 1.00 # in kilometer
if a <= area:
print('Inside the area')
else:
print('Outside the area')
Variabel lat1 dan lon2 merupakan titik koordinat lokasi pertama, sedangkan lat2 dan lon2 merupakan titik koordinat lokasi kedua. Koordinat-koordinat ini kemudia dikirim pada fungsi def haversine yang merupakan fungsi penghitung jarak dengan persamaan haversine.
Sebagai tambahan saya membuat kondisi senderhana, yang menenapkan titik1 berada didalam luas area tertentu dari titik2 atau tidak. Variabel area menginisialisasi jarak radius yang diinginkan, misal dalam contoh adalah 1.00 (1 KM), jika jarak antar kedua titik kurang dari 1 KM maka bernilai true, jika tidak berinai false, atau diluar jangkauan area/radius.
Artikel ini di dukung oleh: Bukamaps.com