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
