@loaders.gl/geopackage 3.4.13 → 3.4.15

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.
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- var moduleExports = require('./index');
3
+ const moduleExports = require('./index');
4
4
  globalThis.loaders = globalThis.loaders || {};
5
5
  module.exports = Object.assign(globalThis.loaders, moduleExports);
6
6
  //# sourceMappingURL=bundle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bundle.js","names":["moduleExports","require","globalThis","loaders","module","exports","Object","assign"],"sources":["../../src/bundle.ts"],"sourcesContent":["// @ts-nocheck\nconst moduleExports = require('./index');\nglobalThis.loaders = globalThis.loaders || {};\nmodule.exports = Object.assign(globalThis.loaders, moduleExports);\n"],"mappings":";;AACA,IAAMA,aAAa,GAAGC,OAAO,CAAC,SAAS,CAAC;AACxCC,UAAU,CAACC,OAAO,GAAGD,UAAU,CAACC,OAAO,IAAI,CAAC,CAAC;AAC7CC,MAAM,CAACC,OAAO,GAAGC,MAAM,CAACC,MAAM,CAACL,UAAU,CAACC,OAAO,EAAEH,aAAa,CAAC"}
1
+ {"version":3,"file":"bundle.js","names":["moduleExports","require","globalThis","loaders","module","exports","Object","assign"],"sources":["../../src/bundle.ts"],"sourcesContent":["// @ts-nocheck\nconst moduleExports = require('./index');\nglobalThis.loaders = globalThis.loaders || {};\nmodule.exports = Object.assign(globalThis.loaders, moduleExports);\n"],"mappings":";;AACA,MAAMA,aAAa,GAAGC,OAAO,CAAC,SAAS,CAAC;AACxCC,UAAU,CAACC,OAAO,GAAGD,UAAU,CAACC,OAAO,IAAI,CAAC,CAAC;AAC7CC,MAAM,CAACC,OAAO,GAAGC,MAAM,CAACC,MAAM,CAACL,UAAU,CAACC,OAAO,EAAEH,aAAa,CAAC"}
@@ -1,15 +1,14 @@
1
1
  "use strict";
2
2
 
3
- var _typeof = require("@babel/runtime/helpers/typeof");
4
3
  Object.defineProperty(exports, "__esModule", {
5
4
  value: true
6
5
  });
7
6
  exports.GeoPackageLoader = void 0;
8
7
  var _parseGeopackage = _interopRequireWildcard(require("./lib/parse-geopackage"));
9
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
10
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
11
- var VERSION = 'latest';
12
- var GeoPackageLoader = {
8
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
9
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
10
+ const VERSION = 'latest';
11
+ const GeoPackageLoader = {
13
12
  id: 'geopackage',
14
13
  name: 'GeoPackage',
15
14
  module: 'geopackage',
@@ -1 +1 @@
1
- {"version":3,"file":"geopackage-loader.js","names":["_parseGeopackage","_interopRequireWildcard","require","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","_typeof","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","VERSION","GeoPackageLoader","id","name","module","version","extensions","mimeTypes","category","parse","parseGeoPackage","options","geopackage","sqlJsCDN","DEFAULT_SQLJS_CDN","gis","format","exports"],"sources":["../../src/geopackage-loader.ts"],"sourcesContent":["import type {LoaderWithParser, LoaderOptions} from '@loaders.gl/loader-utils';\nimport parseGeoPackage, {DEFAULT_SQLJS_CDN} from './lib/parse-geopackage';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\n// const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\nconst VERSION = 'latest';\n\nexport type GeoPackageLoaderOptions = LoaderOptions & {\n geopackage?: {\n // Use null in Node\n sqlJsCDN: string | null;\n };\n gis?: {\n reproject?: boolean;\n _targetCrs?: string;\n format?: 'geojson' | 'tables';\n };\n};\n\n/** Geopackage loader */\nexport const GeoPackageLoader: LoaderWithParser = {\n id: 'geopackage',\n name: 'GeoPackage',\n module: 'geopackage',\n version: VERSION,\n extensions: ['gpkg'],\n mimeTypes: ['application/geopackage+sqlite3'],\n category: 'geometry',\n parse: parseGeoPackage,\n options: {\n geopackage: {\n sqlJsCDN: DEFAULT_SQLJS_CDN\n },\n gis: {\n format: 'tables'\n }\n }\n};\n"],"mappings":";;;;;;;AACA,IAAAA,gBAAA,GAAAC,uBAAA,CAAAC,OAAA;AAA0E,SAAAC,yBAAAC,WAAA,eAAAC,OAAA,kCAAAC,iBAAA,OAAAD,OAAA,QAAAE,gBAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,yBAAAC,WAAA,WAAAA,WAAA,GAAAG,gBAAA,GAAAD,iBAAA,KAAAF,WAAA;AAAA,SAAAH,wBAAAO,GAAA,EAAAJ,WAAA,SAAAA,WAAA,IAAAI,GAAA,IAAAA,GAAA,CAAAC,UAAA,WAAAD,GAAA,QAAAA,GAAA,aAAAE,OAAA,CAAAF,GAAA,yBAAAA,GAAA,4BAAAG,OAAA,EAAAH,GAAA,UAAAI,KAAA,GAAAT,wBAAA,CAAAC,WAAA,OAAAQ,KAAA,IAAAA,KAAA,CAAAC,GAAA,CAAAL,GAAA,YAAAI,KAAA,CAAAE,GAAA,CAAAN,GAAA,SAAAO,MAAA,WAAAC,qBAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,GAAA,IAAAZ,GAAA,QAAAY,GAAA,kBAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAf,GAAA,EAAAY,GAAA,SAAAI,IAAA,GAAAR,qBAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAX,GAAA,EAAAY,GAAA,cAAAI,IAAA,KAAAA,IAAA,CAAAV,GAAA,IAAAU,IAAA,CAAAC,GAAA,KAAAR,MAAA,CAAAC,cAAA,CAAAH,MAAA,EAAAK,GAAA,EAAAI,IAAA,YAAAT,MAAA,CAAAK,GAAA,IAAAZ,GAAA,CAAAY,GAAA,SAAAL,MAAA,CAAAJ,OAAA,GAAAH,GAAA,MAAAI,KAAA,IAAAA,KAAA,CAAAa,GAAA,CAAAjB,GAAA,EAAAO,MAAA,YAAAA,MAAA;AAK1E,IAAMW,OAAO,GAAG,QAAQ;AAejB,IAAMC,gBAAkC,GAAG;EAChDC,EAAE,EAAE,YAAY;EAChBC,IAAI,EAAE,YAAY;EAClBC,MAAM,EAAE,YAAY;EACpBC,OAAO,EAAEL,OAAO;EAChBM,UAAU,EAAE,CAAC,MAAM,CAAC;EACpBC,SAAS,EAAE,CAAC,gCAAgC,CAAC;EAC7CC,QAAQ,EAAE,UAAU;EACpBC,KAAK,EAAEC,wBAAe;EACtBC,OAAO,EAAE;IACPC,UAAU,EAAE;MACVC,QAAQ,EAAEC;IACZ,CAAC;IACDC,GAAG,EAAE;MACHC,MAAM,EAAE;IACV;EACF;AACF,CAAC;AAACC,OAAA,CAAAhB,gBAAA,GAAAA,gBAAA"}
1
+ {"version":3,"file":"geopackage-loader.js","names":["_parseGeopackage","_interopRequireWildcard","require","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","VERSION","GeoPackageLoader","id","name","module","version","extensions","mimeTypes","category","parse","parseGeoPackage","options","geopackage","sqlJsCDN","DEFAULT_SQLJS_CDN","gis","format","exports"],"sources":["../../src/geopackage-loader.ts"],"sourcesContent":["import type {LoaderWithParser, LoaderOptions} from '@loaders.gl/loader-utils';\nimport parseGeoPackage, {DEFAULT_SQLJS_CDN} from './lib/parse-geopackage';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\n// const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\nconst VERSION = 'latest';\n\nexport type GeoPackageLoaderOptions = LoaderOptions & {\n geopackage?: {\n // Use null in Node\n sqlJsCDN: string | null;\n };\n gis?: {\n reproject?: boolean;\n _targetCrs?: string;\n format?: 'geojson' | 'tables';\n };\n};\n\n/** Geopackage loader */\nexport const GeoPackageLoader: LoaderWithParser = {\n id: 'geopackage',\n name: 'GeoPackage',\n module: 'geopackage',\n version: VERSION,\n extensions: ['gpkg'],\n mimeTypes: ['application/geopackage+sqlite3'],\n category: 'geometry',\n parse: parseGeoPackage,\n options: {\n geopackage: {\n sqlJsCDN: DEFAULT_SQLJS_CDN\n },\n gis: {\n format: 'tables'\n }\n }\n};\n"],"mappings":";;;;;;AACA,IAAAA,gBAAA,GAAAC,uBAAA,CAAAC,OAAA;AAA0E,SAAAC,yBAAAC,WAAA,eAAAC,OAAA,kCAAAC,iBAAA,OAAAD,OAAA,QAAAE,gBAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,WAAA,WAAAA,WAAA,GAAAG,gBAAA,GAAAD,iBAAA,KAAAF,WAAA;AAAA,SAAAH,wBAAAO,GAAA,EAAAJ,WAAA,SAAAA,WAAA,IAAAI,GAAA,IAAAA,GAAA,CAAAC,UAAA,WAAAD,GAAA,QAAAA,GAAA,oBAAAA,GAAA,wBAAAA,GAAA,4BAAAE,OAAA,EAAAF,GAAA,UAAAG,KAAA,GAAAR,wBAAA,CAAAC,WAAA,OAAAO,KAAA,IAAAA,KAAA,CAAAC,GAAA,CAAAJ,GAAA,YAAAG,KAAA,CAAAE,GAAA,CAAAL,GAAA,SAAAM,MAAA,WAAAC,qBAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,GAAA,IAAAX,GAAA,QAAAW,GAAA,kBAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAd,GAAA,EAAAW,GAAA,SAAAI,IAAA,GAAAR,qBAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAV,GAAA,EAAAW,GAAA,cAAAI,IAAA,KAAAA,IAAA,CAAAV,GAAA,IAAAU,IAAA,CAAAC,GAAA,KAAAR,MAAA,CAAAC,cAAA,CAAAH,MAAA,EAAAK,GAAA,EAAAI,IAAA,YAAAT,MAAA,CAAAK,GAAA,IAAAX,GAAA,CAAAW,GAAA,SAAAL,MAAA,CAAAJ,OAAA,GAAAF,GAAA,MAAAG,KAAA,IAAAA,KAAA,CAAAa,GAAA,CAAAhB,GAAA,EAAAM,MAAA,YAAAA,MAAA;AAK1E,MAAMW,OAAO,GAAG,QAAQ;AAejB,MAAMC,gBAAkC,GAAG;EAChDC,EAAE,EAAE,YAAY;EAChBC,IAAI,EAAE,YAAY;EAClBC,MAAM,EAAE,YAAY;EACpBC,OAAO,EAAEL,OAAO;EAChBM,UAAU,EAAE,CAAC,MAAM,CAAC;EACpBC,SAAS,EAAE,CAAC,gCAAgC,CAAC;EAC7CC,QAAQ,EAAE,UAAU;EACpBC,KAAK,EAAEC,wBAAe;EACtBC,OAAO,EAAE;IACPC,UAAU,EAAE;MACVC,QAAQ,EAAEC;IACZ,CAAC;IACDC,GAAG,EAAE;MACHC,MAAM,EAAE;IACV;EACF;AACF,CAAC;AAACC,OAAA,CAAAhB,gBAAA,GAAAA,gBAAA"}
package/dist/es5/index.js CHANGED
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  Object.defineProperty(exports, "GeoPackageLoader", {
7
7
  enumerable: true,
8
- get: function get() {
8
+ get: function () {
9
9
  return _geopackageLoader.GeoPackageLoader;
10
10
  }
11
11
  });
@@ -6,20 +6,14 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.DEFAULT_SQLJS_CDN = void 0;
8
8
  exports.default = parseGeoPackage;
9
- var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
10
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
12
9
  var _sql = _interopRequireDefault(require("sql.js"));
13
10
  var _wkt = require("@loaders.gl/wkt");
14
11
  var _schema = require("@loaders.gl/schema");
15
12
  var _gis = require("@loaders.gl/gis");
16
13
  var _proj = require("@math.gl/proj4");
17
- 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; } } }; }
18
- 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); }
19
- 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; }
20
- var DEFAULT_SQLJS_CDN = 'https://cdnjs.cloudflare.com/ajax/libs/sql.js/1.5.0/';
14
+ const DEFAULT_SQLJS_CDN = 'https://cdnjs.cloudflare.com/ajax/libs/sql.js/1.5.0/';
21
15
  exports.DEFAULT_SQLJS_CDN = DEFAULT_SQLJS_CDN;
22
- var ENVELOPE_BYTE_LENGTHS = {
16
+ const ENVELOPE_BYTE_LENGTHS = {
23
17
  0: 0,
24
18
  1: 32,
25
19
  2: 48,
@@ -29,7 +23,7 @@ var ENVELOPE_BYTE_LENGTHS = {
29
23
  6: 0,
30
24
  7: 0
31
25
  };
32
- var SQL_TYPE_MAPPING = {
26
+ const SQL_TYPE_MAPPING = {
33
27
  BOOLEAN: _schema.Bool,
34
28
  TINYINT: _schema.Int8,
35
29
  SMALLINT: _schema.Int16,
@@ -52,220 +46,167 @@ var SQL_TYPE_MAPPING = {
52
46
  MULTIPOLYGON: _schema.Binary,
53
47
  GEOMETRYCOLLECTION: _schema.Binary
54
48
  };
55
- function parseGeoPackage(_x, _x2) {
56
- return _parseGeoPackage.apply(this, arguments);
57
- }
58
- function _parseGeoPackage() {
59
- _parseGeoPackage = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(arrayBuffer, options) {
60
- var _ref2, _ref2$sqlJsCDN, sqlJsCDN, _ref3, _ref3$reproject, reproject, _ref3$_targetCrs, _targetCrs, _ref3$format, format, db, tables, projections, outputTables, _iterator3, _step3, table, tableName;
61
- return _regenerator.default.wrap(function _callee$(_context) {
62
- while (1) switch (_context.prev = _context.next) {
63
- case 0:
64
- _ref2 = (options === null || options === void 0 ? void 0 : options.geopackage) || {}, _ref2$sqlJsCDN = _ref2.sqlJsCDN, sqlJsCDN = _ref2$sqlJsCDN === void 0 ? DEFAULT_SQLJS_CDN : _ref2$sqlJsCDN;
65
- _ref3 = (options === null || options === void 0 ? void 0 : options.gis) || {}, _ref3$reproject = _ref3.reproject, reproject = _ref3$reproject === void 0 ? false : _ref3$reproject, _ref3$_targetCrs = _ref3._targetCrs, _targetCrs = _ref3$_targetCrs === void 0 ? 'WGS84' : _ref3$_targetCrs, _ref3$format = _ref3.format, format = _ref3$format === void 0 ? 'tables' : _ref3$format;
66
- _context.next = 4;
67
- return loadDatabase(arrayBuffer, sqlJsCDN);
68
- case 4:
69
- db = _context.sent;
70
- tables = listVectorTables(db);
71
- projections = getProjections(db);
72
- outputTables = {
73
- shape: 'tables',
74
- tables: []
75
- };
76
- _iterator3 = _createForOfIteratorHelper(tables);
77
- try {
78
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
79
- table = _step3.value;
80
- tableName = table.table_name;
81
- outputTables.tables.push({
82
- name: tableName,
83
- table: getVectorTable(db, tableName, projections, {
84
- reproject: reproject,
85
- _targetCrs: _targetCrs
86
- })
87
- });
88
- }
89
- } catch (err) {
90
- _iterator3.e(err);
91
- } finally {
92
- _iterator3.f();
93
- }
94
- if (!(format === 'geojson')) {
95
- _context.next = 12;
96
- break;
97
- }
98
- return _context.abrupt("return", formatTablesAsGeojson(outputTables));
99
- case 12:
100
- return _context.abrupt("return", outputTables);
101
- case 13:
102
- case "end":
103
- return _context.stop();
104
- }
105
- }, _callee);
106
- }));
107
- return _parseGeoPackage.apply(this, arguments);
108
- }
109
- function loadDatabase(_x3, _x4) {
110
- return _loadDatabase.apply(this, arguments);
49
+ async function parseGeoPackage(arrayBuffer, options) {
50
+ const {
51
+ sqlJsCDN = DEFAULT_SQLJS_CDN
52
+ } = (options === null || options === void 0 ? void 0 : options.geopackage) || {};
53
+ const {
54
+ reproject = false,
55
+ _targetCrs = 'WGS84',
56
+ format = 'tables'
57
+ } = (options === null || options === void 0 ? void 0 : options.gis) || {};
58
+ const db = await loadDatabase(arrayBuffer, sqlJsCDN);
59
+ const tables = listVectorTables(db);
60
+ const projections = getProjections(db);
61
+ const outputTables = {
62
+ shape: 'tables',
63
+ tables: []
64
+ };
65
+ for (const table of tables) {
66
+ const {
67
+ table_name: tableName
68
+ } = table;
69
+ outputTables.tables.push({
70
+ name: tableName,
71
+ table: getVectorTable(db, tableName, projections, {
72
+ reproject,
73
+ _targetCrs
74
+ })
75
+ });
76
+ }
77
+ if (format === 'geojson') {
78
+ return formatTablesAsGeojson(outputTables);
79
+ }
80
+ return outputTables;
111
81
  }
112
- function _loadDatabase() {
113
- _loadDatabase = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee2(arrayBuffer, sqlJsCDN) {
114
- var SQL;
115
- return _regenerator.default.wrap(function _callee2$(_context2) {
116
- while (1) switch (_context2.prev = _context2.next) {
117
- case 0:
118
- if (!sqlJsCDN) {
119
- _context2.next = 6;
120
- break;
121
- }
122
- _context2.next = 3;
123
- return (0, _sql.default)({
124
- locateFile: function locateFile(file) {
125
- return "".concat(sqlJsCDN).concat(file);
126
- }
127
- });
128
- case 3:
129
- SQL = _context2.sent;
130
- _context2.next = 9;
131
- break;
132
- case 6:
133
- _context2.next = 8;
134
- return (0, _sql.default)();
135
- case 8:
136
- SQL = _context2.sent;
137
- case 9:
138
- return _context2.abrupt("return", new SQL.Database(new Uint8Array(arrayBuffer)));
139
- case 10:
140
- case "end":
141
- return _context2.stop();
142
- }
143
- }, _callee2);
144
- }));
145
- return _loadDatabase.apply(this, arguments);
82
+ async function loadDatabase(arrayBuffer, sqlJsCDN) {
83
+ let SQL;
84
+ if (sqlJsCDN) {
85
+ SQL = await (0, _sql.default)({
86
+ locateFile: file => "".concat(sqlJsCDN).concat(file)
87
+ });
88
+ } else {
89
+ SQL = await (0, _sql.default)();
90
+ }
91
+ return new SQL.Database(new Uint8Array(arrayBuffer));
146
92
  }
147
93
  function listVectorTables(db) {
148
- var stmt = db.prepare("SELECT * FROM gpkg_contents WHERE data_type='features';");
149
- var vectorTablesInfo = [];
94
+ const stmt = db.prepare("SELECT * FROM gpkg_contents WHERE data_type='features';");
95
+ const vectorTablesInfo = [];
150
96
  while (stmt.step()) {
151
- var vectorTableInfo = stmt.getAsObject();
97
+ const vectorTableInfo = stmt.getAsObject();
152
98
  vectorTablesInfo.push(vectorTableInfo);
153
99
  }
154
100
  return vectorTablesInfo;
155
101
  }
156
102
  function getVectorTable(db, tableName, projections, _ref) {
157
- var reproject = _ref.reproject,
158
- _targetCrs = _ref._targetCrs;
159
- var dataColumns = getDataColumns(db, tableName);
160
- var geomColumn = getGeometryColumn(db, tableName);
161
- var featureIdColumn = getFeatureIdName(db, tableName);
162
- var _db$exec$ = db.exec("SELECT * FROM `".concat(tableName, "`;"))[0],
163
- columns = _db$exec$.columns,
164
- values = _db$exec$.values;
165
- var projection;
103
+ let {
104
+ reproject,
105
+ _targetCrs
106
+ } = _ref;
107
+ const dataColumns = getDataColumns(db, tableName);
108
+ const geomColumn = getGeometryColumn(db, tableName);
109
+ const featureIdColumn = getFeatureIdName(db, tableName);
110
+ const {
111
+ columns,
112
+ values
113
+ } = db.exec("SELECT * FROM `".concat(tableName, "`;"))[0];
114
+ let projection;
166
115
  if (reproject) {
167
- var geomColumnProjStr = projections[geomColumn.srs_id];
116
+ const geomColumnProjStr = projections[geomColumn.srs_id];
168
117
  projection = new _proj.Proj4Projection({
169
118
  from: geomColumnProjStr,
170
119
  to: _targetCrs
171
120
  });
172
121
  }
173
- var geojsonFeatures = [];
174
- var _iterator = _createForOfIteratorHelper(values),
175
- _step;
176
- try {
177
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
178
- var row = _step.value;
179
- var geojsonFeature = constructGeoJsonFeature(columns, row, geomColumn, dataColumns, featureIdColumn);
180
- geojsonFeatures.push(geojsonFeature);
181
- }
182
- } catch (err) {
183
- _iterator.e(err);
184
- } finally {
185
- _iterator.f();
122
+ const geojsonFeatures = [];
123
+ for (const row of values) {
124
+ const geojsonFeature = constructGeoJsonFeature(columns, row, geomColumn, dataColumns, featureIdColumn);
125
+ geojsonFeatures.push(geojsonFeature);
186
126
  }
187
- var schema = getArrowSchema(db, tableName);
127
+ const schema = getArrowSchema(db, tableName);
188
128
  if (projection) {
189
129
  return {
190
130
  data: (0, _gis.transformGeoJsonCoords)(geojsonFeatures, projection.project),
191
- schema: schema,
131
+ schema,
192
132
  shape: 'object-row-table'
193
133
  };
194
134
  }
195
135
  return {
196
136
  data: geojsonFeatures,
197
- schema: schema,
137
+ schema,
198
138
  shape: 'object-row-table'
199
139
  };
200
140
  }
201
141
  function getProjections(db) {
202
- var stmt = db.prepare('SELECT * FROM gpkg_spatial_ref_sys;');
203
- var projectionMapping = {};
142
+ const stmt = db.prepare('SELECT * FROM gpkg_spatial_ref_sys;');
143
+ const projectionMapping = {};
204
144
  while (stmt.step()) {
205
- var srsInfo = stmt.getAsObject();
206
- var srs_id = srsInfo.srs_id,
207
- definition = srsInfo.definition;
145
+ const srsInfo = stmt.getAsObject();
146
+ const {
147
+ srs_id,
148
+ definition
149
+ } = srsInfo;
208
150
  projectionMapping[srs_id] = definition;
209
151
  }
210
152
  return projectionMapping;
211
153
  }
212
154
  function constructGeoJsonFeature(columns, row, geomColumn, dataColumns, featureIdColumn) {
213
- var idIdx = columns.indexOf(featureIdColumn);
214
- var id = row[idIdx];
215
- var geomColumnIdx = columns.indexOf(geomColumn.column_name);
216
- var geometry = parseGeometry(row[geomColumnIdx].buffer);
217
- var properties = {};
155
+ const idIdx = columns.indexOf(featureIdColumn);
156
+ const id = row[idIdx];
157
+ const geomColumnIdx = columns.indexOf(geomColumn.column_name);
158
+ const geometry = parseGeometry(row[geomColumnIdx].buffer);
159
+ const properties = {};
218
160
  if (dataColumns) {
219
- for (var _i = 0, _Object$entries = Object.entries(dataColumns); _i < _Object$entries.length; _i++) {
220
- var _Object$entries$_i = (0, _slicedToArray2.default)(_Object$entries[_i], 2),
221
- key = _Object$entries$_i[0],
222
- value = _Object$entries$_i[1];
223
- var idx = columns.indexOf(key);
161
+ for (const [key, value] of Object.entries(dataColumns)) {
162
+ const idx = columns.indexOf(key);
224
163
  properties[value] = row[idx];
225
164
  }
226
165
  } else {
227
- for (var i = 0; i < columns.length; i++) {
166
+ for (let i = 0; i < columns.length; i++) {
228
167
  if (i === idIdx || i === geomColumnIdx) {
229
168
  continue;
230
169
  }
231
- var columnName = columns[i];
170
+ const columnName = columns[i];
232
171
  properties[columnName] = row[i];
233
172
  }
234
173
  }
235
174
  return {
236
- id: id,
175
+ id,
237
176
  type: 'Feature',
238
- geometry: geometry,
239
- properties: properties
177
+ geometry,
178
+ properties
240
179
  };
241
180
  }
242
181
  function getGeopackageVersion(db) {
243
- var textDecoder = new TextDecoder();
244
- var applicationIdQuery = db.exec('PRAGMA application_id;')[0];
245
- var applicationId = applicationIdQuery.values[0][0];
246
- var buffer = new ArrayBuffer(4);
247
- var view = new DataView(buffer);
182
+ const textDecoder = new TextDecoder();
183
+ const applicationIdQuery = db.exec('PRAGMA application_id;')[0];
184
+ const applicationId = applicationIdQuery.values[0][0];
185
+ const buffer = new ArrayBuffer(4);
186
+ const view = new DataView(buffer);
248
187
  view.setInt32(0, Number(applicationId));
249
- var versionString = textDecoder.decode(buffer);
188
+ const versionString = textDecoder.decode(buffer);
250
189
  if (versionString === 'GP10') {
251
190
  return '1.0';
252
191
  }
253
192
  if (versionString === 'GP11') {
254
193
  return '1.1';
255
194
  }
256
- var userVersionQuery = db.exec('PRAGMA user_version;')[0];
257
- var userVersionInt = userVersionQuery.values[0][0];
195
+ const userVersionQuery = db.exec('PRAGMA user_version;')[0];
196
+ const userVersionInt = userVersionQuery.values[0][0];
258
197
  if (userVersionInt && typeof userVersionInt === 'number' && userVersionInt < 10300) {
259
198
  return '1.2';
260
199
  }
261
200
  return null;
262
201
  }
263
202
  function getFeatureIdName(db, tableName) {
264
- var stmt = db.prepare("PRAGMA table_info(`".concat(tableName, "`)"));
203
+ const stmt = db.prepare("PRAGMA table_info(`".concat(tableName, "`)"));
265
204
  while (stmt.step()) {
266
- var pragmaTableInfo = stmt.getAsObject();
267
- var name = pragmaTableInfo.name,
268
- pk = pragmaTableInfo.pk;
205
+ const pragmaTableInfo = stmt.getAsObject();
206
+ const {
207
+ name,
208
+ pk
209
+ } = pragmaTableInfo;
269
210
  if (pk) {
270
211
  return name;
271
212
  }
@@ -273,38 +214,39 @@ function getFeatureIdName(db, tableName) {
273
214
  return null;
274
215
  }
275
216
  function parseGeometry(arrayBuffer) {
276
- var view = new DataView(arrayBuffer);
277
- var _parseGeometryBitFlag = parseGeometryBitFlags(view.getUint8(3)),
278
- envelopeLength = _parseGeometryBitFlag.envelopeLength,
279
- emptyGeometry = _parseGeometryBitFlag.emptyGeometry;
217
+ const view = new DataView(arrayBuffer);
218
+ const {
219
+ envelopeLength,
220
+ emptyGeometry
221
+ } = parseGeometryBitFlags(view.getUint8(3));
280
222
  if (emptyGeometry) {
281
223
  return null;
282
224
  }
283
- var wkbOffset = 8 + envelopeLength;
284
- var binaryGeometry = _wkt.WKBLoader.parseSync(arrayBuffer.slice(wkbOffset));
225
+ const wkbOffset = 8 + envelopeLength;
226
+ const binaryGeometry = _wkt.WKBLoader.parseSync(arrayBuffer.slice(wkbOffset));
285
227
  return (0, _gis.binaryToGeometry)(binaryGeometry);
286
228
  }
287
229
  function parseGeometryBitFlags(byte) {
288
- var envelopeValue = (byte & 14) / 2;
289
- var envelopeLength = ENVELOPE_BYTE_LENGTHS[envelopeValue];
230
+ const envelopeValue = (byte & 0b00001110) / 2;
231
+ const envelopeLength = ENVELOPE_BYTE_LENGTHS[envelopeValue];
290
232
  return {
291
- littleEndian: Boolean(byte & 1),
292
- envelopeLength: envelopeLength,
293
- emptyGeometry: Boolean(byte & 16),
294
- extendedGeometryType: Boolean(byte & 32)
233
+ littleEndian: Boolean(byte & 0b00000001),
234
+ envelopeLength,
235
+ emptyGeometry: Boolean(byte & 0b00010000),
236
+ extendedGeometryType: Boolean(byte & 0b00100000)
295
237
  };
296
238
  }
297
239
  function getGeometryColumn(db, tableName) {
298
- var stmt = db.prepare('SELECT * FROM gpkg_geometry_columns WHERE table_name=:tableName;');
240
+ const stmt = db.prepare('SELECT * FROM gpkg_geometry_columns WHERE table_name=:tableName;');
299
241
  stmt.bind({
300
242
  ':tableName': tableName
301
243
  });
302
244
  stmt.step();
303
- var geometryColumn = stmt.getAsObject();
245
+ const geometryColumn = stmt.getAsObject();
304
246
  return geometryColumn;
305
247
  }
306
248
  function getDataColumns(db, tableName) {
307
- var stmt;
249
+ let stmt;
308
250
  try {
309
251
  stmt = db.prepare('SELECT * FROM gpkg_data_columns WHERE table_name=:tableName;');
310
252
  } catch (error) {
@@ -316,42 +258,37 @@ function getDataColumns(db, tableName) {
316
258
  stmt.bind({
317
259
  ':tableName': tableName
318
260
  });
319
- var result = {};
261
+ const result = {};
320
262
  while (stmt.step()) {
321
- var column = stmt.getAsObject();
322
- var column_name = column.column_name,
323
- name = column.name;
263
+ const column = stmt.getAsObject();
264
+ const {
265
+ column_name,
266
+ name
267
+ } = column;
324
268
  result[column_name] = name || null;
325
269
  }
326
270
  return result;
327
271
  }
328
272
  function getArrowSchema(db, tableName) {
329
- var stmt = db.prepare("PRAGMA table_info(`".concat(tableName, "`)"));
330
- var fields = [];
273
+ const stmt = db.prepare("PRAGMA table_info(`".concat(tableName, "`)"));
274
+ const fields = [];
331
275
  while (stmt.step()) {
332
- var pragmaTableInfo = stmt.getAsObject();
333
- var name = pragmaTableInfo.name,
334
- type = pragmaTableInfo.type,
335
- notnull = pragmaTableInfo.notnull;
336
- var schemaType = SQL_TYPE_MAPPING[type] && new SQL_TYPE_MAPPING[type]();
337
- var field = new _schema.Field(name, schemaType, !notnull);
276
+ const pragmaTableInfo = stmt.getAsObject();
277
+ const {
278
+ name,
279
+ type,
280
+ notnull
281
+ } = pragmaTableInfo;
282
+ const schemaType = SQL_TYPE_MAPPING[type] && new SQL_TYPE_MAPPING[type]();
283
+ const field = new _schema.Field(name, schemaType, !notnull);
338
284
  fields.push(field);
339
285
  }
340
286
  return new _schema.Schema(fields);
341
287
  }
342
288
  function formatTablesAsGeojson(tables) {
343
- var geojsonMap = {};
344
- var _iterator2 = _createForOfIteratorHelper(tables.tables),
345
- _step2;
346
- try {
347
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
348
- var table = _step2.value;
349
- geojsonMap[table.name] = table.table.data;
350
- }
351
- } catch (err) {
352
- _iterator2.e(err);
353
- } finally {
354
- _iterator2.f();
289
+ const geojsonMap = {};
290
+ for (const table of tables.tables) {
291
+ geojsonMap[table.name] = table.table.data;
355
292
  }
356
293
  return geojsonMap;
357
294
  }
@@ -1 +1 @@
1
- {"version":3,"file":"parse-geopackage.js","names":["_sql","_interopRequireDefault","require","_wkt","_schema","_gis","_proj","_createForOfIteratorHelper","o","allowArrayLike","it","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","length","i","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","call","step","next","_e2","return","minLen","_arrayLikeToArray","Object","prototype","toString","slice","constructor","name","from","test","arr","len","arr2","DEFAULT_SQLJS_CDN","exports","ENVELOPE_BYTE_LENGTHS","SQL_TYPE_MAPPING","BOOLEAN","Bool","TINYINT","Int8","SMALLINT","Int16","MEDIUMINT","Int32","INT","INTEGER","FLOAT","Float32","DOUBLE","Float64","REAL","TEXT","Utf8","BLOB","Binary","DATE","DATETIME","GEOMETRY","POINT","LINESTRING","POLYGON","MULTIPOINT","MULTILINESTRING","MULTIPOLYGON","GEOMETRYCOLLECTION","parseGeoPackage","_x","_x2","_parseGeoPackage","apply","arguments","_asyncToGenerator2","default","_regenerator","mark","_callee","arrayBuffer","options","_ref2","_ref2$sqlJsCDN","sqlJsCDN","_ref3","_ref3$reproject","reproject","_ref3$_targetCrs","_targetCrs","_ref3$format","format","db","tables","projections","outputTables","_iterator3","_step3","table","tableName","wrap","_callee$","_context","prev","geopackage","gis","loadDatabase","sent","listVectorTables","getProjections","shape","table_name","push","getVectorTable","abrupt","formatTablesAsGeojson","stop","_x3","_x4","_loadDatabase","_callee2","SQL","_callee2$","_context2","initSqlJs","locateFile","file","concat","Database","Uint8Array","stmt","prepare","vectorTablesInfo","vectorTableInfo","getAsObject","_ref","dataColumns","getDataColumns","geomColumn","getGeometryColumn","featureIdColumn","getFeatureIdName","_db$exec$","exec","columns","values","projection","geomColumnProjStr","srs_id","Proj4Projection","to","geojsonFeatures","_iterator","_step","row","geojsonFeature","constructGeoJsonFeature","schema","getArrowSchema","data","transformGeoJsonCoords","project","projectionMapping","srsInfo","definition","idIdx","indexOf","id","geomColumnIdx","column_name","geometry","parseGeometry","buffer","properties","_i","_Object$entries","entries","_Object$entries$_i","_slicedToArray2","key","idx","columnName","type","getGeopackageVersion","textDecoder","TextDecoder","applicationIdQuery","applicationId","ArrayBuffer","view","DataView","setInt32","Number","versionString","decode","userVersionQuery","userVersionInt","pragmaTableInfo","pk","_parseGeometryBitFlag","parseGeometryBitFlags","getUint8","envelopeLength","emptyGeometry","wkbOffset","binaryGeometry","WKBLoader","parseSync","binaryToGeometry","byte","envelopeValue","littleEndian","Boolean","extendedGeometryType","bind","geometryColumn","error","message","includes","result","column","fields","notnull","schemaType","field","Field","Schema","geojsonMap","_iterator2","_step2"],"sources":["../../../src/lib/parse-geopackage.ts"],"sourcesContent":["/* eslint-disable camelcase, @typescript-eslint/no-use-before-define */\nimport type {GeoPackageLoaderOptions} from '../geopackage-loader';\nimport initSqlJs, {SqlJsStatic, Database, Statement} from 'sql.js';\nimport {WKBLoader} from '@loaders.gl/wkt';\nimport {\n Schema,\n Field,\n Geometry,\n DataType,\n Bool,\n Utf8,\n Float64,\n Int32,\n Int8,\n Int16,\n Float32,\n Binary,\n Tables,\n ObjectRowTable,\n Feature\n} from '@loaders.gl/schema';\nimport {binaryToGeometry, transformGeoJsonCoords} from '@loaders.gl/gis';\nimport {Proj4Projection} from '@math.gl/proj4';\nimport {\n GeometryColumnsRow,\n ContentsRow,\n SpatialRefSysRow,\n ProjectionMapping,\n GeometryBitFlags,\n DataColumnsRow,\n DataColumnsMapping,\n PragmaTableInfoRow,\n SQLiteTypes,\n GeoPackageGeometryTypes\n} from './types';\n\n// We pin to the same version as sql.js that we use.\n// As of March 2022, versions 1.6.0, 1.6.1, and 1.6.2 of sql.js appeared not to work.\nexport const DEFAULT_SQLJS_CDN = 'https://cdnjs.cloudflare.com/ajax/libs/sql.js/1.5.0/';\n\n// https://www.geopackage.org/spec121/#flags_layout\nconst ENVELOPE_BYTE_LENGTHS = {\n 0: 0,\n 1: 32,\n 2: 48,\n 3: 48,\n 4: 64,\n // values 5-7 are invalid and _should_ never show up\n 5: 0,\n 6: 0,\n 7: 0\n};\n\n// Documentation: https://www.geopackage.org/spec130/index.html#table_column_data_types\nconst SQL_TYPE_MAPPING: {[type in SQLiteTypes | GeoPackageGeometryTypes]: typeof DataType} = {\n BOOLEAN: Bool,\n TINYINT: Int8,\n SMALLINT: Int16,\n MEDIUMINT: Int32,\n INT: Int32,\n INTEGER: Int32,\n FLOAT: Float32,\n DOUBLE: Float64,\n REAL: Float64,\n TEXT: Utf8,\n BLOB: Binary,\n DATE: Utf8,\n DATETIME: Utf8,\n GEOMETRY: Binary,\n POINT: Binary,\n LINESTRING: Binary,\n POLYGON: Binary,\n MULTIPOINT: Binary,\n MULTILINESTRING: Binary,\n MULTIPOLYGON: Binary,\n GEOMETRYCOLLECTION: Binary\n};\n\nexport default async function parseGeoPackage(\n arrayBuffer: ArrayBuffer,\n options?: GeoPackageLoaderOptions\n): Promise<Tables<ObjectRowTable> | Record<string, Feature[]>> {\n const {sqlJsCDN = DEFAULT_SQLJS_CDN} = options?.geopackage || {};\n const {reproject = false, _targetCrs = 'WGS84', format = 'tables'} = options?.gis || {};\n\n const db = await loadDatabase(arrayBuffer, sqlJsCDN);\n const tables = listVectorTables(db);\n const projections = getProjections(db);\n\n // Mapping from tableName to geojson feature collection\n const outputTables: Tables<ObjectRowTable> = {\n shape: 'tables',\n tables: []\n };\n\n for (const table of tables) {\n const {table_name: tableName} = table;\n outputTables.tables.push({\n name: tableName,\n table: getVectorTable(db, tableName, projections, {\n reproject,\n _targetCrs\n })\n });\n }\n\n if (format === 'geojson') {\n return formatTablesAsGeojson(outputTables);\n }\n\n return outputTables;\n}\n\n/**\n * Initialize SQL.js and create database\n *\n * @param arrayBuffer input bytes\n * @return SQL.js database object\n */\nasync function loadDatabase(arrayBuffer: ArrayBuffer, sqlJsCDN: string | null): Promise<Database> {\n // In Node, `locateFile` must not be passed\n let SQL: SqlJsStatic;\n if (sqlJsCDN) {\n SQL = await initSqlJs({\n locateFile: (file) => `${sqlJsCDN}${file}`\n });\n } else {\n SQL = await initSqlJs();\n }\n return new SQL.Database(new Uint8Array(arrayBuffer));\n}\n\n/**\n * Find all vector tables in GeoPackage\n * This queries the `gpkg_contents` table to find a list of vector tables\n *\n * @param db GeoPackage to query\n * @return list of table references\n */\nfunction listVectorTables(db: Database): ContentsRow[] {\n // The gpkg_contents table can have at least three categorical values for\n // data_type.\n // - 'features' refers to a vector geometry table\n // (https://www.geopackage.org/spec121/#_contents_2)\n // - 'tiles' refers to a raster table\n // (https://www.geopackage.org/spec121/#_contents_3)\n // - 'attributes' refers to a data table with no geometry\n // (https://www.geopackage.org/spec121/#_contents_4).\n\n // We hard code 'features' because for now we don't support raster data or pure attribute data\n // eslint-disable-next-line quotes\n const stmt = db.prepare(\"SELECT * FROM gpkg_contents WHERE data_type='features';\");\n\n const vectorTablesInfo: ContentsRow[] = [];\n while (stmt.step()) {\n const vectorTableInfo = stmt.getAsObject() as unknown as ContentsRow;\n vectorTablesInfo.push(vectorTableInfo);\n }\n\n return vectorTablesInfo;\n}\n\n/**\n * Load geometries from vector table\n *\n * @param db GeoPackage object\n * @param tableName name of vector table to query\n * @param projections keys are srs_id values, values are WKT strings\n * @returns Array of GeoJSON Feature objects\n */\nfunction getVectorTable(\n db: Database,\n tableName: string,\n projections: ProjectionMapping,\n {reproject, _targetCrs}: {reproject: boolean; _targetCrs: string}\n): ObjectRowTable {\n const dataColumns = getDataColumns(db, tableName);\n const geomColumn = getGeometryColumn(db, tableName);\n const featureIdColumn = getFeatureIdName(db, tableName);\n\n // Get vector features from table\n // Don't think it's possible to parameterize the table name in SQLite?\n const {columns, values} = db.exec(`SELECT * FROM \\`${tableName}\\`;`)[0];\n\n let projection;\n if (reproject) {\n const geomColumnProjStr = projections[geomColumn.srs_id];\n projection = new Proj4Projection({\n from: geomColumnProjStr,\n to: _targetCrs\n });\n }\n\n const geojsonFeatures: object[] = [];\n for (const row of values) {\n const geojsonFeature = constructGeoJsonFeature(\n columns,\n row,\n geomColumn,\n // @ts-ignore\n dataColumns,\n featureIdColumn\n );\n geojsonFeatures.push(geojsonFeature);\n }\n\n const schema = getArrowSchema(db, tableName);\n if (projection) {\n return {\n data: transformGeoJsonCoords(geojsonFeatures, projection.project),\n schema,\n shape: 'object-row-table'\n };\n }\n\n return {data: geojsonFeatures, schema, shape: 'object-row-table'};\n}\n\n/**\n * Find all projections defined in GeoPackage\n * This queries the gpkg_spatial_ref_sys table\n * @param db GeoPackage object\n * @returns mapping from srid to WKT projection string\n */\nfunction getProjections(db: Database): ProjectionMapping {\n // Query gpkg_spatial_ref_sys to get srid: srtext mappings\n const stmt = db.prepare('SELECT * FROM gpkg_spatial_ref_sys;');\n\n const projectionMapping: ProjectionMapping = {};\n while (stmt.step()) {\n const srsInfo = stmt.getAsObject() as unknown as SpatialRefSysRow;\n const {srs_id, definition} = srsInfo;\n projectionMapping[srs_id] = definition;\n }\n\n return projectionMapping;\n}\n\n/**\n * Construct single GeoJSON feature given row's data\n * @param columns array of ordered column identifiers\n * @param row array of ordered values representing row's data\n * @param geomColumn geometry column metadata\n * @param dataColumns mapping from table column names to property name\n * @returns GeoJSON Feature object\n */\nfunction constructGeoJsonFeature(\n columns: string[],\n row: any[],\n geomColumn: GeometryColumnsRow,\n dataColumns: DataColumnsMapping,\n featureIdColumn: string\n): Feature<Geometry | null> {\n // Find feature id\n const idIdx = columns.indexOf(featureIdColumn);\n const id = row[idIdx];\n\n // Parse geometry columns to geojson\n const geomColumnIdx = columns.indexOf(geomColumn.column_name);\n const geometry = parseGeometry(row[geomColumnIdx].buffer);\n\n const properties = {};\n if (dataColumns) {\n for (const [key, value] of Object.entries(dataColumns)) {\n const idx = columns.indexOf(key);\n // @ts-ignore TODO - Check what happens if null?\n properties[value] = row[idx];\n }\n } else {\n // Put all columns except for the feature id and geometry in properties\n for (let i = 0; i < columns.length; i++) {\n if (i === idIdx || i === geomColumnIdx) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n const columnName = columns[i];\n properties[columnName] = row[i];\n }\n }\n\n return {\n id,\n type: 'Feature',\n geometry,\n properties\n };\n}\n\n/**\n * Get GeoPackage version from database\n * @param db database\n * @returns version string. One of '1.0', '1.1', '1.2'\n */\n\n// @ts-ignore\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction getGeopackageVersion(db: Database): string | null {\n const textDecoder = new TextDecoder();\n\n // Read application id from SQLite metadata\n const applicationIdQuery = db.exec('PRAGMA application_id;')[0];\n const applicationId = applicationIdQuery.values[0][0];\n\n // Convert 4-byte signed int32 application id to text\n const buffer = new ArrayBuffer(4);\n const view = new DataView(buffer);\n view.setInt32(0, Number(applicationId));\n const versionString = textDecoder.decode(buffer);\n\n if (versionString === 'GP10') {\n return '1.0';\n }\n\n if (versionString === 'GP11') {\n return '1.1';\n }\n\n // If versionString is GPKG, then read user_version\n const userVersionQuery = db.exec('PRAGMA user_version;')[0];\n const userVersionInt = userVersionQuery.values[0][0];\n\n if (userVersionInt && typeof userVersionInt === 'number' && userVersionInt < 10300) {\n return '1.2';\n }\n\n return null;\n}\n\n/**\n * Find name of feature id column in table\n * The feature ID is the primary key of the table.\n * http://www.geopackage.org/spec121/#feature_user_tables\n *\n * @param db database\n * @param tableName name of table\n * @return name of feature id column\n */\nfunction getFeatureIdName(db: Database, tableName: string): string | null {\n // Again, not possible to parameterize table name?\n const stmt = db.prepare(`PRAGMA table_info(\\`${tableName}\\`)`);\n\n while (stmt.step()) {\n const pragmaTableInfo = stmt.getAsObject() as unknown as PragmaTableInfoRow;\n const {name, pk} = pragmaTableInfo;\n if (pk) {\n return name;\n }\n }\n\n // Is it guaranteed for there always to be at least one primary key column in the table?\n return null;\n}\n\n/**\n * Parse geometry buffer\n * GeoPackage vector geometries are slightly extended past the WKB standard\n * See: https://www.geopackage.org/spec121/#gpb_format\n *\n * @param arrayBuffer geometry buffer\n * @return GeoJSON geometry (in original CRS)\n */\nfunction parseGeometry(arrayBuffer: ArrayBuffer): Geometry | null {\n const view = new DataView(arrayBuffer);\n const {envelopeLength, emptyGeometry} = parseGeometryBitFlags(view.getUint8(3));\n\n // A Feature object has a member with the name \"geometry\". The value of the\n // geometry member SHALL be either a Geometry object as defined above or, in\n // the case that the Feature is unlocated, a JSON null value.\n /** @see https://tools.ietf.org/html/rfc7946#section-3.2 */\n if (emptyGeometry) {\n return null;\n }\n\n // Do I need to find the srid here? Is it necessarily the same for every\n // geometry in a table?\n // const srid = view.getInt32(4, littleEndian);\n\n // 2 byte magic, 1 byte version, 1 byte flags, 4 byte int32 srid\n const wkbOffset = 8 + envelopeLength;\n\n // Loaders should not depend on `core` and the context passed to the main loader doesn't include a\n // `parseSync` option, so instead we call parseSync directly on WKBLoader\n const binaryGeometry = WKBLoader.parseSync(arrayBuffer.slice(wkbOffset));\n\n return binaryToGeometry(binaryGeometry);\n}\n\n/**\n * Parse geometry header flags\n * https://www.geopackage.org/spec121/#flags_layout\n *\n * @param byte uint8 number representing flags\n * @return object representing information from bit flags\n */\nfunction parseGeometryBitFlags(byte: number): GeometryBitFlags {\n // Are header values little endian?\n const envelopeValue = (byte & 0b00001110) / 2;\n\n // TODO: Not sure the best way to handle this. Throw an error if envelopeValue outside 0-7?\n const envelopeLength = ENVELOPE_BYTE_LENGTHS[envelopeValue] as number;\n\n return {\n littleEndian: Boolean(byte & 0b00000001),\n envelopeLength,\n emptyGeometry: Boolean(byte & 0b00010000),\n extendedGeometryType: Boolean(byte & 0b00100000)\n };\n}\n\n/**\n * Find geometry column in given vector table\n *\n * @param db GeoPackage object\n * @param tableName Name of vector table\n * @returns Array of geometry column definitions\n */\nfunction getGeometryColumn(db: Database, tableName: string): GeometryColumnsRow {\n const stmt = db.prepare('SELECT * FROM gpkg_geometry_columns WHERE table_name=:tableName;');\n stmt.bind({':tableName': tableName});\n\n // > Requirement 30\n // > A feature table SHALL have only one geometry column.\n // https://www.geopackage.org/spec121/#feature_user_tables\n // So we should need one and only one step, given that we use the WHERE clause in the SQL query\n // above\n stmt.step();\n const geometryColumn = stmt.getAsObject() as unknown as GeometryColumnsRow;\n return geometryColumn;\n}\n\n/**\n * Find property columns in given vector table\n * @param db GeoPackage object\n * @param tableName Name of vector table\n * @returns Mapping from table column names to property name\n */\nfunction getDataColumns(db: Database, tableName: string): DataColumnsMapping | null {\n // gpkg_data_columns is not required to exist\n // https://www.geopackage.org/spec121/#extension_schema\n let stmt: Statement;\n try {\n stmt = db.prepare('SELECT * FROM gpkg_data_columns WHERE table_name=:tableName;');\n } catch (error) {\n if ((error as Error).message.includes('no such table')) {\n return null;\n }\n\n throw error;\n }\n\n stmt.bind({':tableName': tableName});\n\n // Convert DataColumnsRow object this to a key-value {column_name: name}\n const result: DataColumnsMapping = {};\n while (stmt.step()) {\n const column = stmt.getAsObject() as unknown as DataColumnsRow;\n const {column_name, name} = column;\n result[column_name] = name || null;\n }\n\n return result;\n}\n\n/**\n * Get arrow schema\n * @param db GeoPackage object\n * @param tableName table name\n * @returns Arrow-like Schema\n */\nfunction getArrowSchema(db: Database, tableName: string): Schema {\n const stmt = db.prepare(`PRAGMA table_info(\\`${tableName}\\`)`);\n\n const fields: Field[] = [];\n while (stmt.step()) {\n const pragmaTableInfo = stmt.getAsObject() as unknown as PragmaTableInfoRow;\n const {name, type, notnull} = pragmaTableInfo;\n const schemaType = SQL_TYPE_MAPPING[type] && new SQL_TYPE_MAPPING[type]();\n const field = new Field(name, schemaType, !notnull);\n fields.push(field);\n }\n\n return new Schema(fields);\n}\n\nfunction formatTablesAsGeojson(tables: Tables<ObjectRowTable>): Record<string, Feature[]> {\n const geojsonMap = {};\n for (const table of tables.tables) {\n geojsonMap[table.name] = table.table.data;\n }\n\n return geojsonMap;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"parse-geopackage.js","names":["_sql","_interopRequireDefault","require","_wkt","_schema","_gis","_proj","DEFAULT_SQLJS_CDN","exports","ENVELOPE_BYTE_LENGTHS","SQL_TYPE_MAPPING","BOOLEAN","Bool","TINYINT","Int8","SMALLINT","Int16","MEDIUMINT","Int32","INT","INTEGER","FLOAT","Float32","DOUBLE","Float64","REAL","TEXT","Utf8","BLOB","Binary","DATE","DATETIME","GEOMETRY","POINT","LINESTRING","POLYGON","MULTIPOINT","MULTILINESTRING","MULTIPOLYGON","GEOMETRYCOLLECTION","parseGeoPackage","arrayBuffer","options","sqlJsCDN","geopackage","reproject","_targetCrs","format","gis","db","loadDatabase","tables","listVectorTables","projections","getProjections","outputTables","shape","table","table_name","tableName","push","name","getVectorTable","formatTablesAsGeojson","SQL","initSqlJs","locateFile","file","concat","Database","Uint8Array","stmt","prepare","vectorTablesInfo","step","vectorTableInfo","getAsObject","_ref","dataColumns","getDataColumns","geomColumn","getGeometryColumn","featureIdColumn","getFeatureIdName","columns","values","exec","projection","geomColumnProjStr","srs_id","Proj4Projection","from","to","geojsonFeatures","row","geojsonFeature","constructGeoJsonFeature","schema","getArrowSchema","data","transformGeoJsonCoords","project","projectionMapping","srsInfo","definition","idIdx","indexOf","id","geomColumnIdx","column_name","geometry","parseGeometry","buffer","properties","key","value","Object","entries","idx","i","length","columnName","type","getGeopackageVersion","textDecoder","TextDecoder","applicationIdQuery","applicationId","ArrayBuffer","view","DataView","setInt32","Number","versionString","decode","userVersionQuery","userVersionInt","pragmaTableInfo","pk","envelopeLength","emptyGeometry","parseGeometryBitFlags","getUint8","wkbOffset","binaryGeometry","WKBLoader","parseSync","slice","binaryToGeometry","byte","envelopeValue","littleEndian","Boolean","extendedGeometryType","bind","geometryColumn","error","message","includes","result","column","fields","notnull","schemaType","field","Field","Schema","geojsonMap"],"sources":["../../../src/lib/parse-geopackage.ts"],"sourcesContent":["/* eslint-disable camelcase, @typescript-eslint/no-use-before-define */\nimport type {GeoPackageLoaderOptions} from '../geopackage-loader';\nimport initSqlJs, {SqlJsStatic, Database, Statement} from 'sql.js';\nimport {WKBLoader} from '@loaders.gl/wkt';\nimport {\n Schema,\n Field,\n Geometry,\n DataType,\n Bool,\n Utf8,\n Float64,\n Int32,\n Int8,\n Int16,\n Float32,\n Binary,\n Tables,\n ObjectRowTable,\n Feature\n} from '@loaders.gl/schema';\nimport {binaryToGeometry, transformGeoJsonCoords} from '@loaders.gl/gis';\nimport {Proj4Projection} from '@math.gl/proj4';\nimport {\n GeometryColumnsRow,\n ContentsRow,\n SpatialRefSysRow,\n ProjectionMapping,\n GeometryBitFlags,\n DataColumnsRow,\n DataColumnsMapping,\n PragmaTableInfoRow,\n SQLiteTypes,\n GeoPackageGeometryTypes\n} from './types';\n\n// We pin to the same version as sql.js that we use.\n// As of March 2022, versions 1.6.0, 1.6.1, and 1.6.2 of sql.js appeared not to work.\nexport const DEFAULT_SQLJS_CDN = 'https://cdnjs.cloudflare.com/ajax/libs/sql.js/1.5.0/';\n\n// https://www.geopackage.org/spec121/#flags_layout\nconst ENVELOPE_BYTE_LENGTHS = {\n 0: 0,\n 1: 32,\n 2: 48,\n 3: 48,\n 4: 64,\n // values 5-7 are invalid and _should_ never show up\n 5: 0,\n 6: 0,\n 7: 0\n};\n\n// Documentation: https://www.geopackage.org/spec130/index.html#table_column_data_types\nconst SQL_TYPE_MAPPING: {[type in SQLiteTypes | GeoPackageGeometryTypes]: typeof DataType} = {\n BOOLEAN: Bool,\n TINYINT: Int8,\n SMALLINT: Int16,\n MEDIUMINT: Int32,\n INT: Int32,\n INTEGER: Int32,\n FLOAT: Float32,\n DOUBLE: Float64,\n REAL: Float64,\n TEXT: Utf8,\n BLOB: Binary,\n DATE: Utf8,\n DATETIME: Utf8,\n GEOMETRY: Binary,\n POINT: Binary,\n LINESTRING: Binary,\n POLYGON: Binary,\n MULTIPOINT: Binary,\n MULTILINESTRING: Binary,\n MULTIPOLYGON: Binary,\n GEOMETRYCOLLECTION: Binary\n};\n\nexport default async function parseGeoPackage(\n arrayBuffer: ArrayBuffer,\n options?: GeoPackageLoaderOptions\n): Promise<Tables<ObjectRowTable> | Record<string, Feature[]>> {\n const {sqlJsCDN = DEFAULT_SQLJS_CDN} = options?.geopackage || {};\n const {reproject = false, _targetCrs = 'WGS84', format = 'tables'} = options?.gis || {};\n\n const db = await loadDatabase(arrayBuffer, sqlJsCDN);\n const tables = listVectorTables(db);\n const projections = getProjections(db);\n\n // Mapping from tableName to geojson feature collection\n const outputTables: Tables<ObjectRowTable> = {\n shape: 'tables',\n tables: []\n };\n\n for (const table of tables) {\n const {table_name: tableName} = table;\n outputTables.tables.push({\n name: tableName,\n table: getVectorTable(db, tableName, projections, {\n reproject,\n _targetCrs\n })\n });\n }\n\n if (format === 'geojson') {\n return formatTablesAsGeojson(outputTables);\n }\n\n return outputTables;\n}\n\n/**\n * Initialize SQL.js and create database\n *\n * @param arrayBuffer input bytes\n * @return SQL.js database object\n */\nasync function loadDatabase(arrayBuffer: ArrayBuffer, sqlJsCDN: string | null): Promise<Database> {\n // In Node, `locateFile` must not be passed\n let SQL: SqlJsStatic;\n if (sqlJsCDN) {\n SQL = await initSqlJs({\n locateFile: (file) => `${sqlJsCDN}${file}`\n });\n } else {\n SQL = await initSqlJs();\n }\n return new SQL.Database(new Uint8Array(arrayBuffer));\n}\n\n/**\n * Find all vector tables in GeoPackage\n * This queries the `gpkg_contents` table to find a list of vector tables\n *\n * @param db GeoPackage to query\n * @return list of table references\n */\nfunction listVectorTables(db: Database): ContentsRow[] {\n // The gpkg_contents table can have at least three categorical values for\n // data_type.\n // - 'features' refers to a vector geometry table\n // (https://www.geopackage.org/spec121/#_contents_2)\n // - 'tiles' refers to a raster table\n // (https://www.geopackage.org/spec121/#_contents_3)\n // - 'attributes' refers to a data table with no geometry\n // (https://www.geopackage.org/spec121/#_contents_4).\n\n // We hard code 'features' because for now we don't support raster data or pure attribute data\n // eslint-disable-next-line quotes\n const stmt = db.prepare(\"SELECT * FROM gpkg_contents WHERE data_type='features';\");\n\n const vectorTablesInfo: ContentsRow[] = [];\n while (stmt.step()) {\n const vectorTableInfo = stmt.getAsObject() as unknown as ContentsRow;\n vectorTablesInfo.push(vectorTableInfo);\n }\n\n return vectorTablesInfo;\n}\n\n/**\n * Load geometries from vector table\n *\n * @param db GeoPackage object\n * @param tableName name of vector table to query\n * @param projections keys are srs_id values, values are WKT strings\n * @returns Array of GeoJSON Feature objects\n */\nfunction getVectorTable(\n db: Database,\n tableName: string,\n projections: ProjectionMapping,\n {reproject, _targetCrs}: {reproject: boolean; _targetCrs: string}\n): ObjectRowTable {\n const dataColumns = getDataColumns(db, tableName);\n const geomColumn = getGeometryColumn(db, tableName);\n const featureIdColumn = getFeatureIdName(db, tableName);\n\n // Get vector features from table\n // Don't think it's possible to parameterize the table name in SQLite?\n const {columns, values} = db.exec(`SELECT * FROM \\`${tableName}\\`;`)[0];\n\n let projection;\n if (reproject) {\n const geomColumnProjStr = projections[geomColumn.srs_id];\n projection = new Proj4Projection({\n from: geomColumnProjStr,\n to: _targetCrs\n });\n }\n\n const geojsonFeatures: object[] = [];\n for (const row of values) {\n const geojsonFeature = constructGeoJsonFeature(\n columns,\n row,\n geomColumn,\n // @ts-ignore\n dataColumns,\n featureIdColumn\n );\n geojsonFeatures.push(geojsonFeature);\n }\n\n const schema = getArrowSchema(db, tableName);\n if (projection) {\n return {\n data: transformGeoJsonCoords(geojsonFeatures, projection.project),\n schema,\n shape: 'object-row-table'\n };\n }\n\n return {data: geojsonFeatures, schema, shape: 'object-row-table'};\n}\n\n/**\n * Find all projections defined in GeoPackage\n * This queries the gpkg_spatial_ref_sys table\n * @param db GeoPackage object\n * @returns mapping from srid to WKT projection string\n */\nfunction getProjections(db: Database): ProjectionMapping {\n // Query gpkg_spatial_ref_sys to get srid: srtext mappings\n const stmt = db.prepare('SELECT * FROM gpkg_spatial_ref_sys;');\n\n const projectionMapping: ProjectionMapping = {};\n while (stmt.step()) {\n const srsInfo = stmt.getAsObject() as unknown as SpatialRefSysRow;\n const {srs_id, definition} = srsInfo;\n projectionMapping[srs_id] = definition;\n }\n\n return projectionMapping;\n}\n\n/**\n * Construct single GeoJSON feature given row's data\n * @param columns array of ordered column identifiers\n * @param row array of ordered values representing row's data\n * @param geomColumn geometry column metadata\n * @param dataColumns mapping from table column names to property name\n * @returns GeoJSON Feature object\n */\nfunction constructGeoJsonFeature(\n columns: string[],\n row: any[],\n geomColumn: GeometryColumnsRow,\n dataColumns: DataColumnsMapping,\n featureIdColumn: string\n): Feature<Geometry | null> {\n // Find feature id\n const idIdx = columns.indexOf(featureIdColumn);\n const id = row[idIdx];\n\n // Parse geometry columns to geojson\n const geomColumnIdx = columns.indexOf(geomColumn.column_name);\n const geometry = parseGeometry(row[geomColumnIdx].buffer);\n\n const properties = {};\n if (dataColumns) {\n for (const [key, value] of Object.entries(dataColumns)) {\n const idx = columns.indexOf(key);\n // @ts-ignore TODO - Check what happens if null?\n properties[value] = row[idx];\n }\n } else {\n // Put all columns except for the feature id and geometry in properties\n for (let i = 0; i < columns.length; i++) {\n if (i === idIdx || i === geomColumnIdx) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n const columnName = columns[i];\n properties[columnName] = row[i];\n }\n }\n\n return {\n id,\n type: 'Feature',\n geometry,\n properties\n };\n}\n\n/**\n * Get GeoPackage version from database\n * @param db database\n * @returns version string. One of '1.0', '1.1', '1.2'\n */\n\n// @ts-ignore\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction getGeopackageVersion(db: Database): string | null {\n const textDecoder = new TextDecoder();\n\n // Read application id from SQLite metadata\n const applicationIdQuery = db.exec('PRAGMA application_id;')[0];\n const applicationId = applicationIdQuery.values[0][0];\n\n // Convert 4-byte signed int32 application id to text\n const buffer = new ArrayBuffer(4);\n const view = new DataView(buffer);\n view.setInt32(0, Number(applicationId));\n const versionString = textDecoder.decode(buffer);\n\n if (versionString === 'GP10') {\n return '1.0';\n }\n\n if (versionString === 'GP11') {\n return '1.1';\n }\n\n // If versionString is GPKG, then read user_version\n const userVersionQuery = db.exec('PRAGMA user_version;')[0];\n const userVersionInt = userVersionQuery.values[0][0];\n\n if (userVersionInt && typeof userVersionInt === 'number' && userVersionInt < 10300) {\n return '1.2';\n }\n\n return null;\n}\n\n/**\n * Find name of feature id column in table\n * The feature ID is the primary key of the table.\n * http://www.geopackage.org/spec121/#feature_user_tables\n *\n * @param db database\n * @param tableName name of table\n * @return name of feature id column\n */\nfunction getFeatureIdName(db: Database, tableName: string): string | null {\n // Again, not possible to parameterize table name?\n const stmt = db.prepare(`PRAGMA table_info(\\`${tableName}\\`)`);\n\n while (stmt.step()) {\n const pragmaTableInfo = stmt.getAsObject() as unknown as PragmaTableInfoRow;\n const {name, pk} = pragmaTableInfo;\n if (pk) {\n return name;\n }\n }\n\n // Is it guaranteed for there always to be at least one primary key column in the table?\n return null;\n}\n\n/**\n * Parse geometry buffer\n * GeoPackage vector geometries are slightly extended past the WKB standard\n * See: https://www.geopackage.org/spec121/#gpb_format\n *\n * @param arrayBuffer geometry buffer\n * @return GeoJSON geometry (in original CRS)\n */\nfunction parseGeometry(arrayBuffer: ArrayBuffer): Geometry | null {\n const view = new DataView(arrayBuffer);\n const {envelopeLength, emptyGeometry} = parseGeometryBitFlags(view.getUint8(3));\n\n // A Feature object has a member with the name \"geometry\". The value of the\n // geometry member SHALL be either a Geometry object as defined above or, in\n // the case that the Feature is unlocated, a JSON null value.\n /** @see https://tools.ietf.org/html/rfc7946#section-3.2 */\n if (emptyGeometry) {\n return null;\n }\n\n // Do I need to find the srid here? Is it necessarily the same for every\n // geometry in a table?\n // const srid = view.getInt32(4, littleEndian);\n\n // 2 byte magic, 1 byte version, 1 byte flags, 4 byte int32 srid\n const wkbOffset = 8 + envelopeLength;\n\n // Loaders should not depend on `core` and the context passed to the main loader doesn't include a\n // `parseSync` option, so instead we call parseSync directly on WKBLoader\n const binaryGeometry = WKBLoader.parseSync(arrayBuffer.slice(wkbOffset));\n\n return binaryToGeometry(binaryGeometry);\n}\n\n/**\n * Parse geometry header flags\n * https://www.geopackage.org/spec121/#flags_layout\n *\n * @param byte uint8 number representing flags\n * @return object representing information from bit flags\n */\nfunction parseGeometryBitFlags(byte: number): GeometryBitFlags {\n // Are header values little endian?\n const envelopeValue = (byte & 0b00001110) / 2;\n\n // TODO: Not sure the best way to handle this. Throw an error if envelopeValue outside 0-7?\n const envelopeLength = ENVELOPE_BYTE_LENGTHS[envelopeValue] as number;\n\n return {\n littleEndian: Boolean(byte & 0b00000001),\n envelopeLength,\n emptyGeometry: Boolean(byte & 0b00010000),\n extendedGeometryType: Boolean(byte & 0b00100000)\n };\n}\n\n/**\n * Find geometry column in given vector table\n *\n * @param db GeoPackage object\n * @param tableName Name of vector table\n * @returns Array of geometry column definitions\n */\nfunction getGeometryColumn(db: Database, tableName: string): GeometryColumnsRow {\n const stmt = db.prepare('SELECT * FROM gpkg_geometry_columns WHERE table_name=:tableName;');\n stmt.bind({':tableName': tableName});\n\n // > Requirement 30\n // > A feature table SHALL have only one geometry column.\n // https://www.geopackage.org/spec121/#feature_user_tables\n // So we should need one and only one step, given that we use the WHERE clause in the SQL query\n // above\n stmt.step();\n const geometryColumn = stmt.getAsObject() as unknown as GeometryColumnsRow;\n return geometryColumn;\n}\n\n/**\n * Find property columns in given vector table\n * @param db GeoPackage object\n * @param tableName Name of vector table\n * @returns Mapping from table column names to property name\n */\nfunction getDataColumns(db: Database, tableName: string): DataColumnsMapping | null {\n // gpkg_data_columns is not required to exist\n // https://www.geopackage.org/spec121/#extension_schema\n let stmt: Statement;\n try {\n stmt = db.prepare('SELECT * FROM gpkg_data_columns WHERE table_name=:tableName;');\n } catch (error) {\n if ((error as Error).message.includes('no such table')) {\n return null;\n }\n\n throw error;\n }\n\n stmt.bind({':tableName': tableName});\n\n // Convert DataColumnsRow object this to a key-value {column_name: name}\n const result: DataColumnsMapping = {};\n while (stmt.step()) {\n const column = stmt.getAsObject() as unknown as DataColumnsRow;\n const {column_name, name} = column;\n result[column_name] = name || null;\n }\n\n return result;\n}\n\n/**\n * Get arrow schema\n * @param db GeoPackage object\n * @param tableName table name\n * @returns Arrow-like Schema\n */\nfunction getArrowSchema(db: Database, tableName: string): Schema {\n const stmt = db.prepare(`PRAGMA table_info(\\`${tableName}\\`)`);\n\n const fields: Field[] = [];\n while (stmt.step()) {\n const pragmaTableInfo = stmt.getAsObject() as unknown as PragmaTableInfoRow;\n const {name, type, notnull} = pragmaTableInfo;\n const schemaType = SQL_TYPE_MAPPING[type] && new SQL_TYPE_MAPPING[type]();\n const field = new Field(name, schemaType, !notnull);\n fields.push(field);\n }\n\n return new Schema(fields);\n}\n\nfunction formatTablesAsGeojson(tables: Tables<ObjectRowTable>): Record<string, Feature[]> {\n const geojsonMap = {};\n for (const table of tables.tables) {\n geojsonMap[table.name] = table.table.data;\n }\n\n return geojsonMap;\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@loaders.gl/geopackage",
3
3
  "description": "GeoPackage data loaders",
4
- "version": "3.4.13",
4
+ "version": "3.4.15",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
7
7
  "access": "public"
@@ -25,12 +25,12 @@
25
25
  ],
26
26
  "dependencies": {
27
27
  "@babel/runtime": "^7.3.1",
28
- "@loaders.gl/gis": "3.4.13",
29
- "@loaders.gl/schema": "3.4.13",
30
- "@loaders.gl/wkt": "3.4.13",
28
+ "@loaders.gl/gis": "3.4.15",
29
+ "@loaders.gl/schema": "3.4.15",
30
+ "@loaders.gl/wkt": "3.4.15",
31
31
  "@math.gl/proj4": "^3.5.1",
32
32
  "@types/sql.js": "^1.4.2",
33
33
  "sql.js": "1.5.0"
34
34
  },
35
- "gitHead": "be8849c02972ce541e01720d29b976f830d6af92"
35
+ "gitHead": "19e941d5805568e449ef9092490d6568a4853298"
36
36
  }