@loaders.gl/netcdf 3.3.0-alpha.5 → 3.3.0-alpha.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/es5/index.js +4 -6
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/iobuffer/iobuffer.js +129 -105
- package/dist/es5/iobuffer/iobuffer.js.map +1 -1
- package/dist/es5/netcdf-loader.js +9 -27
- package/dist/es5/netcdf-loader.js.map +1 -1
- package/dist/es5/netcdfjs/netcdf-reader.js +33 -42
- package/dist/es5/netcdfjs/netcdf-reader.js.map +1 -1
- package/dist/es5/netcdfjs/netcdf-types.js.map +1 -1
- package/dist/es5/netcdfjs/read-data.js +4 -5
- package/dist/es5/netcdfjs/read-data.js.map +1 -1
- package/dist/es5/netcdfjs/read-header.js +12 -28
- package/dist/es5/netcdfjs/read-header.js.map +1 -1
- package/dist/es5/netcdfjs/read-type.js +4 -32
- package/dist/es5/netcdfjs/read-type.js.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/iobuffer/iobuffer.js +16 -74
- package/dist/esm/iobuffer/iobuffer.js.map +1 -1
- package/dist/esm/netcdf-loader.js +8 -7
- package/dist/esm/netcdf-loader.js.map +1 -1
- package/dist/esm/netcdfjs/netcdf-reader.js +2 -18
- package/dist/esm/netcdfjs/netcdf-reader.js.map +1 -1
- package/dist/esm/netcdfjs/netcdf-types.js.map +1 -1
- package/dist/esm/netcdfjs/read-data.js +6 -4
- package/dist/esm/netcdfjs/read-data.js.map +1 -1
- package/dist/esm/netcdfjs/read-header.js +13 -25
- package/dist/esm/netcdfjs/read-header.js.map +1 -1
- package/dist/esm/netcdfjs/read-type.js +4 -28
- package/dist/esm/netcdfjs/read-type.js.map +1 -1
- package/package.json +3 -3
|
@@ -1,38 +1,29 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
|
-
exports.
|
|
9
|
-
|
|
7
|
+
exports._typecheckNetCDFWorkerLoader = exports._typecheckNetCDFLoader = exports.NetCDFWorkerLoader = exports.NetCDFLoader = void 0;
|
|
10
8
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
11
|
-
|
|
12
9
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
13
|
-
|
|
14
10
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
15
|
-
|
|
16
11
|
var _netcdfReader = require("./netcdfjs/netcdf-reader");
|
|
17
|
-
|
|
18
12
|
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
19
|
-
|
|
20
13
|
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
21
|
-
|
|
22
14
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
23
|
-
|
|
24
|
-
function
|
|
25
|
-
|
|
26
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
27
|
-
|
|
28
|
-
var VERSION = typeof "3.3.0-alpha.5" !== 'undefined' ? "3.3.0-alpha.5" : 'latest';
|
|
15
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
16
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
17
|
+
var VERSION = typeof "3.3.0-alpha.6" !== 'undefined' ? "3.3.0-alpha.6" : 'latest';
|
|
29
18
|
var NetCDFWorkerLoader = {
|
|
30
19
|
name: 'NetCDF',
|
|
31
20
|
id: 'mvt',
|
|
32
21
|
module: 'mvt',
|
|
33
22
|
version: VERSION,
|
|
34
23
|
extensions: ['cdf', 'nc'],
|
|
35
|
-
mimeTypes: ['application/netcdf', 'application/x-netcdf'
|
|
24
|
+
mimeTypes: ['application/netcdf', 'application/x-netcdf'
|
|
25
|
+
],
|
|
26
|
+
|
|
36
27
|
category: 'image',
|
|
37
28
|
options: {
|
|
38
29
|
netcdf: {
|
|
@@ -40,8 +31,8 @@ var NetCDFWorkerLoader = {
|
|
|
40
31
|
}
|
|
41
32
|
}
|
|
42
33
|
};
|
|
43
|
-
exports.NetCDFWorkerLoader = NetCDFWorkerLoader;
|
|
44
34
|
|
|
35
|
+
exports.NetCDFWorkerLoader = NetCDFWorkerLoader;
|
|
45
36
|
var NetCDFLoader = _objectSpread(_objectSpread({}, NetCDFWorkerLoader), {}, {
|
|
46
37
|
parse: function () {
|
|
47
38
|
var _parse = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(arrayBuffer, options) {
|
|
@@ -50,7 +41,6 @@ var NetCDFLoader = _objectSpread(_objectSpread({}, NetCDFWorkerLoader), {}, {
|
|
|
50
41
|
switch (_context.prev = _context.next) {
|
|
51
42
|
case 0:
|
|
52
43
|
return _context.abrupt("return", parseNetCDF(arrayBuffer, options));
|
|
53
|
-
|
|
54
44
|
case 1:
|
|
55
45
|
case "end":
|
|
56
46
|
return _context.stop();
|
|
@@ -58,28 +48,21 @@ var NetCDFLoader = _objectSpread(_objectSpread({}, NetCDFWorkerLoader), {}, {
|
|
|
58
48
|
}
|
|
59
49
|
}, _callee);
|
|
60
50
|
}));
|
|
61
|
-
|
|
62
51
|
function parse(_x, _x2) {
|
|
63
52
|
return _parse.apply(this, arguments);
|
|
64
53
|
}
|
|
65
|
-
|
|
66
54
|
return parse;
|
|
67
55
|
}(),
|
|
68
56
|
binary: true
|
|
69
57
|
});
|
|
70
|
-
|
|
71
58
|
exports.NetCDFLoader = NetCDFLoader;
|
|
72
|
-
|
|
73
59
|
function parseNetCDF(arrayBuffer, options) {
|
|
74
60
|
var _options$netcdf;
|
|
75
|
-
|
|
76
61
|
var reader = new _netcdfReader.NetCDFReader(arrayBuffer);
|
|
77
62
|
var variables = {};
|
|
78
|
-
|
|
79
63
|
if (options !== null && options !== void 0 && (_options$netcdf = options.netcdf) !== null && _options$netcdf !== void 0 && _options$netcdf.loadData) {
|
|
80
64
|
var _iterator = _createForOfIteratorHelper(reader.variables),
|
|
81
|
-
|
|
82
|
-
|
|
65
|
+
_step;
|
|
83
66
|
try {
|
|
84
67
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
85
68
|
var variable = _step.value;
|
|
@@ -91,7 +74,6 @@ function parseNetCDF(arrayBuffer, options) {
|
|
|
91
74
|
_iterator.f();
|
|
92
75
|
}
|
|
93
76
|
}
|
|
94
|
-
|
|
95
77
|
return {
|
|
96
78
|
loaderData: reader.header,
|
|
97
79
|
data: variables
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"netcdf-loader.js","names":["VERSION","NetCDFWorkerLoader","name","id","module","version","extensions","mimeTypes","category","options","netcdf","loadVariables","NetCDFLoader","parse","arrayBuffer","parseNetCDF","binary","reader","NetCDFReader","variables","loadData","variable","getDataVariable","loaderData","header","data","_typecheckNetCDFWorkerLoader","_typecheckNetCDFLoader"],"sources":["../../src/netcdf-loader.ts"],"sourcesContent":["import type {Loader, LoaderWithParser, LoaderOptions} from '@loaders.gl/loader-utils';\nimport type {NetCDFHeader} from './netcdfjs/netcdf-types';\nimport {NetCDFReader} from './netcdfjs/netcdf-reader';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nexport type NetCDF = {\n loaderData: NetCDFHeader;\n data: {[variableName: string]: any[][]};\n};\n\nexport type NetCDFLoaderOptions = LoaderOptions & {\n netcdf?: {\n loadData?: boolean;\n };\n};\n\n/**\n * Worker loader for NETCDF\n */\nexport const NetCDFWorkerLoader = {\n name: 'NetCDF',\n id: 'mvt',\n module: 'mvt',\n version: VERSION,\n extensions: ['cdf', 'nc'],\n mimeTypes: [\n 'application/netcdf',\n 'application/x-netcdf'\n // 'application/octet-stream'\n ],\n category: 'image',\n options: {\n netcdf: {\n loadVariables: false\n }\n }\n};\n\n/**\n * Loader for the NetCDF format\n */\nexport const NetCDFLoader = {\n ...NetCDFWorkerLoader,\n parse: async (arrayBuffer, options) => parseNetCDF(arrayBuffer, options),\n binary: true\n};\n\nfunction parseNetCDF(arrayBuffer: ArrayBuffer, options?: NetCDFLoaderOptions): NetCDF {\n const reader = new NetCDFReader(arrayBuffer);\n const variables: {[variableName: string]: any[][]} = {};\n if (options?.netcdf?.loadData) {\n for (const variable of reader.variables) {\n variables[variable.name] = reader.getDataVariable(variable);\n }\n }\n return {\n loaderData: reader.header,\n data: variables\n };\n}\n\n// Type tests\nexport const _typecheckNetCDFWorkerLoader: Loader = NetCDFWorkerLoader;\nexport const _typecheckNetCDFLoader: LoaderWithParser = NetCDFLoader;\n"],"mappings":";;;;;;;;;;AAEA;AAAsD;AAAA;AAAA;AAAA;AAAA;AAItD,IAAMA,OAAO,GAAG,sBAAkB,KAAK,WAAW,qBAAiB,QAAQ;AAgBpE,IAAMC,kBAAkB,GAAG;EAChCC,IAAI,EAAE,QAAQ;EACdC,EAAE,EAAE,KAAK;EACTC,MAAM,EAAE,KAAK;EACbC,OAAO,EAAEL,OAAO;EAChBM,UAAU,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC;EACzBC,SAAS,EAAE,CACT,oBAAoB,EACpB;EAAsB,CAEvB;;EACDC,QAAQ,EAAE,OAAO;EACjBC,OAAO,EAAE;IACPC,MAAM,EAAE;MACNC,aAAa,EAAE;IACjB;EACF;AACF,CAAC;;AAAC;AAKK,IAAMC,YAAY,mCACpBX,kBAAkB;EACrBY,KAAK;IAAA,uEAAE,iBAAOC,WAAW,EAAEL,OAAO;MAAA;QAAA;UAAA;YAAA;cAAA,iCAAKM,WAAW,CAACD,WAAW,EAAEL,OAAO,CAAC;YAAA;YAAA;cAAA;UAAA;QAAA;MAAA;IAAA;IAAA;MAAA;IAAA;IAAA;EAAA;EACxEO,MAAM,EAAE;AAAI,EACb;AAAC;AAEF,SAASD,WAAW,CAACD,WAAwB,EAAEL,OAA6B,EAAU;EAAA;EACpF,IAAMQ,MAAM,GAAG,IAAIC,0BAAY,CAACJ,WAAW,CAAC;EAC5C,IAAMK,SAA4C,GAAG,CAAC,CAAC;EACvD,IAAIV,OAAO,aAAPA,OAAO,kCAAPA,OAAO,CAAEC,MAAM,4CAAf,gBAAiBU,QAAQ,EAAE;IAAA,2CACNH,MAAM,CAACE,SAAS;MAAA;IAAA;MAAvC,oDAAyC;QAAA,IAA9BE,QAAQ;QACjBF,SAAS,CAACE,QAAQ,CAACnB,IAAI,CAAC,GAAGe,MAAM,CAACK,eAAe,CAACD,QAAQ,CAAC;MAC7D;IAAC;MAAA;IAAA;MAAA;IAAA;EACH;EACA,OAAO;IACLE,UAAU,EAAEN,MAAM,CAACO,MAAM;IACzBC,IAAI,EAAEN;EACR,CAAC;AACH;;AAGO,IAAMO,4BAAoC,GAAGzB,kBAAkB;AAAC;AAChE,IAAM0B,sBAAwC,GAAGf,YAAY;AAAC"}
|
|
@@ -1,30 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.NetCDFReader = void 0;
|
|
9
|
-
|
|
10
8
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
11
|
-
|
|
12
9
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
13
|
-
|
|
14
10
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
15
|
-
|
|
16
11
|
var _iobuffer = require("../iobuffer/iobuffer");
|
|
17
|
-
|
|
18
12
|
var _readHeader = require("./read-header");
|
|
19
|
-
|
|
20
13
|
var _readData = require("./read-data");
|
|
21
|
-
|
|
22
14
|
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
23
|
-
|
|
24
15
|
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
25
|
-
|
|
26
16
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
27
|
-
|
|
28
17
|
var NetCDFReader = function () {
|
|
29
18
|
function NetCDFReader(data) {
|
|
30
19
|
(0, _classCallCheck2.default)(this, NetCDFReader);
|
|
@@ -32,14 +21,13 @@ var NetCDFReader = function () {
|
|
|
32
21
|
(0, _defineProperty2.default)(this, "buffer", void 0);
|
|
33
22
|
var buffer = new _iobuffer.IOBuffer(data);
|
|
34
23
|
buffer.setBigEndian();
|
|
35
|
-
var magic = buffer.readChars(3);
|
|
36
24
|
|
|
25
|
+
var magic = buffer.readChars(3);
|
|
37
26
|
if (magic !== 'CDF') {
|
|
38
27
|
throw new Error("NetCDF: file should start with 'CDF', found ".concat(magic));
|
|
39
28
|
}
|
|
40
29
|
|
|
41
30
|
var version = buffer.readByte();
|
|
42
|
-
|
|
43
31
|
if (version > 2) {
|
|
44
32
|
throw new Error("NetCDF: unsupported version ".concat(version));
|
|
45
33
|
}
|
|
@@ -50,70 +38,87 @@ var NetCDFReader = function () {
|
|
|
50
38
|
|
|
51
39
|
(0, _createClass2.default)(NetCDFReader, [{
|
|
52
40
|
key: "version",
|
|
53
|
-
get:
|
|
41
|
+
get:
|
|
42
|
+
function get() {
|
|
54
43
|
if (this.header.version === 1) {
|
|
55
44
|
return 'classic format';
|
|
56
45
|
}
|
|
57
|
-
|
|
58
46
|
return '64-bit offset format';
|
|
59
47
|
}
|
|
48
|
+
|
|
60
49
|
}, {
|
|
61
50
|
key: "recordDimension",
|
|
62
|
-
get:
|
|
51
|
+
get:
|
|
52
|
+
function get() {
|
|
63
53
|
return this.header.recordDimension;
|
|
64
54
|
}
|
|
55
|
+
|
|
65
56
|
}, {
|
|
66
57
|
key: "dimensions",
|
|
67
|
-
get:
|
|
58
|
+
get:
|
|
59
|
+
function get() {
|
|
68
60
|
return this.header.dimensions;
|
|
69
61
|
}
|
|
62
|
+
|
|
70
63
|
}, {
|
|
71
64
|
key: "attributes",
|
|
72
|
-
get:
|
|
65
|
+
get:
|
|
66
|
+
function get() {
|
|
73
67
|
return this.header.attributes;
|
|
74
68
|
}
|
|
69
|
+
|
|
75
70
|
}, {
|
|
76
71
|
key: "variables",
|
|
77
|
-
get:
|
|
72
|
+
get:
|
|
73
|
+
function get() {
|
|
78
74
|
return this.header.variables;
|
|
79
75
|
}
|
|
76
|
+
|
|
80
77
|
}, {
|
|
81
78
|
key: "attributeExists",
|
|
82
|
-
value:
|
|
79
|
+
value:
|
|
80
|
+
function attributeExists(attributeName) {
|
|
83
81
|
var attribute = this.attributes.find(function (val) {
|
|
84
82
|
return val.name === attributeName;
|
|
85
83
|
});
|
|
86
84
|
return attribute !== undefined;
|
|
87
85
|
}
|
|
86
|
+
|
|
88
87
|
}, {
|
|
89
88
|
key: "getAttribute",
|
|
90
|
-
value:
|
|
89
|
+
value:
|
|
90
|
+
function getAttribute(attributeName) {
|
|
91
91
|
var attribute = this.attributes.find(function (val) {
|
|
92
92
|
return val.name === attributeName;
|
|
93
93
|
});
|
|
94
94
|
if (attribute) return attribute.value;
|
|
95
95
|
return null;
|
|
96
96
|
}
|
|
97
|
+
|
|
97
98
|
}, {
|
|
98
99
|
key: "dataVariableExists",
|
|
99
|
-
value:
|
|
100
|
+
value:
|
|
101
|
+
function dataVariableExists(variableName) {
|
|
100
102
|
var variable = this.header.variables.find(function (val) {
|
|
101
103
|
return val.name === variableName;
|
|
102
104
|
});
|
|
103
105
|
return variable !== undefined;
|
|
104
106
|
}
|
|
107
|
+
|
|
105
108
|
}, {
|
|
106
109
|
key: "getDataVariableAsString",
|
|
107
|
-
value:
|
|
110
|
+
value:
|
|
111
|
+
function getDataVariableAsString(variableName) {
|
|
108
112
|
var variable = this.getDataVariable(variableName);
|
|
109
113
|
if (variable) return variable.join('');
|
|
110
114
|
return null;
|
|
111
115
|
}
|
|
116
|
+
|
|
112
117
|
}, {
|
|
113
118
|
key: "getDataVariable",
|
|
114
|
-
value:
|
|
119
|
+
value:
|
|
120
|
+
function getDataVariable(variableName) {
|
|
115
121
|
var variable;
|
|
116
|
-
|
|
117
122
|
if (typeof variableName === 'string') {
|
|
118
123
|
variable = this.header.variables.find(function (val) {
|
|
119
124
|
return val.name === variableName;
|
|
@@ -127,11 +132,9 @@ var NetCDFReader = function () {
|
|
|
127
132
|
}
|
|
128
133
|
|
|
129
134
|
this.buffer.seek(variable.offset);
|
|
130
|
-
|
|
131
135
|
if (variable.record) {
|
|
132
136
|
return (0, _readData.readRecord)(this.buffer, variable, this.header.recordDimension);
|
|
133
137
|
}
|
|
134
|
-
|
|
135
138
|
return (0, _readData.readNonRecord)(this.buffer, variable);
|
|
136
139
|
}
|
|
137
140
|
}, {
|
|
@@ -139,10 +142,8 @@ var NetCDFReader = function () {
|
|
|
139
142
|
value: function toString() {
|
|
140
143
|
var result = [];
|
|
141
144
|
result.push('DIMENSIONS');
|
|
142
|
-
|
|
143
145
|
var _iterator = _createForOfIteratorHelper(this.dimensions),
|
|
144
|
-
|
|
145
|
-
|
|
146
|
+
_step;
|
|
146
147
|
try {
|
|
147
148
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
148
149
|
var dimension = _step.value;
|
|
@@ -153,13 +154,10 @@ var NetCDFReader = function () {
|
|
|
153
154
|
} finally {
|
|
154
155
|
_iterator.f();
|
|
155
156
|
}
|
|
156
|
-
|
|
157
157
|
result.push('');
|
|
158
158
|
result.push('GLOBAL ATTRIBUTES');
|
|
159
|
-
|
|
160
159
|
var _iterator2 = _createForOfIteratorHelper(this.attributes),
|
|
161
|
-
|
|
162
|
-
|
|
160
|
+
_step2;
|
|
163
161
|
try {
|
|
164
162
|
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
165
163
|
var attribute = _step2.value;
|
|
@@ -170,25 +168,20 @@ var NetCDFReader = function () {
|
|
|
170
168
|
} finally {
|
|
171
169
|
_iterator2.f();
|
|
172
170
|
}
|
|
173
|
-
|
|
174
171
|
var variables = JSON.parse(JSON.stringify(this.variables));
|
|
175
172
|
result.push('');
|
|
176
173
|
result.push('VARIABLES:');
|
|
177
|
-
|
|
178
174
|
var _iterator3 = _createForOfIteratorHelper(variables),
|
|
179
|
-
|
|
180
|
-
|
|
175
|
+
_step3;
|
|
181
176
|
try {
|
|
182
177
|
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
183
178
|
var variable = _step3.value;
|
|
184
179
|
variable.value = this.getDataVariable(variable);
|
|
185
180
|
var stringify = JSON.stringify(variable.value);
|
|
186
181
|
if (stringify.length > 50) stringify = stringify.substring(0, 50);
|
|
187
|
-
|
|
188
182
|
if (!isNaN(variable.value.length)) {
|
|
189
183
|
stringify += " (length: ".concat(variable.value.length, ")");
|
|
190
184
|
}
|
|
191
|
-
|
|
192
185
|
result.push(" ".concat(variable.name.padEnd(30), " = ").concat(stringify));
|
|
193
186
|
}
|
|
194
187
|
} catch (err) {
|
|
@@ -196,12 +189,10 @@ var NetCDFReader = function () {
|
|
|
196
189
|
} finally {
|
|
197
190
|
_iterator3.f();
|
|
198
191
|
}
|
|
199
|
-
|
|
200
192
|
return result.join('\n');
|
|
201
193
|
}
|
|
202
194
|
}]);
|
|
203
195
|
return NetCDFReader;
|
|
204
196
|
}();
|
|
205
|
-
|
|
206
197
|
exports.NetCDFReader = NetCDFReader;
|
|
207
198
|
//# sourceMappingURL=netcdf-reader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"netcdf-reader.js","names":["NetCDFReader","data","buffer","IOBuffer","setBigEndian","magic","readChars","Error","version","readByte","header","readNetCDFHeader","recordDimension","dimensions","attributes","variables","attributeName","attribute","find","val","name","undefined","value","variableName","variable","getDataVariable","join","seek","offset","record","readRecord","readNonRecord","result","push","dimension","padEnd","size","JSON","parse","stringify","length","substring","isNaN"],"sources":["../../../src/netcdfjs/netcdf-reader.ts"],"sourcesContent":["import {IOBuffer} from '../iobuffer/iobuffer';\nimport type {\n NetCDFHeader,\n NetCDFDimension,\n NetCDFRecordDimension,\n NetCDFAttribute,\n NetCDFVariable\n} from './netcdf-types';\nimport {readNetCDFHeader} from './read-header';\nimport {readRecord, readNonRecord} from './read-data';\n\n/**\n * Reads a NetCDF v3.x file\n * https://www.unidata.ucar.edu/software/netcdf/docs/file_format_specifications.html\n * @param {ArrayBuffer} data - ArrayBuffer or any Typed Array (including Node.js' Buffer from v4) with the data\n * @constructor\n */\nexport class NetCDFReader {\n public header: NetCDFHeader;\n public buffer: IOBuffer;\n\n constructor(data) {\n const buffer = new IOBuffer(data);\n buffer.setBigEndian();\n\n // Validate that it's a NetCDF file\n const magic = buffer.readChars(3);\n if (magic !== 'CDF') {\n throw new Error(`NetCDF: file should start with 'CDF', found ${magic}`);\n }\n\n // Check the NetCDF format\n const version = buffer.readByte();\n if (version > 2) {\n throw new Error(`NetCDF: unsupported version ${version}`);\n }\n\n // Read the header\n this.header = readNetCDFHeader(buffer, version);\n this.buffer = buffer;\n }\n\n /**\n * @return {string} - Version for the NetCDF format\n */\n get version() {\n if (this.header.version === 1) {\n return 'classic format';\n }\n return '64-bit offset format';\n }\n\n /**\n * Get metadata for the record dimension\n */\n get recordDimension(): NetCDFRecordDimension {\n return this.header.recordDimension;\n }\n\n /**\n * Get list of dimensions (each with `name` and `size`)\n */\n get dimensions(): NetCDFDimension[] {\n return this.header.dimensions;\n }\n\n /**\n * Get list of global attributes with:\n * * `name`: String with the name of the attribute\n * * `type`: String with the type of the attribute\n * * `value`: A number or string with the value of the attribute\n */\n get attributes(): NetCDFAttribute[] {\n return this.header.attributes;\n }\n\n /**\n * Get list of variables\n */\n get variables(): NetCDFVariable[] {\n return this.header.variables;\n }\n\n /**\n * Check if an attribute exists\n * @param attributeName - Name of the attribute to find\n * @return\n */\n attributeExists(attributeName: string): boolean {\n const attribute = this.attributes.find((val) => val.name === attributeName);\n return attribute !== undefined;\n }\n\n /**\n * Returns the value of an attribute\n * @param attributeName\n * @return Value of the attributeName or null\n */\n getAttribute(attributeName: string): string | null {\n const attribute = this.attributes.find((val) => val.name === attributeName);\n if (attribute) return attribute.value;\n return null;\n }\n\n /**\n * Check if a dataVariable exists\n * @param variableName - Name of the variable to find\n * @return\n */\n dataVariableExists(variableName: string): boolean {\n const variable = this.header.variables.find(function (val) {\n return val.name === variableName;\n });\n return variable !== undefined;\n }\n\n /**\n * Returns the value of a variable as a string\n * @param variableName\n * @return Value of the variable as a string or null\n */\n getDataVariableAsString(variableName: string): string | null {\n const variable = this.getDataVariable(variableName);\n if (variable) return variable.join('');\n return null;\n }\n\n /**\n * Retrieves the data for a given variable\n * @param variableName - Name of the variable to search or variable object\n * @return List with the variable values\n */\n getDataVariable(variableName: string | object): any[] {\n let variable;\n if (typeof variableName === 'string') {\n // search the variable\n variable = this.header.variables.find(function (val) {\n return val.name === variableName;\n });\n } else {\n variable = variableName;\n }\n\n // throws if variable not found\n if (variable === undefined) {\n throw new Error(`NetCDF: variable not found: ${variableName}`);\n }\n\n // go to the offset position\n this.buffer.seek(variable.offset);\n\n if (variable.record) {\n // record variable case\n return readRecord(this.buffer, variable, this.header.recordDimension);\n }\n // non-record variable case\n return readNonRecord(this.buffer, variable);\n }\n\n toString(): string {\n const result: string[] = [];\n\n result.push('DIMENSIONS');\n for (const dimension of this.dimensions) {\n result.push(` ${dimension.name.padEnd(30)} = size: ${dimension.size}`);\n }\n\n result.push('');\n result.push('GLOBAL ATTRIBUTES');\n for (const attribute of this.attributes) {\n result.push(` ${attribute.name.padEnd(30)} = ${attribute.value}`);\n }\n\n const variables = JSON.parse(JSON.stringify(this.variables));\n result.push('');\n result.push('VARIABLES:');\n for (const variable of variables) {\n variable.value = this.getDataVariable(variable);\n let stringify = JSON.stringify(variable.value);\n if (stringify.length > 50) stringify = stringify.substring(0, 50);\n if (!isNaN(variable.value.length)) {\n stringify += ` (length: ${variable.value.length})`;\n }\n result.push(` ${variable.name.padEnd(30)} = ${stringify}`);\n }\n return result.join('\\n');\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"netcdf-types.js","names":[],"sources":["../../../src/netcdfjs/netcdf-types.ts"],"sourcesContent":["/**\n * Header describing a NetDCF file\n * @param recordDimension: Number with the length of record dimension\n * @param dimensions: List of dimensions\n * @param attributes: List of global attributes\n * @param variables: List of variables\n */\nexport type NetCDFHeader = {\n version: number;\n recordDimension: NetCDFRecordDimension;\n dimensions: NetCDFDimension[];\n attributes: NetCDFAttribute[];\n variables: NetCDFVariable[];\n};\n\n/**\n * Metadata for the record dimension\n * @param length Number of elements in the record dimension\n * @param id Id in the list of dimensions for the record dimension\n * @param name name of the record dimension\n * @param recordStep the record variables step size\n */\nexport type NetCDFRecordDimension = {\n length: number;\n id: number; // id of the unlimited dimension\n name: string; // name of the unlimited dimension\n recordStep: number;\n};\n\n/**\n * `dimensions` is an array of dimension objects:\n * @param name name of the dimension\n * @param size size of the dimension\n * @param recordId: id of the dimension that has unlimited size or undefined,\n * @param recordName: name of the dimension that has unlimited size\n */\nexport type NetCDFDimension = {\n name: string;\n size: number;\n recordId: number;\n recordName: string;\n};\n\n/**\n * Number of recordStep and list of variables with:\n * @param name String with the name of the variable\n * @param dimensions Array with the dimension IDs of the variable\n * @param attributes Array with the attributes of the variable\n * @param type String with the type of the variable\n * @param size Number with the size of the variable\n * @param offset Number with the offset where of the variable begins\n * @param record True if is a record variable, false otherwise (unlimited size)\n */\nexport type NetCDFVariable = {\n name: string;\n dimensions: [];\n attributes: [];\n type: string;\n size: number;\n offset: number;\n record: boolean;\n};\n\n/**\n * @param name name of the attribute\n * @param type type of the attribute\n * @param value number or string with the value of the attribute\n */\nexport type NetCDFAttribute = {\n name: string;\n type: string;\n value: string;\n};\n"],"mappings":""}
|
|
@@ -5,34 +5,33 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.readNonRecord = readNonRecord;
|
|
7
7
|
exports.readRecord = readRecord;
|
|
8
|
-
|
|
9
8
|
var _readType = require("./read-type");
|
|
10
9
|
|
|
11
10
|
function readNonRecord(buffer, variable) {
|
|
12
11
|
var type = (0, _readType.str2num)(variable.type);
|
|
12
|
+
|
|
13
13
|
var size = variable.size / (0, _readType.num2bytes)(type);
|
|
14
|
-
var data = new Array(size);
|
|
15
14
|
|
|
15
|
+
var data = new Array(size);
|
|
16
16
|
for (var i = 0; i < size; i++) {
|
|
17
17
|
data[i] = (0, _readType.readType)(buffer, type, 1);
|
|
18
18
|
}
|
|
19
|
-
|
|
20
19
|
return data;
|
|
21
20
|
}
|
|
22
21
|
|
|
23
22
|
function readRecord(buffer, variable, recordDimension) {
|
|
24
23
|
var type = (0, _readType.str2num)(variable.type);
|
|
25
24
|
var width = variable.size ? variable.size / (0, _readType.num2bytes)(type) : 1;
|
|
25
|
+
|
|
26
26
|
var size = recordDimension.length;
|
|
27
|
+
|
|
27
28
|
var data = new Array(size);
|
|
28
29
|
var step = recordDimension.recordStep;
|
|
29
|
-
|
|
30
30
|
for (var i = 0; i < size; i++) {
|
|
31
31
|
var currentOffset = buffer.offset;
|
|
32
32
|
data[i] = (0, _readType.readType)(buffer, type, width);
|
|
33
33
|
buffer.seek(currentOffset + step);
|
|
34
34
|
}
|
|
35
|
-
|
|
36
35
|
return data;
|
|
37
36
|
}
|
|
38
37
|
//# sourceMappingURL=read-data.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"read-data.js","names":["readNonRecord","buffer","variable","type","str2num","size","num2bytes","data","Array","i","readType","readRecord","recordDimension","width","length","step","recordStep","currentOffset","offset","seek"],"sources":["../../../src/netcdfjs/read-data.ts"],"sourcesContent":["import type {IOBuffer} from '../iobuffer/iobuffer';\nimport type {NetCDFRecordDimension, NetCDFVariable} from './netcdf-types';\nimport {readType, str2num, num2bytes} from './read-type';\n\n// const STREAMING = 4294967295;\n\n/**\n * Read data for the given non-record variable\n * @param buffer - Buffer for the file data\n * @param variable - Variable metadata\n * @return Data of the element\n */\nexport function readNonRecord(\n buffer: IOBuffer,\n variable: NetCDFVariable\n): (string | number | number[] | Uint8Array)[] {\n // variable type\n const type = str2num(variable.type);\n\n // size of the data\n const size = variable.size / num2bytes(type);\n\n // iterates over the data\n const data = new Array(size);\n for (let i = 0; i < size; i++) {\n data[i] = readType(buffer, type, 1);\n }\n\n return data;\n}\n\n/**\n * Read data for the given record variable\n * @param buffer - Buffer for the file data\n * @param variable - Variable metadata\n * @param recordDimension - Record dimension metadata\n * @return - Data of the element\n */\nexport function readRecord(\n buffer: IOBuffer,\n variable: NetCDFVariable,\n recordDimension: NetCDFRecordDimension\n): (string | number | number[] | Uint8Array)[] {\n // variable type\n const type = str2num(variable.type);\n const width = variable.size ? variable.size / num2bytes(type) : 1;\n\n // size of the data\n // TODO streaming data\n const size = recordDimension.length;\n\n // iterates over the data\n const data = new Array(size);\n const step = recordDimension.recordStep;\n\n for (let i = 0; i < size; i++) {\n const currentOffset = buffer.offset;\n data[i] = readType(buffer, type, width);\n buffer.seek(currentOffset + step);\n }\n\n return data;\n}\n"],"mappings":";;;;;;;AAEA;;AAUO,SAASA,aAAa,CAC3BC,MAAgB,EAChBC,QAAwB,EACqB;EAE7C,IAAMC,IAAI,GAAG,IAAAC,iBAAO,EAACF,QAAQ,CAACC,IAAI,CAAC;;EAGnC,IAAME,IAAI,GAAGH,QAAQ,CAACG,IAAI,GAAG,IAAAC,mBAAS,EAACH,IAAI,CAAC;;EAG5C,IAAMI,IAAI,GAAG,IAAIC,KAAK,CAACH,IAAI,CAAC;EAC5B,KAAK,IAAII,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGJ,IAAI,EAAEI,CAAC,EAAE,EAAE;IAC7BF,IAAI,CAACE,CAAC,CAAC,GAAG,IAAAC,kBAAQ,EAACT,MAAM,EAAEE,IAAI,EAAE,CAAC,CAAC;EACrC;EAEA,OAAOI,IAAI;AACb;;AASO,SAASI,UAAU,CACxBV,MAAgB,EAChBC,QAAwB,EACxBU,eAAsC,EACO;EAE7C,IAAMT,IAAI,GAAG,IAAAC,iBAAO,EAACF,QAAQ,CAACC,IAAI,CAAC;EACnC,IAAMU,KAAK,GAAGX,QAAQ,CAACG,IAAI,GAAGH,QAAQ,CAACG,IAAI,GAAG,IAAAC,mBAAS,EAACH,IAAI,CAAC,GAAG,CAAC;;EAIjE,IAAME,IAAI,GAAGO,eAAe,CAACE,MAAM;;EAGnC,IAAMP,IAAI,GAAG,IAAIC,KAAK,CAACH,IAAI,CAAC;EAC5B,IAAMU,IAAI,GAAGH,eAAe,CAACI,UAAU;EAEvC,KAAK,IAAIP,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGJ,IAAI,EAAEI,CAAC,EAAE,EAAE;IAC7B,IAAMQ,aAAa,GAAGhB,MAAM,CAACiB,MAAM;IACnCX,IAAI,CAACE,CAAC,CAAC,GAAG,IAAAC,kBAAQ,EAACT,MAAM,EAAEE,IAAI,EAAEU,KAAK,CAAC;IACvCZ,MAAM,CAACkB,IAAI,CAACF,aAAa,GAAGF,IAAI,CAAC;EACnC;EAEA,OAAOR,IAAI;AACb"}
|
|
@@ -3,11 +3,9 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.readNetCDFHeader = readNetCDFHeader;
|
|
7
6
|
exports.readName = readName;
|
|
8
|
-
|
|
7
|
+
exports.readNetCDFHeader = readNetCDFHeader;
|
|
9
8
|
var _readType = require("./read-type");
|
|
10
|
-
|
|
11
9
|
var ZERO = 0;
|
|
12
10
|
var NC_DIMENSION = 10;
|
|
13
11
|
var NC_VARIABLE = 11;
|
|
@@ -16,8 +14,11 @@ var NC_UNLIMITED = 0;
|
|
|
16
14
|
|
|
17
15
|
function readNetCDFHeader(buffer, version) {
|
|
18
16
|
var recordDimensionLength = buffer.readUint32();
|
|
17
|
+
|
|
19
18
|
var dimList = readDimensionsList(buffer);
|
|
19
|
+
|
|
20
20
|
var attributes = readAttributesList(buffer);
|
|
21
|
+
|
|
21
22
|
var variableList = readVariablesList(buffer, dimList.recordId, version);
|
|
22
23
|
var header = {
|
|
23
24
|
version: version,
|
|
@@ -36,19 +37,16 @@ function readNetCDFHeader(buffer, version) {
|
|
|
36
37
|
|
|
37
38
|
function readDimensionsList(buffer) {
|
|
38
39
|
var dimList = buffer.readUint32();
|
|
39
|
-
|
|
40
40
|
if (dimList === ZERO) {
|
|
41
41
|
if (buffer.readUint32() !== ZERO) {
|
|
42
42
|
throw new Error('NetCDF: wrong empty tag for list of dimensions');
|
|
43
43
|
}
|
|
44
|
-
|
|
45
44
|
return {
|
|
46
45
|
recordId: 0,
|
|
47
46
|
recordName: '',
|
|
48
47
|
dimensions: []
|
|
49
48
|
};
|
|
50
49
|
}
|
|
51
|
-
|
|
52
50
|
if (dimList !== NC_DIMENSION) {
|
|
53
51
|
throw new Error('NetCDF: wrong tag for list of dimensions');
|
|
54
52
|
}
|
|
@@ -57,22 +55,19 @@ function readDimensionsList(buffer) {
|
|
|
57
55
|
var dimensions = new Array(dimensionSize);
|
|
58
56
|
var recordId;
|
|
59
57
|
var recordName;
|
|
60
|
-
|
|
61
58
|
for (var dim = 0; dim < dimensionSize; dim++) {
|
|
62
59
|
var name = readName(buffer);
|
|
63
|
-
var size = buffer.readUint32();
|
|
64
60
|
|
|
61
|
+
var size = buffer.readUint32();
|
|
65
62
|
if (size === NC_UNLIMITED) {
|
|
66
63
|
recordId = dim;
|
|
67
64
|
recordName = name;
|
|
68
65
|
}
|
|
69
|
-
|
|
70
66
|
dimensions[dim] = {
|
|
71
67
|
name: name,
|
|
72
68
|
size: size
|
|
73
69
|
};
|
|
74
70
|
}
|
|
75
|
-
|
|
76
71
|
return {
|
|
77
72
|
dimensions: dimensions,
|
|
78
73
|
recordId: recordId,
|
|
@@ -82,32 +77,29 @@ function readDimensionsList(buffer) {
|
|
|
82
77
|
|
|
83
78
|
function readAttributesList(buffer) {
|
|
84
79
|
var gAttList = buffer.readUint32();
|
|
85
|
-
|
|
86
80
|
if (gAttList === ZERO) {
|
|
87
81
|
if (buffer.readUint32() !== ZERO) {
|
|
88
82
|
throw new Error('NetCDF: wrong empty tag for list of attributes');
|
|
89
83
|
}
|
|
90
|
-
|
|
91
84
|
return [];
|
|
92
85
|
}
|
|
93
|
-
|
|
94
86
|
if (gAttList !== NC_ATTRIBUTE) {
|
|
95
87
|
throw new Error('NetCDF: wrong tag for list of attributes');
|
|
96
88
|
}
|
|
97
89
|
|
|
98
90
|
var attributeSize = buffer.readUint32();
|
|
99
91
|
var attributes = new Array(attributeSize);
|
|
100
|
-
|
|
101
92
|
for (var gAtt = 0; gAtt < attributeSize; gAtt++) {
|
|
102
93
|
var name = readName(buffer);
|
|
103
|
-
var type = buffer.readUint32();
|
|
104
94
|
|
|
95
|
+
var type = buffer.readUint32();
|
|
105
96
|
if (type < 1 || type > 6) {
|
|
106
97
|
throw new Error("NetCDF: non valid type ".concat(type));
|
|
107
98
|
}
|
|
108
99
|
|
|
109
100
|
var size = buffer.readUint32();
|
|
110
101
|
var value = (0, _readType.readType)(buffer, type, size);
|
|
102
|
+
|
|
111
103
|
padding(buffer);
|
|
112
104
|
attributes[gAtt] = {
|
|
113
105
|
name: name,
|
|
@@ -115,66 +107,58 @@ function readAttributesList(buffer) {
|
|
|
115
107
|
value: value
|
|
116
108
|
};
|
|
117
109
|
}
|
|
118
|
-
|
|
119
110
|
return attributes;
|
|
120
111
|
}
|
|
121
112
|
|
|
122
113
|
function readVariablesList(buffer, recordId, version) {
|
|
123
114
|
var varList = buffer.readUint32();
|
|
124
115
|
var recordStep = 0;
|
|
125
|
-
|
|
126
116
|
if (varList === ZERO) {
|
|
127
117
|
if (buffer.readUint32() !== ZERO) {
|
|
128
118
|
throw new Error('NetCDF: wrong empty tag for list of variables');
|
|
129
119
|
}
|
|
130
|
-
|
|
131
120
|
return {
|
|
132
121
|
recordStep: recordStep,
|
|
133
122
|
variables: []
|
|
134
123
|
};
|
|
135
124
|
}
|
|
136
|
-
|
|
137
125
|
if (varList !== NC_VARIABLE) {
|
|
138
126
|
throw new Error('NetCDF: wrong tag for list of variables');
|
|
139
127
|
}
|
|
140
128
|
|
|
141
129
|
var variableSize = buffer.readUint32();
|
|
142
130
|
var variables = new Array(variableSize);
|
|
143
|
-
|
|
144
131
|
for (var v = 0; v < variableSize; v++) {
|
|
145
132
|
var name = readName(buffer);
|
|
133
|
+
|
|
146
134
|
var dimensionality = buffer.readUint32();
|
|
147
|
-
var dimensionsIds = new Array(dimensionality);
|
|
148
135
|
|
|
136
|
+
var dimensionsIds = new Array(dimensionality);
|
|
149
137
|
for (var dim = 0; dim < dimensionality; dim++) {
|
|
150
138
|
dimensionsIds[dim] = buffer.readUint32();
|
|
151
139
|
}
|
|
152
140
|
|
|
153
141
|
var attributes = readAttributesList(buffer);
|
|
154
|
-
var type = buffer.readUint32();
|
|
155
142
|
|
|
143
|
+
var type = buffer.readUint32();
|
|
156
144
|
if (type < 1 && type > 6) {
|
|
157
145
|
throw new Error("NetCDF: non valid type ".concat(type));
|
|
158
146
|
}
|
|
159
147
|
|
|
160
148
|
var varSize = buffer.readUint32();
|
|
161
|
-
var offset = buffer.readUint32();
|
|
162
149
|
|
|
150
|
+
var offset = buffer.readUint32();
|
|
163
151
|
if (version === 2) {
|
|
164
152
|
if (offset > 0) {
|
|
165
153
|
throw new Error('NetCDF: offsets larger than 4GB not supported');
|
|
166
154
|
}
|
|
167
|
-
|
|
168
155
|
offset = buffer.readUint32();
|
|
169
156
|
}
|
|
170
|
-
|
|
171
157
|
var record = false;
|
|
172
|
-
|
|
173
158
|
if (typeof recordId !== 'undefined' && dimensionsIds[0] === recordId) {
|
|
174
159
|
recordStep += varSize;
|
|
175
160
|
record = true;
|
|
176
161
|
}
|
|
177
|
-
|
|
178
162
|
variables[v] = {
|
|
179
163
|
name: name,
|
|
180
164
|
dimensions: dimensionsIds,
|
|
@@ -185,7 +169,6 @@ function readVariablesList(buffer, recordId, version) {
|
|
|
185
169
|
record: record
|
|
186
170
|
};
|
|
187
171
|
}
|
|
188
|
-
|
|
189
172
|
return {
|
|
190
173
|
variables: variables,
|
|
191
174
|
recordStep: recordStep
|
|
@@ -195,6 +178,7 @@ function readVariablesList(buffer, recordId, version) {
|
|
|
195
178
|
function readName(buffer) {
|
|
196
179
|
var nameLength = buffer.readUint32();
|
|
197
180
|
var name = buffer.readChars(nameLength);
|
|
181
|
+
|
|
198
182
|
padding(buffer);
|
|
199
183
|
return name;
|
|
200
184
|
}
|