|
From: | Jean Louis |
Subject: | dms2dd Re: Expanding list into string within a command |
Date: | Sun, 6 Dec 2020 23:34:52 +0300 |
User-agent: | Mutt/2.0 (3d08634) (2020-11-07) |
I have actually forgot that I have already transitioned Common Lisp to Emacs Lisp to convert DMS to DD coordinates. (defun geo/dms-parse (dms) (let* ((cardinal (cond ((string-match "N" dms) "N") ((string-match "S" dms) "S") ((string-match "E" dms) "E") ((string-match "W" dms) "W") (t (error "No cardinal direction found")))) (parts (string-replace-non-digits-for-spaces dms)) (parts (string-trim parts)) (parts (string-replace-shorten-spaces parts)) (parts (split-string parts)) (degrees (string-to-number (car parts))) (minutes (string-to-number (cadr parts))) (seconds (string-to-number (caddr parts)))) (list degrees minutes seconds cardinal))) (defun geo/dms2dd-degrees (d) (truncate d)) (defun geo/dms2dd-minutes (m) (float (/ m 60.0))) (defun geo/dms2dd-seconds (s) (float (/ s 3600.0))) (defun geo/dms2dd (dms) "Converts DMS value to DD geo value" (let* ((dms (geo/dms-parse dms)) (degrees (car dms)) (minutes (cadr dms)) (seconds (caddr dms)) (cardinal (cadddr dms)) (dd (+ (geo/dms2dd-degrees degrees) (geo/dms2dd-minutes minutes) (geo/dms2dd-seconds seconds)))) (cond ((string= "S" cardinal) (- dd)) ((string= "W" cardinal) (- dd)) (t dd))))
[Prev in Thread] | Current Thread | [Next in Thread] |