Livecode Precision or me?
Bob Sneidar
bobsneidar at iotecdigital.com
Thu Feb 5 17:02:22 CET 2015
I was just about to tell you what the problem was! ;-)
Bob S
> On Jan 31, 2015, at 12:42 , Michael Doub <mikedoub at gmail.com> wrote:
>
> Of coarse it was me. And as you would expect, I found it right after sending the mail to the list.
>
> put lon2 - lon2 into dlon should be put lon2 - lon1 into dlon
>
> Sorry for the junk mail.
>
> -= Mike
>
>
>
> On 1/31/15 3:33 PM, Michael Doub wrote:
>> I am trying to covert the javascript that computes distance based on longitude and latitude from this page: http://andrew.hedges.name/experiments/haversine/.
>>
>> The sites javascript is returning 0.341 miles and 0.549 km
>> Livecode is returning 0.097 miles and 0.157
>>
>> I have been staring at this for a while. Does anyone see my mistake or is there a precision issue tripping me up?
>>
>> Thanks
>> Mike
>>
>>
>>
>> on doit
>> answer __latLongDist (38.898556, -77.037852, 38.897147, -77.043934)
>> end doit
>>
>>
>> function __latLongDist t1, n1, t2, n2 , mk
>> put 3961 into Rm -- mean radius of the earth (miles) at 39 degrees from the equator
>> put 6373 into Rk -- mean radius of the earth (km) at 39 degrees from the equator
>> put t1 * pi/180 into lat1 -- convert degrees to radians
>> put n1 * pi/180 into lon1
>> put t2 * pi/180 into lat2
>> put n2 * pi/180 into lon2
>> put lat2 - lat1 into dlat
>> put lon2 - lon2 into dlon
>> put (sin(dlat/2))^2 + cos(lat1) * cos(lat2) * (sin(dlon/2))^2 into aa
>> put 2 * atan2( sqrt(aa), sqrt(1-aa) ) into cc
>> put cc * Rm into Dm
>> put cc * Rk into Dk
>> return round (Dm,3), round(Dk,3)
>> end __latLongDist
>>
>>
>>
>> /* main function */
>> function findDistance(frm) {
>> var t1, n1, t2, n2, lat1, lon1, lat2, lon2, dlat, dlon, a, c, dm, dk, mi, km;
>>
>> // get values for lat1, lon1, lat2, and lon2
>> t1 = frm.lat1.value;
>> n1 = frm.lon1.value;
>> t2 = frm.lat2.value;
>> n2 = frm.lon2.value;
>>
>> // convert coordinates to radians
>> lat1 = deg2rad(t1);
>> lon1 = deg2rad(n1);
>> lat2 = deg2rad(t2);
>> lon2 = deg2rad(n2);
>>
>> // find the differences between the coordinates
>> dlat = lat2 - lat1;
>> dlon = lon2 - lon1;
>>
>> // here's the heavy lifting
>> a = Math.pow(Math.sin(dlat/2),2) + Math.cos(lat1) * Math.cos(lat2) * Math.pow(Math.sin(dlon/2),2);
>> c = 2 * Math.atan2(Math.sqrt(a),Math.sqrt(1-a)); // great circle distance in radians
>> dm = c * Rm; // great circle distance in miles
>> dk = c * Rk; // great circle distance in km
>>
>> // round the results down to the nearest 1/1000
>> mi = round(dm);
>> km = round(dk);
>>
>> // display the result
>> frm.mi.value = mi;
>> frm.km.value = km;
>> }
>
> _______________________________________________
> use-livecode mailing list
> use-livecode at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode
More information about the use-livecode
mailing list