;;;; test-geo-utils.scm ;;;; Kon Lovett, May '17 ;;;; Kon Lovett, Sep '17 (use test) (use fp-utils) ;;; (use geo-utils) (define lat1 33.54187) (define lon1 -117.78392) (define lat2 33.54444) (define lon2 -117.78521) ;33.54444 -117.78124 33.54692 -117.78438 (let ((d (great-circle-distance lat1 lon1 lat2 lon2)) (a (great-circle-azimuth lat1 lon1 lat2 lon2)) (dea (approximate-ellipsoid-distance lat1 lon1 lat2 lon2)) (ds (spherical-surface-distance lat1 lon1 lat2 lon2)) ) (print "great-circle-distance: " d) (print " spherical-distance: " ds) (print " ellipsoid-distance: " dea) (print " azimuth: " a) (receive (lat lon) (great-circle-position lat1 lon1 d a) (print " geopoint test: " lat ", " lon) (print " geopoint base: " lat2 ", " lon2) (test-assert (fp~= lat2 lat 0.009)) (test-assert (fp~= lon2 lon 0.009)) ) ) ;;; (use geo-dms) (test "W 10° 20' 30\"" (dms->string -10 20 30 #f #t " ")) (test "E 10° 20' 30\"" (dms->string 10 20 30 #f #t " ")) (test "S 10° 20' 30\"" (dms->string -10 20 30 #t #t " ")) (test "N 10° 20' 30\"" (dms->string 10 20 30 #t #t " ")) (test -10.3416666666667 (string-dms->degree "W 10° 20' 30\"" #f)) (test -10.3416666666667 (string-dms->degree "10° 20' 30\" W" #f)) (test -10.3416666666667 (string-dms->degree "W10° 20'30\"" #t)) ;;; (use geopoint) (test-assert (geopoint? (make-geopoint lat1 lon1))) (let ((gp1 (make-geopoint lat1 lon1)) (gp2 (make-geopoint lat2 lon2)) ) (test lat1 (geopoint-latitude gp1)) (test lon1 (geopoint-longitude gp1)) (test-assert (not (geopoint-left? gp1 gp2))) (test-assert (geopoint-right? gp1 gp2)) (test-assert (geopoint-above? gp1 gp2)) (test-assert (not (geopoint-below? gp1 gp2))) ) ;;; (use geobox) (use geopolygon) (use geopoint-utils) (let ((gp1 (make-geopoint lat1 lon2)) (gp2 (make-geopoint lat2 lon1)) ) (test-assert (geobox? (make-geobox gp1 gp2))) (let ((gb1 (make-geobox gp1 gp2))) (test gp1 (geobox-minimum gb1)) (test gp2 (geobox-maximum gb1)) (test-assert (geopolygon? (geopolygon gp2 gp1))) (let ((gpoly1 (geopolygon gp2 gp1))) (test-assert (geobox= gb1 (geopolygon-bounding-box gpoly1))) ) ) ) (let ((geoPoly1 (make-geopolygon (make-geopoint 37.8731 -122.3201) (make-geopoint 37.8827 -122.2705) (make-geopoint 37.8817 -122.2535) (make-geopoint 37.8617 -122.2413) (make-geopoint 37.8429 -122.2431) (make-geopoint 37.8350 -122.3175))) ) (test-assert (geopoint-in-closed-polygon? (make-geopoint 37.8429 -122.2431) geoPoly1)) (test-assert (not (geopoint-in-closed-polygon? (make-geopoint -37.8429 122.2431) geoPoly1))) ) ;;; (test-exit)