Zoho Deluge - Get distance between two coordinates

What?
A quick article to document how to calculate the distance "as the crow files" between two coordinates given the latitude and longitude of each.

Why?
Well, you can pay for a good Google solution that will distance following roads and the such but.. the following is free albeit as-the-crow flies.

This makes use of an undocumented function in Zoho which is acos or inverse cosine. Just lifted from the JavaScript library figuring if it supports cos() then try this standard function. Note this has only been tested in Zoho Creator rather than Zoho CRM.

How?
This function returns the distance as the crow flies.
Update 2020
Not sure exactly when but Zoho have made available this function in Creator:
<response> = zoho.map.distanceBetween(<source_address>, <destination_address>, <unit>);

// where unit can be "MILE", "KILOMETRE" or "NAUTICAL" 

Version 2019
string fn_getMilesBetweenCoords(float p_Lat1, float p_Lng1, float p_Lat2, float p_Lng2)
{
	v_MathPi = 3.1415926535897932384626433832795028841971693993751;

	if ((p_Lat1 == p_Lat2) && (p_Lng1 == p_Lng2)) {
		return 0;
	}
	else
	{
		v_RadLat1 = v_MathPi * p_Lat1 / 180;
		v_RadLat2 = v_MathPi * p_Lat2 / 180;
		v_Theta = p_Lng1 - p_Lng2;
		v_RadTheta = v_MathPi * v_Theta / 180;
		v_Dist = (sin(v_RadLat1) * sin(v_RadLat2)) + (cos(v_RadLat1) * cos(v_RadLat2) * cos(v_RadTheta));
		if (v_Dist > 1) {
			v_Dist = 1;
		}
		v_AcosDist = acos(v_Dist);
		v_CalcDist = v_AcosDist * 180 / v_MathPi;
		v_Miles = v_CalcDist * 60 * 1.1515;
	}
	return round(v_Miles,2) + " miles";
}
For kilometres, simply multiply the miles value by 1.609344
if (unit=="K") { dist = dist * 1.609344 }  // kilometers
if (unit=="N") { dist = dist * 0.8684 }  // nautical

Production code
// v_Latitude1, v_Longitude1 are coords for origin
// v_Latitude2, v_Longitude2 are coords for destination

v_Latitude1 = v_Latitude1.toDecimal();
v_Longitude1 = v_Longitude1.toDecimal();
v_Theta = v_Longitude2 - v_Longitude1;
v_Basecalc = 0.017453292519943295;
v_Coord1 = sin(v_Latitude2 * v_Basecalc) * sin(v_Latitude1 * v_Basecalc);
v_Coord2 = cos(v_Latitude2 * v_Basecalc) * cos(v_Latitude1 * v_Basecalc) * cos(v_Theta * v_Basecalc);
v_Dist = v_Coord1 + v_Coord2;
v_Dist = acos(v_Dist);
v_Dist = v_Dist * 180 / 3.1415926535897932384626433832795028841971693993751;
v_Miles = v_Dist * 60 * 1.1515;

// returns Miles as a float


Related Articles

Joes Revolver Map

Accreditation

Badge - Certified Zoho Creator Associate
Badge - Certified Zoho Creator Associate

Donate & Support

If you like my content, and would like to support this sharing site, feel free to donate using a method below:

Paypal:
Donate to Joel Lipman via PayPal

Bitcoin:
Donate to Joel Lipman with Bitcoin - Valid till 8 May 2022 3QnhmaBX7LQSRsC9hh6Je9rGQKEGNQNfPb
© 2021 Joel Lipman .com. All Rights Reserved.