diff --git a/header.go b/header.go index 35d75745b42f1671228e52f0fc1cc3ad0c5f7ac3..e4308c96e98979c88c06a8133cfc7fb9cc86d0c2 100644 --- a/header.go +++ b/header.go @@ -76,6 +76,20 @@ func (c *Composite) parseHeader(reader *bufio.Reader) error { c.ForecastTime = c.CaptureTime.Add(time.Duration(min) * time.Minute) } + // Parse Interval - Example "INT 5" or "INT1008" + if intr, ok := section["INT"]; ok { + min := 0 + if _, err := fmt.Sscanf(intr, "%d", &min); err != nil { + return newError("parseHeader", "could not parse interval: "+err.Error()) + } + + c.Interval = time.Duration(min) * time.Minute + switch c.Product { + case "W1", "W2", "W3", "W4": + c.Interval *= 10 + } + } + // Parse Dimensions - Example: "GP 450x 450" or "BG460460" or "GP 1500x1400" dim := section["GP"] if bg, ok := section["BG"]; ok { diff --git a/header_test.go b/header_test.go index 5cf257662aecb6731bcbe6d35e9fc7bab0cb4539..1dd9575048f7ebabf22b0ca4f2aec2272fc37650 100644 --- a/header_test.go +++ b/header_test.go @@ -16,6 +16,7 @@ type headerTestcase struct { expProduct string expCaptureTime time.Time expForecastTime time.Time + expInterval time.Duration expDx int expDy int expDataLength int @@ -65,6 +66,7 @@ func TestParseHeaderFZ(t *testing.T) { ht.expProduct = "FZ" ht.expCaptureTime, err1 = time.Parse(time.RFC1123, "Thu, 28 Jul 2016 23:05:00 CEST") ht.expForecastTime, err2 = time.Parse(time.RFC1123, "Fri, 29 Jul 2016 00:45:00 CEST") + ht.expInterval = 5 * time.Minute ht.expDx = 450 ht.expDy = 450 ht.expDataLength = 405160 - 154 // BY - header_etx_length @@ -106,6 +108,12 @@ func testParseHeader(t *testing.T, ht *headerTestcase) { dummy.ForecastTime.String(), ht.expForecastTime.String()) } + // Interval + if dummy.Interval != ht.expInterval { + t.Errorf("%s.parseHeader(): Interval: %#v; expected: %#v", ht.expProduct, + dummy.Interval.String(), ht.expInterval.String()) + } + // Dx Dy if dummy.Dx != ht.expDx || dummy.Dy != ht.expDy { t.Errorf("%s.parseHeader(): Dx: %d Dy: %d; expected Dx: %d Dy: %d", ht.expProduct, diff --git a/radolan.go b/radolan.go index 1dde0e79f794023d9c703ae04fc3bd668d840648..d889777a392450835c29de4aac51bdb2e017feb9 100644 --- a/radolan.go +++ b/radolan.go @@ -62,6 +62,7 @@ type Composite struct { CaptureTime time.Time ForecastTime time.Time + Interval time.Duration Data [][]RVP6 // rvp-6 data for each point [y][x]