mlang pushed a commit to branch master in repository elpa. commit 9444f39279adf613110f4b7ab600bc1edc1f0701 Author: Mario Lang <ml...@delysid.org> Date: Fri May 30 11:30:50 2014 +0200
[metar] Fix humidity calculation when Fahrenheit is used --- packages/metar/metar.el | 25 +++++++++++++++++-------- 1 files changed, 17 insertions(+), 8 deletions(-) diff --git a/packages/metar/metar.el b/packages/metar/metar.el index 4909f00..02e27aa 100644 --- a/packages/metar/metar.el +++ b/packages/metar/metar.el @@ -72,7 +72,8 @@ (cons :format "%v" (const :tag "Temperature:" temperature) (choice (const :tag "Degree Celsius" degC) - (const :tag "Degree Kelvin" degK) + ;; calc-units doesn't convert degC to degK + ;(const :tag "Degree Kelvin" degK) (const :tag "Degree Fahrenheit" degF))))) (defvar metar-stations-info-url "http://weather.noaa.gov/data/nsd_bbsss.txt" @@ -238,14 +239,16 @@ and NEW-UNIT should be a unit name like \"kph\" or similar." " ") (cons (string-to-number value) (intern unit)))) -(defun metar-convert-temperature (string) - "Convert a METAR temperature." +(defun metar-convert-temperature (string &optional unit) + "Convert a METAR temperature. +If optional argument UNIT is provided, convert to that unit, otherwise, +consult `metar-units'." (metar-convert-unit (concat (if (= (aref string 0) ?M) (concat "-" (substring string 1)) string) "degC") - (cdr (assq 'temperature metar-units)))) + (or unit (cdr (assq 'temperature metar-units))))) (defvar metar-url "http://weather.noaa.gov/pub/data/observations/metar/stations/%s.TXT" @@ -413,8 +416,9 @@ If no record was found for STATION, nil is returned." (when (string-match metar-temperature-and-dewpoint-regexp info) (cons (round (metar-magnus-formula-humidity-from-dewpoint - (save-match-data (car (metar-convert-temperature (match-string 1 info)))) - (car (metar-convert-temperature (match-string 3 info))))) + (save-match-data (car (metar-convert-temperature + (match-string 1 info) 'degC))) + (car (metar-convert-temperature (match-string 3 info) 'degC)))) 'percent))) (defconst metar-pressure-regexp @@ -503,11 +507,16 @@ Otherwise, determine the best station via latitude/longitude." nil t)))) (let ((info (metar-decode (metar-get-record station)))) (if info - (message "%d minutes ago at %s: %d°C, %d%% relative humidity%s" - (/ (truncate (float-time (time-since (cdr (assoc 'timestamp info))))) 60) + (message "%d minutes ago at %s: %d°%c, %d%% relative humidity%s" + (/ (truncate (float-time (time-since + (cdr (assoc 'timestamp info))))) + 60) (or (metar-stations-get (cdr (assoc 'station info)) 'name) (cdr (assoc 'station info))) (cadr (assoc 'temperature info)) + (cond + ((eq (cdr (assq 'temperature metar-units)) 'degC) ?C) + ((eq (cdr (assq 'temperature metar-units)) 'degF) ?F)) (cadr (assoc 'humidity info)) (if (assoc 'phenomena info) (concat "\n" "Phenomena: "