# 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;
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
```

### Accreditation  ### Donate & Support

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

Paypal:  Bitcoin: 3QnhmaBX7LQSRsC9hh6Je9rGQKEGNQNfPb