6
$\begingroup$

I am curious whether there is some place where one can look up the mapping between actual location and weather station (I assume) acronyms. E.g., what the heck is "KNDZ"?

$\endgroup$

2 Answers 2

8
$\begingroup$

You can get a latitude and longitude for the weather station and plot a GeoMarker at that location like this

latlon = WeatherData["KNDZ", #] & /@ {"Latitude", "Longitude"};
gp = GeoPosition[latlon];
plot = GeoGraphics[GeoMarker[gp]]

For a full list of properties of the weather station, use WeatherData["KNDZ", "Properties"]

$\endgroup$
1
  • 1
    $\begingroup$ More compactly: GeoGraphics[GeoMarker[GeoPosition[WeatherData["KNDZ", "Coordinates"]]]] $\endgroup$ Mar 30, 2018 at 3:11
8
$\begingroup$

You can use the Weather Underground API to look up information that is not present in WeatherData[] (tho you need to register to get an API key):

$WUAPIKey = (* insert API key here *);
SetAttributes[WULookup, Listable];

WULookup[station_] := Module[{s = station, chk, loc, pos, raw},
  If[Head[s] === Entity, s = CommonName[s]];
  raw = Import["http://api.wunderground.com/api/" <> $WUAPIKey <> "/geolookup/q/" <>
               s <> ".json", "RawJSON"];
  chk = Lookup[raw["response"], "error", True];
  If[TrueQ[chk],
     {pos, loc} = TakeDrop[Lookup[raw["location"],
                                  {"city", "state", "country_name", "lat", "lon"}], -2];
     GeoGraphics[GeoMarker[GeoPosition[Internal`StringToDouble /@ pos]], 
                 PlotLabel -> Row[DeleteCases[loc, ""], ", "]],
     Failure[chk["type"], chk["description"]]]]

For example:

WULookup[{"AYWK", "BGBW", "CWSS", "KNDZ", "YMES"}] // GraphicsRow

lookup result

$\endgroup$
2
  • $\begingroup$ Great pattern for calling a Web API $\endgroup$
    – FredrikD
    Apr 2, 2018 at 13:49
  • 1
    $\begingroup$ Mathematica makes it really easy now to use an API whenever the curated data functions are found lacking. It's really awesome. $\endgroup$ Apr 2, 2018 at 14:13

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.