# How do I plot my country map with weather data stations?

I've tried this code, but I can't plot the coordinates in my country map.

Weather = {"Ulaanbaatar", "Erdenet"}

stationtocoordinate = Map[# -> WeatherData[#, "Coordinates"] &, Weather]


allWeatherStations = WeatherData[]; fullformStations = FullForm /@ allWeatherStations; Tally[StringLength /@ fullformStations[[All, 1, 2]]] . This code not working. Why?

• MongoliaCountryData["Mongolia", "Shape"] Apr 24 '15 at 6:44
• Welcome to Mathematica Stack exchange! Use the up/down arrows to upvote an answer and the tick mark to accept an answer you deem correct. I've also edited your code - it was missing a definition for Weather and the Map was missing a ] at the end. Also note its good Mathematica practise NOT to use Capitalised variable names as you may inadvertently collide with a named Mathematica function. Apr 24 '15 at 9:37

There is an example of what I think you are trying to do at the end of WeatherData help page, but its a little hard to read. However - here's what I think you want.

(* Function to  Get a list consisting of {CityName, Temp, Co-ords}
given a Countries weather station, note we get the 1st
nearest weather station to the city *)

weatherdata[cityname_] := {cityname, WeatherData[#, "Temperature"],
WeatherData[#, "Coordinates"]} & /@ WeatherData[{cityname, 1}];

(* Get Names for all Cities *)

cities = CityData[#, "Name"] & /@ CityData[{All, "Mongolia"}];

(*  Get the weather and weather station co-ordinates for the list of
cities  (the Drop is a kludge to remove the incorrect city "Moron")
from the weather data *)

wdata = Drop[weatherdata[#] & /@ cities, 9];

(*  Plot the list of city weather stations on a map using GeoPosition to
correctly plot the co-ordinates*)

GeoGraphics[{Point[GeoPosition[wdata[[All, 1, 3]]]],
Polygon[Entity["Country", "Mongolia"]], GeoRange -> "Country"}]


I'll leave it as an exercise to change the points to something that changes depending on the temperature. i.e. a disc that changes colour/radius. There are some good examples in the GeoGraphics help.

WeatherData can be told to give you all the weather stations it knows about, but there's more than one type of weather station (and duplicates!):

allWeatherStations = WeatherData[];
fullformStations = FullForm /@ allWeatherStations;
Tally[StringLength /@ fullformStations[[All, 1, 2]]]
(*{{4, 6919}, {5, 10306}, {8, 4697}}*)


Looking at the documentation, I find the "WMO*" stations seem to be the interesting, and reliable ones. I extract these and find their corrdinates:

wmoWeatherStations = Cases[fullformStations[[All, 1, 2]], a_ /; StringLength[a] == 8];
wmoStationsPositions =
GeoPosition[WeatherData[#, "Coordinates"]] & /@ wmoWeatherStations;


Using GeoWithinQ I find those stations within Mongolia and then use Pick to include these in GeoGraphics

wmoMongolia = GeoWithinQ[Entity["Country", "Mongolia"], wmoStationsPositions];
GeoGraphics[GeoMarker[Pick[wmoStationsPositions, wmoMongolia]],
GeoRange -> Entity["Country", "Mongolia"]]


• Nice, that usage of FullForm to get the entities doesn't appear to be documented. Does it work on all the curated data functions? Apr 24 '15 at 16:54
• It's a cheat to easily get the name of the weather station without having to call a paclet for a property of the Entity. All Entities can be converted into this StandardForm representation of the Entity. Apr 24 '15 at 17:00
• I meant InputForm. Apr 25 '15 at 8:46