MathGroup Archive 2009

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: weather blog and ListStreamPlot sampling

  • To: mathgroup at smc.vnet.net
  • Subject: [mg96354] Re: weather blog and ListStreamPlot sampling
  • From: "Sjoerd C. de Vries" <sjoerd.c.devries at gmail.com>
  • Date: Thu, 12 Feb 2009 06:35:56 -0500 (EST)
  • References: <gmu8ll$gh8$1@smc.vnet.net>

Hi Peter,

I have tried to make a temperature map of the Netherlands before. My
code is below.

I feel it's important to make a check of the date range of the
stations, because a considerable number of stations have stopped
reporting. Hence, the last reported value is not always the most
current value.

When you make a current temperature map it make sense to have all
values measured at about the same time. I use a margin of 1.5 hours.
Doing this removes most, if not all,  Missing["NotAvailable"] values
as well.

Cheers -- Sjoerd

In[1]:= stationsRaw =
 (WeatherData[{#, 20}] & /@
     DeleteCases[
      (CityData[#, "Coordinates"] & /@
        CityData[{All, "Netherlands"}]), {x_,
        y_} /; ! NumericQ[x] && ! NumericQ[y]
      ]
    ) // Flatten // Union

Out[1]= {"AP614", "AP669", "AP973", "AR303", "AR351", "AR423", \
"AS079", "AS204", "AS631", "AS943", "AS990", "AS998", "C0007", \
"C0009", "C0025", "C0275", "C0360", "C0449", "C0539", "C0937", \
"C0949", "C1160", "C1260", "C1278", "C1555", "C1652", "C1675", \
"C1880", "C1923", "C2248", "C2597", "C2651", "C2811", "C3001", \
"C3114", "C3305", "C3471", "C3753", "C3755", "C3859", "C4043", \
"C4235", "C4341", "C4417", "C4745", "C4796", "C4799", "C5002", \
"C5113", "C5263", "C5597", "C5716", "C5771", "C5799", "C5907", \
"C5923", "C5927", "C6077", "C6175", "C6238", "C6767", "C6784", \
"C6809", "C6856", "C6933", "C7002", "C7457", "C7481", "C7674", \
"C7998", "C8011", "C8014", "C8107", "C8189", "C8191", "C8250", \
"C8392", "C8400", "C8407", "C8416", "C8482", "C8526", "C8546", \
"C8794", "C8961", "C8968", "C8972", "C9059", "C9063", "C9073", \
"C9273", "C9417", "C9433", "C9484", "C9741", "C9827", "C9838", \
"D0053", "D0088", "D0182", "D0198", "D0247", "D0252", "D0402", \
"D0700", "D0727", "D0811", "D0875", "D0881", "D1461", "D1462", \
"D1466", "EBAW", "EBBE", "EBBL", "EBDT", "EBGT", "EBLB", "EBLG", \
"EBOS", "EBSP", "EBSZ", "EDDG", "EDDL", "EDLN", "EDLV", "EDLW", \
"EDWE", "EHAM", "EHBK", "EHDB", "EHDL", "EHEH", "EHGG", "EHGR", \
"EHKD", "EHLW", "EHRD", "EHSB", "EHTW", "EHVB", "EHVK", "EHVL", \
"EHWO", "ETGM", "ETHE", "ETNG", "ETNN", "WMO06207", "WMO06494", \
"WMO10004", "WMO10113", "WMO10305", "WMO10317", "WMO10501"}

In[2]:= station =
 DeleteCases[stationsRaw,
  x_ /; WeatherData[x, "DateRange"] == $Failed ||
    AbsoluteTime[TimeZone -> 0] -
      AbsoluteTime[WeatherData[x, "DateRange"][[2]]] > 3/2 3600]

Out[2]= {"AP614", "AP669", "AP973", "AR303", "AR351", "AS204", \
"AS631", "AS998", "C0007", "C0009", "C0275", "C0360", "C0539", \
"C0949", "C1278", "C1555", "C1652", "C1675", "C1923", "C2248", \
"C2597", "C2651", "C2811", "C3001", "C3114", "C3755", "C3859", \
"C4043", "C4235", "C4341", "C4417", "C4745", "C4796", "C4799", \
"C5002", "C5113", "C5771", "C5923", "C6175", "C6767", "C6784", \
"C6809", "C7457", "C7674", "C8011", "C8014", "C8250", "C8400", \
"C8968", "C9059", "C9273", "C9417", "C9433", "C9827", "D0198", \
"D0247", "D0402", "D0700", "D0727", "D0875", "D1461", "D1462", \
"D1466", "EBAW", "EBBE", "EBBL", "EBDT", "EBLB", "EBLG", "EBOS", \
"EDDG", "EDDL", "EDLN", "EDLV", "EDLW", "EHAM", "EHBK", "EHDL", \
"EHEH", "EHGG", "EHGR", "EHKD", "EHLW", "EHRD", "EHVB", "EHVK", \
"EHVL", "EHWO", "ETNG", "ETNN", "WMO10113", "WMO10501"}

In[5]:= WeatherData[#, "Temperature"] & /@ station

Out[5]= {5., 3.9, 4.4, 3.9, 5.6, 4.4, 0.6, 5., 4.4, 4.4, 3.3, 5.6, \
3.9, 6.1, 5.6, 2.8, 3.9, 4.4, 5.6, 5.6, 1.7, 5., 5., 5., 5.6, 5., \
5.6, 2.2, 3.9, 4.4, 4.4, 4.4, 3.3, 6.1, 3.3, 3.3, 2.8, 5., 3.9, 4.4, \
5., 5., 3.3, 3.9, 5., 2.8, 3.9, 4.4, 2.8, 2.8, 4.4, 4.4, 4.4, 5., 5.,
\
3.9, 5., 4.4, 4.4, 5., 4.4, 4.4, 5., 6., 5., 5., 5., -0.9, 3., 5., \
4.3, 5., 5., 5., 3., 4., 4., 4., 5., 3., 5., 2., 2., 5., 4., 5., 4., \
4., 4., 4., 1.5, 3.3}

tempsPos =
  DeleteCases[
   Append[(Reverse[WeatherData[#, "Coordinates"]] & /@
        station)\[Transpose],
     WeatherData[#, "Temperature"] & /@ station]\[Transpose], {_, _,
    Missing["NotAvailable"]}];
Show[
 {
  ListContourPlot[tempsPos, ColorFunctionScaling -> False,
   ColorFunction ->
    Function[{f},
     ColorData["ThermometerColors"][Rescale[f, {-10, 10}, {0, 1}]]],
   Frame -> False, ContourLabels -> (Text[#3, {#1, #2}] &),
   InterpolationOrder -> 3],
  Graphics[{FaceForm[],
    CountryData["Netherlands", {"Shape", "Equirectangular"}][[1]],
    Point[Reverse[WeatherData[#, "Coordinates"]] & /@ station]}]
  }, PlotRange -> All, ImageSize -> 600
 ]

On Feb 11, 12:18 pm, P_ter <petervansumme... at gmail.com> wrote:
> Hello Sjoerd,
> I am also very much interested in the blog about weatherdata, especially =
for the Netherlands.
> I used FullPolygon because the Polygon missed to much:
> netherlands = ((CountryData[#, {"FullPolygon",   "Mercator"}] & /@ {"=
Netherlands"}) /. Polygon -> Line);
> The Dutch cities are not all tabled with their coordinates:
> nedsteden = CityData[{All, "Netherlands"}];
> nedstedencoords = {#, CityData[#, "Coordinates"]} & /@ nedsteden ;
> rr = DeleteCases[nedstedencoords, {{_, _, _}, {_Missing, _Missing}}] ;
> With the cities which do have coordinates, I want to know where the weath=
er stations are within shortest reach of the Dutch cities. Some of them are=
 in Belgium, Germany.
> dutchstations = WeatherData[#] & /@ rr[[All, 2]];
> Not all the weather stations do have a temperature record:
> data = {#, WeatherData[#, "Temperature"]} & /@ dutchstations;
> data1 = DeleteCases[data, {_, _Missing}];
> data2 = {WeatherData[#[[1]], "Coordinates"], #[[2]]} & /@ data1;
> ( I splitted in smallest steps)
> The weatherstations with available temperature and coordinates are now fo=
r use:
> Graphics[{Gray, CountryData["Netherlands", "FullPolygon"], {PointSize[Lar=
ge], Hue[WeatherData[#, "Temperature"]/30],Tooltip[Point[Reverse[WeatherDat=
a[#, "Coordinates"]]], WeatherData[#]]} & /@ ds}]
>
> To make your first point: yes, the weatherstations are not uniformly spre=
ad. How to make a nice plot of the temperature, which we can see every day =
on the Royal Dutch Meteorological Institute? It is certainly not that simpl=
e for a small country.
> with friendly greetings,
> P_ter



  • Prev by Date: Problem Solved! - FW: Reposted, Reformatted Re: "mapping" functions over lists, again
  • Next by Date: Re: Reposted, Reformatted Re: "mapping" functions over lists, again!
  • Previous by thread: Re: weather blog and ListStreamPlot sampling
  • Next by thread: newbie: explicit function works, "function object" doesn't