help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

dms2dd Re: Expanding list into string within a command


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))))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]