diff --git a/lib/parser.js b/lib/parser.js index c8236b8..83376e8 100644 --- a/lib/parser.js +++ b/lib/parser.js @@ -171,6 +171,20 @@ var sectionParsers = { return rv; }, + 5: function(binary) { + var rv = {}; + rv.dataPointCount = binary.read('uint32'); + rv.templateNumber = binary.read('uint16'); + + // Parse representation + var dataReprParser = dataRepresentationParsers[rv.templateNumber]; + if(!dataReprParser) { + // console.warn('Unknown data representation template: ' + rv.templateNumber); + return rv; + } + rv.representation = dataReprParser(binary); + return rv; + }, }; // Parser for scale factor / scaled value. See 92.1.12 @@ -319,3 +333,23 @@ var gridParsers = { return rv; }, }; + +var dataRepresentationParsers = { + // Grid point data - simple packing + 0: function(binary) { + var rv = {}; + rv.name = 'Grid point data - simple packing'; + rv.referenceValue = binary.read('float32'); + rv.binaryScale = binary.read('uint16'); + rv.decimalScale = binary.read('uint16'); + rv.bitCount = binary.read('uint8'); + rv.dataType = tables.lookup(tables.tables.OriginalFieldType, binary.read('uint8')); + return rv; + }, + // Grid point data - complex packing and spatial differencing + 3: function(binary) { + var rv = {}; + // FIXME: stub + return rv; + }, +}; diff --git a/lib/tables.js b/lib/tables.js index f0ec9e2..15e2a26 100644 --- a/lib/tables.js +++ b/lib/tables.js @@ -55,6 +55,13 @@ exports.tables = { MISSING: { name: 'Missing', value: 255 }, }), + // Code Table 5.1 + OriginalFieldType: Object.freeze({ + FLOAT: { name: 'Floating point', value: 0 }, + INTEGER: { name: 'Integer', value: 1 }, + MISSING: { name: 'Missing', value: 255 }, + }), + // Code Table 6.0 BitMapIndicator: Object.freeze({ SPECIFIED: { name: 'Use specified bit-map', value: 0 }, diff --git a/test/dataRepresentationTemplates.js b/test/dataRepresentationTemplates.js new file mode 100644 index 0000000..6e8c0c0 --- /dev/null +++ b/test/dataRepresentationTemplates.js @@ -0,0 +1,30 @@ +var assert = require('assert'); +var grib = require('../index'); +var files = require('./lib/fixtures').files; + +describe('data representation template', function() { + var msgs = null; + + describe('of ngm.grb', function() { + before(function(done) { + msgs = null; + grib.readUrl(files['ngm.grb'].url, function(err, msgs_) { + if(err) return done(err); + msgs = msgs_; + done(); + }); + }); + + it('should be template 0', function() { + var msg, field; + for(var m_idx in msgs) { + msg = msgs[m_idx]; + for(var f_idx in msg.fields) { + field = msg.fields[f_idx]; + assert.ok(field.representation.representation); + assert.strictEqual(0, field.representation.representation.templateNumber); + } + } + }); + }); +});