I tried to implement the Haversine formula in Pd which should give you
the distance in km between two lat long coordinates.

https://en.wikipedia.org/wiki/Haversine_formula
http://www.movable-type.co.uk/scripts/latlong.html

One huge obstacle is the imprecision of the 32bit floats, but even
without that I can't get the formula to work. I kept 3 failed
implementations in the test-case.

http://rosettacode.org/wiki/Haversine_formula

Could someone give me a hand please?
#N canvas 512 301 329 363 10;
#X obj 109 112 inlet deg;
#X obj 109 231 outlet rad;
#X obj 172 177 / 45;
#X obj 172 111 loadbang;
#X obj 109 202 * 0.0174533;
#X text 93 282 rad=deg*pi/180;
#X obj 172 154 atan;
#X msg 172 133 1;
#X text 225 36 part of zexy;
#X text 63 66 convert DEGree to RADiant;
#X connect 0 0 4 0;
#X connect 2 0 4 1;
#X connect 3 0 7 0;
#X connect 4 0 1 0;
#X connect 6 0 2 0;
#X connect 7 0 6 0;
#N canvas 543 85 1262 734 10;
#X obj 30 25 inlet;
#X text 118 294 http://www.movable-type.co.uk/scripts/latlong.html
;
#X obj 28 387 atan2;
#X obj 28 366 sqrt;
#X obj 62 365 sqrt;
#X obj 28 407 * 2;
#X obj 62 344 -;
#X msg 62 322 1 \$1;
#X obj 28 299 t f f;
#X obj 28 673 outlet;
#X obj 28 210 sin;
#X obj 83 207 sin;
#X obj 138 206 cos;
#X obj 193 206 cos;
#X obj 28 179 / 2;
#X obj 83 182 / 2;
#X obj 28 74 unpack f f;
#X obj 28 125 - \$1;
#X obj 83 128 - \$2;
#X obj 83 98 t f f;
#X obj 28 98 t f f;
#X obj 28 234 pow 2;
#X obj 83 235 pow 2;
#X obj 28 261 expr $f1 + ($f2 * $f3 * $f4);
#X obj 924 19 inlet;
#X obj 971 19 inlet;
#X obj 978 647 v loca.earth-rad;
#X obj 563 625 outlet;
#X obj 514 78 unpack f f;
#X obj 512 185 -;
#X obj 513 133 f \$1;
#X obj 512 157 pack f f;
#X obj 571 189 -;
#X obj 571 161 pack f f;
#X obj 572 137 f \$2;
#X obj 514 105 t b f f;
#X obj 573 109 t b f b;
#X obj 670 161 f \$1;
#X obj 510 251 / 2;
#X obj 510 276 sin;
#X obj 626 257 cos;
#X obj 677 255 cos;
#X obj 568 251 / 2;
#X obj 570 273 sin;
#X obj 632 291 *;
#X obj 595 319 *;
#X obj 595 364 pow 2;
#X obj 562 499 expr asin($f1);
#X obj 561 412 +;
#X obj 562 471 sqrt;
#X obj 562 525 * 2;
#X msg 978 617 bang;
#X floatatom 978 676 15 0 0 0 - - -, f 15;
#X obj 464 323 expr pow($f1 \, 2);
#X obj 469 355 * -1;
#X obj 563 596 * 6372.8;
#X text 836 249 lat1 lon1 lat2 lon2;
#X obj 826 109 unpack f f;
#X obj 826 176 deg2rad;
#X obj 938 140 f \$1;
#X obj 997 144 f \$2;
#X obj 826 87 t l b b;
#X obj 826 636 outlet;
#X obj 826 289 expr acos(sin($f1)*sin($f3)+cos($f1)*cos($f3)*cos($f4-$f2))
;
#X obj 28 502 * 6372.8;
#X obj 826 367 * 6.3728e+06;
#X text 352 17 3 implementation attempts for the haversine formula
;
#X obj 28 148 deg2rad;
#X obj 83 149 deg2rad;
#X obj 138 148 deg2rad;
#X obj 193 149 deg2rad;
#X obj 513 214 deg2rad;
#X obj 568 215 deg2rad;
#X obj 623 214 deg2rad;
#X obj 678 215 deg2rad;
#X obj 896 173 deg2rad;
#X obj 951 172 deg2rad;
#X obj 1006 173 deg2rad;
#X connect 0 0 16 0;
#X connect 0 0 28 0;
#X connect 0 0 61 0;
#X connect 2 0 5 0;
#X connect 3 0 2 0;
#X connect 4 0 2 1;
#X connect 5 0 64 0;
#X connect 6 0 4 0;
#X connect 7 0 6 0;
#X connect 8 0 3 0;
#X connect 8 1 7 0;
#X connect 10 0 21 0;
#X connect 11 0 22 0;
#X connect 12 0 23 2;
#X connect 13 0 23 3;
#X connect 14 0 10 0;
#X connect 15 0 11 0;
#X connect 16 0 20 0;
#X connect 16 1 19 0;
#X connect 17 0 67 0;
#X connect 18 0 68 0;
#X connect 19 0 18 0;
#X connect 19 1 70 0;
#X connect 20 0 17 0;
#X connect 20 1 69 0;
#X connect 21 0 23 0;
#X connect 22 0 23 1;
#X connect 23 0 8 0;
#X connect 24 0 17 1;
#X connect 24 0 30 1;
#X connect 24 0 59 1;
#X connect 25 0 18 1;
#X connect 25 0 34 1;
#X connect 25 0 60 1;
#X connect 26 0 52 0;
#X connect 28 0 35 0;
#X connect 28 1 36 0;
#X connect 29 0 71 0;
#X connect 30 0 31 0;
#X connect 31 0 29 0;
#X connect 32 0 72 0;
#X connect 33 0 32 0;
#X connect 34 0 33 0;
#X connect 35 0 30 0;
#X connect 35 1 31 1;
#X connect 35 2 73 0;
#X connect 36 0 34 0;
#X connect 36 1 33 1;
#X connect 36 2 37 0;
#X connect 37 0 74 0;
#X connect 38 0 39 0;
#X connect 39 0 53 0;
#X connect 40 0 44 0;
#X connect 41 0 44 1;
#X connect 42 0 43 0;
#X connect 43 0 45 0;
#X connect 44 0 45 1;
#X connect 45 0 46 0;
#X connect 46 0 48 1;
#X connect 47 0 50 0;
#X connect 48 0 49 0;
#X connect 49 0 47 0;
#X connect 50 0 55 0;
#X connect 51 0 26 0;
#X connect 53 0 54 0;
#X connect 54 0 48 0;
#X connect 55 0 27 0;
#X connect 57 0 58 0;
#X connect 57 1 75 0;
#X connect 58 0 63 0;
#X connect 59 0 76 0;
#X connect 60 0 77 0;
#X connect 61 0 57 0;
#X connect 61 1 59 0;
#X connect 61 2 60 0;
#X connect 63 0 65 0;
#X connect 64 0 9 0;
#X connect 65 0 62 0;
#X connect 67 0 14 0;
#X connect 68 0 15 0;
#X connect 69 0 12 0;
#X connect 70 0 13 0;
#X connect 71 0 38 0;
#X connect 72 0 42 0;
#X connect 73 0 40 0;
#X connect 74 0 41 0;
#X connect 75 0 63 1;
#X connect 76 0 63 2;
#X connect 77 0 63 3;
#N canvas 50 388 487 549 10;
#X text 248 209 calculates distance of two points;
#X text 66 383 http://rosettacode.org/wiki/Haversine_formula;
#X text 66 328 In this test-case \, let's calculate the distance between
Nashville International Airport at 36.12 \, -86.67 and Loas Angeles
International Airport at 33.94 \, 118.40.;
#X obj 66 209 loca.haversine 33.94 118.4;
#X msg 66 162 36.12 -86.67;
#X floatatom 66 253 15 0 0 0 - - -, f 15;
#X text 66 419 The result of the test-case should be about 2887.26
km;
#X floatatom 169 254 15 0 0 0 - - -, f 15;
#X floatatom 265 254 15 0 0 0 - - -, f 15;
#X text 126 276 three implementation fails;
#X connect 3 0 5 0;
#X connect 3 1 7 0;
#X connect 3 2 8 0;
#X connect 4 0 3 0;
_______________________________________________
[email protected] mailing list
UNSUBSCRIBE and account-management -> 
http://lists.puredata.info/listinfo/pd-list

Reply via email to