@loaders.gl/geopackage 3.1.0-beta.3 → 3.1.1

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
- const moduleExports = require('./index');
3
+ var moduleExports = require('./index');
4
4
 
5
5
  globalThis.loaders = globalThis.loaders || {};
6
6
  module.exports = Object.assign(globalThis.loaders, moduleExports);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/bundle.ts"],"names":["moduleExports","require","globalThis","loaders","module","exports","Object","assign"],"mappings":";;AACA,MAAMA,aAAa,GAAGC,OAAO,CAAC,SAAD,CAA7B;;AACAC,UAAU,CAACC,OAAX,GAAqBD,UAAU,CAACC,OAAX,IAAsB,EAA3C;AACAC,MAAM,CAACC,OAAP,GAAiBC,MAAM,CAACC,MAAP,CAAcL,UAAU,CAACC,OAAzB,EAAkCH,aAAlC,CAAjB","sourcesContent":["// @ts-nocheck\nconst moduleExports = require('./index');\nglobalThis.loaders = globalThis.loaders || {};\nmodule.exports = Object.assign(globalThis.loaders, moduleExports);\n"],"file":"bundle.js"}
1
+ {"version":3,"sources":["../../src/bundle.ts"],"names":["moduleExports","require","globalThis","loaders","module","exports","Object","assign"],"mappings":";;AACA,IAAMA,aAAa,GAAGC,OAAO,CAAC,SAAD,CAA7B;;AACAC,UAAU,CAACC,OAAX,GAAqBD,UAAU,CAACC,OAAX,IAAsB,EAA3C;AACAC,MAAM,CAACC,OAAP,GAAiBC,MAAM,CAACC,MAAP,CAAcL,UAAU,CAACC,OAAzB,EAAkCH,aAAlC,CAAjB","sourcesContent":["// @ts-nocheck\nconst moduleExports = require('./index');\nglobalThis.loaders = globalThis.loaders || {};\nmodule.exports = Object.assign(globalThis.loaders, moduleExports);\n"],"file":"bundle.js"}
@@ -9,8 +9,8 @@ exports.GeoPackageLoader = void 0;
9
9
 
10
10
  var _parseGeopackage = _interopRequireDefault(require("./lib/parse-geopackage"));
11
11
 
12
- const VERSION = 'latest';
13
- const GeoPackageLoader = {
12
+ var VERSION = 'latest';
13
+ var GeoPackageLoader = {
14
14
  id: 'geopackage',
15
15
  name: 'GeoPackage',
16
16
  module: 'geopackage',
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/geopackage-loader.ts"],"names":["VERSION","GeoPackageLoader","id","name","module","version","extensions","mimeTypes","category","parse","parseGeoPackage","options","geopackage","sqlJsCDN"],"mappings":";;;;;;;;;AACA;;AAKA,MAAMA,OAAO,GAAG,QAAhB;AAcO,MAAMC,gBAAkC,GAAG;AAChDC,EAAAA,EAAE,EAAE,YAD4C;AAEhDC,EAAAA,IAAI,EAAE,YAF0C;AAGhDC,EAAAA,MAAM,EAAE,YAHwC;AAIhDC,EAAAA,OAAO,EAAEL,OAJuC;AAKhDM,EAAAA,UAAU,EAAE,CAAC,MAAD,CALoC;AAMhDC,EAAAA,SAAS,EAAE,CAAC,gCAAD,CANqC;AAOhDC,EAAAA,QAAQ,EAAE,UAPsC;AAQhDC,EAAAA,KAAK,EAAEC,wBARyC;AAShDC,EAAAA,OAAO,EAAE;AACPC,IAAAA,UAAU,EAAE;AACVC,MAAAA,QAAQ,EAAE;AADA;AADL;AATuC,CAA3C","sourcesContent":["import type {LoaderWithParser, LoaderOptions} from '@loaders.gl/loader-utils';\nimport parseGeoPackage 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 };\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: 'https://sql.js.org/dist/'\n }\n }\n};\n"],"file":"geopackage-loader.js"}
1
+ {"version":3,"sources":["../../src/geopackage-loader.ts"],"names":["VERSION","GeoPackageLoader","id","name","module","version","extensions","mimeTypes","category","parse","parseGeoPackage","options","geopackage","sqlJsCDN"],"mappings":";;;;;;;;;AACA;;AAKA,IAAMA,OAAO,GAAG,QAAhB;AAcO,IAAMC,gBAAkC,GAAG;AAChDC,EAAAA,EAAE,EAAE,YAD4C;AAEhDC,EAAAA,IAAI,EAAE,YAF0C;AAGhDC,EAAAA,MAAM,EAAE,YAHwC;AAIhDC,EAAAA,OAAO,EAAEL,OAJuC;AAKhDM,EAAAA,UAAU,EAAE,CAAC,MAAD,CALoC;AAMhDC,EAAAA,SAAS,EAAE,CAAC,gCAAD,CANqC;AAOhDC,EAAAA,QAAQ,EAAE,UAPsC;AAQhDC,EAAAA,KAAK,EAAEC,wBARyC;AAShDC,EAAAA,OAAO,EAAE;AACPC,IAAAA,UAAU,EAAE;AACVC,MAAAA,QAAQ,EAAE;AADA;AADL;AATuC,CAA3C","sourcesContent":["import type {LoaderWithParser, LoaderOptions} from '@loaders.gl/loader-utils';\nimport parseGeoPackage 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 };\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: 'https://sql.js.org/dist/'\n }\n }\n};\n"],"file":"geopackage-loader.js"}
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 () {
8
+ get: function get() {
9
9
  return _geopackageLoader.GeoPackageLoader;
10
10
  }
11
11
  });
@@ -7,6 +7,12 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.default = parseGeoPackage;
9
9
 
10
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
+
12
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
+
14
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
15
+
10
16
  var _sql = _interopRequireDefault(require("sql.js"));
11
17
 
12
18
  var _wkt = require("@loaders.gl/wkt");
@@ -17,7 +23,13 @@ var _gis = require("@loaders.gl/gis");
17
23
 
18
24
  var _proj = require("@math.gl/proj4");
19
25
 
20
- const ENVELOPE_BYTE_LENGTHS = {
26
+ 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; } } }; }
27
+
28
+ 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); }
29
+
30
+ 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; }
31
+
32
+ var ENVELOPE_BYTE_LENGTHS = {
21
33
  0: 0,
22
34
  1: 32,
23
35
  2: 48,
@@ -27,7 +39,7 @@ const ENVELOPE_BYTE_LENGTHS = {
27
39
  6: 0,
28
40
  7: 0
29
41
  };
30
- const SQL_TYPE_MAPPING = {
42
+ var SQL_TYPE_MAPPING = {
31
43
  BOOLEAN: _schema.Bool,
32
44
  TINYINT: _schema.Int8,
33
45
  SMALLINT: _schema.Int16,
@@ -44,111 +56,176 @@ const SQL_TYPE_MAPPING = {
44
56
  GEOMETRY: _schema.Binary
45
57
  };
46
58
 
47
- async function parseGeoPackage(arrayBuffer, options) {
48
- const {
49
- sqlJsCDN = 'https://sql.js.org/dist/'
50
- } = (options === null || options === void 0 ? void 0 : options.geopackage) || {};
51
- const {
52
- reproject = false,
53
- _targetCrs = 'WGS84'
54
- } = (options === null || options === void 0 ? void 0 : options.gis) || {};
55
- const db = await loadDatabase(arrayBuffer, sqlJsCDN);
56
- const tables = listVectorTables(db);
57
- const projections = getProjections(db);
58
- const result = {};
59
-
60
- for (const table of tables) {
61
- const {
62
- table_name: tableName
63
- } = table;
64
- result[tableName] = getVectorTable(db, tableName, projections, {
65
- reproject,
66
- _targetCrs
67
- });
68
- }
69
-
70
- return result;
59
+ function parseGeoPackage(_x, _x2) {
60
+ return _parseGeoPackage.apply(this, arguments);
71
61
  }
72
62
 
73
- async function loadDatabase(arrayBuffer, sqlJsCDN) {
74
- let SQL;
63
+ function _parseGeoPackage() {
64
+ _parseGeoPackage = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(arrayBuffer, options) {
65
+ var _ref2, _ref2$sqlJsCDN, sqlJsCDN, _ref3, _ref3$reproject, reproject, _ref3$_targetCrs, _targetCrs, db, tables, projections, result, _iterator2, _step2, table, tableName;
66
+
67
+ return _regenerator.default.wrap(function _callee$(_context) {
68
+ while (1) {
69
+ switch (_context.prev = _context.next) {
70
+ case 0:
71
+ _ref2 = (options === null || options === void 0 ? void 0 : options.geopackage) || {}, _ref2$sqlJsCDN = _ref2.sqlJsCDN, sqlJsCDN = _ref2$sqlJsCDN === void 0 ? 'https://sql.js.org/dist/' : _ref2$sqlJsCDN;
72
+ _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;
73
+ _context.next = 4;
74
+ return loadDatabase(arrayBuffer, sqlJsCDN);
75
+
76
+ case 4:
77
+ db = _context.sent;
78
+ tables = listVectorTables(db);
79
+ projections = getProjections(db);
80
+ result = {};
81
+ _iterator2 = _createForOfIteratorHelper(tables);
82
+
83
+ try {
84
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
85
+ table = _step2.value;
86
+ tableName = table.table_name;
87
+ result[tableName] = getVectorTable(db, tableName, projections, {
88
+ reproject: reproject,
89
+ _targetCrs: _targetCrs
90
+ });
91
+ }
92
+ } catch (err) {
93
+ _iterator2.e(err);
94
+ } finally {
95
+ _iterator2.f();
96
+ }
97
+
98
+ return _context.abrupt("return", result);
99
+
100
+ case 11:
101
+ case "end":
102
+ return _context.stop();
103
+ }
104
+ }
105
+ }, _callee);
106
+ }));
107
+ return _parseGeoPackage.apply(this, arguments);
108
+ }
75
109
 
76
- if (sqlJsCDN) {
77
- SQL = await (0, _sql.default)({
78
- locateFile: file => "".concat(sqlJsCDN).concat(file)
79
- });
80
- } else {
81
- SQL = await (0, _sql.default)();
82
- }
110
+ function loadDatabase(_x3, _x4) {
111
+ return _loadDatabase.apply(this, arguments);
112
+ }
83
113
 
84
- return new SQL.Database(new Uint8Array(arrayBuffer));
114
+ function _loadDatabase() {
115
+ _loadDatabase = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee2(arrayBuffer, sqlJsCDN) {
116
+ var SQL;
117
+ return _regenerator.default.wrap(function _callee2$(_context2) {
118
+ while (1) {
119
+ switch (_context2.prev = _context2.next) {
120
+ case 0:
121
+ if (!sqlJsCDN) {
122
+ _context2.next = 6;
123
+ break;
124
+ }
125
+
126
+ _context2.next = 3;
127
+ return (0, _sql.default)({
128
+ locateFile: function locateFile(file) {
129
+ return "".concat(sqlJsCDN).concat(file);
130
+ }
131
+ });
132
+
133
+ case 3:
134
+ SQL = _context2.sent;
135
+ _context2.next = 9;
136
+ break;
137
+
138
+ case 6:
139
+ _context2.next = 8;
140
+ return (0, _sql.default)();
141
+
142
+ case 8:
143
+ SQL = _context2.sent;
144
+
145
+ case 9:
146
+ return _context2.abrupt("return", new SQL.Database(new Uint8Array(arrayBuffer)));
147
+
148
+ case 10:
149
+ case "end":
150
+ return _context2.stop();
151
+ }
152
+ }
153
+ }, _callee2);
154
+ }));
155
+ return _loadDatabase.apply(this, arguments);
85
156
  }
86
157
 
87
158
  function listVectorTables(db) {
88
- const stmt = db.prepare("SELECT * FROM gpkg_contents WHERE data_type='features';");
89
- const vectorTablesInfo = [];
159
+ var stmt = db.prepare("SELECT * FROM gpkg_contents WHERE data_type='features';");
160
+ var vectorTablesInfo = [];
90
161
 
91
162
  while (stmt.step()) {
92
- const vectorTableInfo = stmt.getAsObject();
163
+ var vectorTableInfo = stmt.getAsObject();
93
164
  vectorTablesInfo.push(vectorTableInfo);
94
165
  }
95
166
 
96
167
  return vectorTablesInfo;
97
168
  }
98
169
 
99
- function getVectorTable(db, tableName, projections, {
100
- reproject,
101
- _targetCrs
102
- }) {
103
- const dataColumns = getDataColumns(db, tableName);
104
- const geomColumn = getGeometryColumn(db, tableName);
105
- const featureIdColumn = getFeatureIdName(db, tableName);
106
- const {
107
- columns,
108
- values
109
- } = db.exec("SELECT * FROM `".concat(tableName, "`;"))[0];
110
- let projection;
170
+ function getVectorTable(db, tableName, projections, _ref) {
171
+ var reproject = _ref.reproject,
172
+ _targetCrs = _ref._targetCrs;
173
+ var dataColumns = getDataColumns(db, tableName);
174
+ var geomColumn = getGeometryColumn(db, tableName);
175
+ var featureIdColumn = getFeatureIdName(db, tableName);
176
+ var _db$exec$ = db.exec("SELECT * FROM `".concat(tableName, "`;"))[0],
177
+ columns = _db$exec$.columns,
178
+ values = _db$exec$.values;
179
+ var projection;
111
180
 
112
181
  if (reproject) {
113
- const geomColumnProjStr = projections[geomColumn.srs_id];
182
+ var geomColumnProjStr = projections[geomColumn.srs_id];
114
183
  projection = new _proj.Proj4Projection({
115
184
  from: geomColumnProjStr,
116
185
  to: _targetCrs
117
186
  });
118
187
  }
119
188
 
120
- const geojsonFeatures = [];
189
+ var geojsonFeatures = [];
121
190
 
122
- for (const row of values) {
123
- const geojsonFeature = constructGeoJsonFeature(columns, row, geomColumn, dataColumns, featureIdColumn);
124
- geojsonFeatures.push(geojsonFeature);
191
+ var _iterator = _createForOfIteratorHelper(values),
192
+ _step;
193
+
194
+ try {
195
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
196
+ var row = _step.value;
197
+ var geojsonFeature = constructGeoJsonFeature(columns, row, geomColumn, dataColumns, featureIdColumn);
198
+ geojsonFeatures.push(geojsonFeature);
199
+ }
200
+ } catch (err) {
201
+ _iterator.e(err);
202
+ } finally {
203
+ _iterator.f();
125
204
  }
126
205
 
127
- const schema = getArrowSchema(db, tableName);
206
+ var schema = getArrowSchema(db, tableName);
128
207
 
129
208
  if (projection) {
130
209
  return {
131
210
  geojsonFeatures: (0, _gis.transformGeoJsonCoords)(geojsonFeatures, projection.project),
132
- schema
211
+ schema: schema
133
212
  };
134
213
  }
135
214
 
136
215
  return {
137
- geojsonFeatures,
138
- schema
216
+ geojsonFeatures: geojsonFeatures,
217
+ schema: schema
139
218
  };
140
219
  }
141
220
 
142
221
  function getProjections(db) {
143
- const stmt = db.prepare('SELECT * FROM gpkg_spatial_ref_sys;');
144
- const projectionMapping = {};
222
+ var stmt = db.prepare('SELECT * FROM gpkg_spatial_ref_sys;');
223
+ var projectionMapping = {};
145
224
 
146
225
  while (stmt.step()) {
147
- const srsInfo = stmt.getAsObject();
148
- const {
149
- srs_id,
150
- definition
151
- } = srsInfo;
226
+ var srsInfo = stmt.getAsObject();
227
+ var srs_id = srsInfo.srs_id,
228
+ definition = srsInfo.definition;
152
229
  projectionMapping[srs_id] = definition;
153
230
  }
154
231
 
@@ -156,44 +233,48 @@ function getProjections(db) {
156
233
  }
157
234
 
158
235
  function constructGeoJsonFeature(columns, row, geomColumn, dataColumns, featureIdColumn) {
159
- const idIdx = columns.indexOf(featureIdColumn);
160
- const id = row[idIdx];
161
- const geomColumnIdx = columns.indexOf(geomColumn.column_name);
162
- const geometry = parseGeometry(row[geomColumnIdx].buffer);
163
- const properties = {};
236
+ var idIdx = columns.indexOf(featureIdColumn);
237
+ var id = row[idIdx];
238
+ var geomColumnIdx = columns.indexOf(geomColumn.column_name);
239
+ var geometry = parseGeometry(row[geomColumnIdx].buffer);
240
+ var properties = {};
164
241
 
165
242
  if (dataColumns) {
166
- for (const [key, value] of Object.entries(dataColumns)) {
167
- const idx = columns.indexOf(key);
243
+ for (var _i = 0, _Object$entries = Object.entries(dataColumns); _i < _Object$entries.length; _i++) {
244
+ var _Object$entries$_i = (0, _slicedToArray2.default)(_Object$entries[_i], 2),
245
+ key = _Object$entries$_i[0],
246
+ value = _Object$entries$_i[1];
247
+
248
+ var idx = columns.indexOf(key);
168
249
  properties[value] = row[idx];
169
250
  }
170
251
  } else {
171
- for (let i = 0; i < columns.length; i++) {
252
+ for (var i = 0; i < columns.length; i++) {
172
253
  if (i === idIdx || i === geomColumnIdx) {
173
254
  continue;
174
255
  }
175
256
 
176
- const columnName = columns[i];
257
+ var columnName = columns[i];
177
258
  properties[columnName] = row[i];
178
259
  }
179
260
  }
180
261
 
181
262
  return {
182
- id,
263
+ id: id,
183
264
  type: 'Feature',
184
- geometry,
185
- properties
265
+ geometry: geometry,
266
+ properties: properties
186
267
  };
187
268
  }
188
269
 
189
270
  function getGeopackageVersion(db) {
190
- const textDecoder = new TextDecoder();
191
- const applicationIdQuery = db.exec('PRAGMA application_id;')[0];
192
- const applicationId = applicationIdQuery.values[0][0];
193
- const buffer = new ArrayBuffer(4);
194
- const view = new DataView(buffer);
271
+ var textDecoder = new TextDecoder();
272
+ var applicationIdQuery = db.exec('PRAGMA application_id;')[0];
273
+ var applicationId = applicationIdQuery.values[0][0];
274
+ var buffer = new ArrayBuffer(4);
275
+ var view = new DataView(buffer);
195
276
  view.setInt32(0, Number(applicationId));
196
- const versionString = textDecoder.decode(buffer);
277
+ var versionString = textDecoder.decode(buffer);
197
278
 
198
279
  if (versionString === 'GP10') {
199
280
  return '1.0';
@@ -203,8 +284,8 @@ function getGeopackageVersion(db) {
203
284
  return '1.1';
204
285
  }
205
286
 
206
- const userVersionQuery = db.exec('PRAGMA user_version;')[0];
207
- const userVersionInt = userVersionQuery.values[0][0];
287
+ var userVersionQuery = db.exec('PRAGMA user_version;')[0];
288
+ var userVersionInt = userVersionQuery.values[0][0];
208
289
 
209
290
  if (userVersionInt && userVersionInt < 10300) {
210
291
  return '1.2';
@@ -214,14 +295,12 @@ function getGeopackageVersion(db) {
214
295
  }
215
296
 
216
297
  function getFeatureIdName(db, tableName) {
217
- const stmt = db.prepare("PRAGMA table_info(`".concat(tableName, "`)"));
298
+ var stmt = db.prepare("PRAGMA table_info(`".concat(tableName, "`)"));
218
299
 
219
300
  while (stmt.step()) {
220
- const pragmaTableInfo = stmt.getAsObject();
221
- const {
222
- name,
223
- pk
224
- } = pragmaTableInfo;
301
+ var pragmaTableInfo = stmt.getAsObject();
302
+ var name = pragmaTableInfo.name,
303
+ pk = pragmaTableInfo.pk;
225
304
 
226
305
  if (pk) {
227
306
  return name;
@@ -232,46 +311,46 @@ function getFeatureIdName(db, tableName) {
232
311
  }
233
312
 
234
313
  function parseGeometry(arrayBuffer) {
235
- const view = new DataView(arrayBuffer);
236
- const {
237
- envelopeLength,
238
- emptyGeometry
239
- } = parseGeometryBitFlags(view.getUint8(3));
314
+ var view = new DataView(arrayBuffer);
315
+
316
+ var _parseGeometryBitFlag = parseGeometryBitFlags(view.getUint8(3)),
317
+ envelopeLength = _parseGeometryBitFlag.envelopeLength,
318
+ emptyGeometry = _parseGeometryBitFlag.emptyGeometry;
240
319
 
241
320
  if (emptyGeometry) {
242
321
  return null;
243
322
  }
244
323
 
245
- const wkbOffset = 8 + envelopeLength;
324
+ var wkbOffset = 8 + envelopeLength;
246
325
 
247
- const binaryGeometry = _wkt.WKBLoader.parseSync(arrayBuffer.slice(wkbOffset));
326
+ var binaryGeometry = _wkt.WKBLoader.parseSync(arrayBuffer.slice(wkbOffset));
248
327
 
249
328
  return (0, _gis.binaryToGeometry)(binaryGeometry);
250
329
  }
251
330
 
252
331
  function parseGeometryBitFlags(byte) {
253
- const envelopeValue = (byte & 0b00001110) / 2;
254
- const envelopeLength = ENVELOPE_BYTE_LENGTHS[envelopeValue];
332
+ var envelopeValue = (byte & 14) / 2;
333
+ var envelopeLength = ENVELOPE_BYTE_LENGTHS[envelopeValue];
255
334
  return {
256
- littleEndian: Boolean(byte & 0b00000001),
257
- envelopeLength,
258
- emptyGeometry: Boolean(byte & 0b00010000),
259
- extendedGeometryType: Boolean(byte & 0b00100000)
335
+ littleEndian: Boolean(byte & 1),
336
+ envelopeLength: envelopeLength,
337
+ emptyGeometry: Boolean(byte & 16),
338
+ extendedGeometryType: Boolean(byte & 32)
260
339
  };
261
340
  }
262
341
 
263
342
  function getGeometryColumn(db, tableName) {
264
- const stmt = db.prepare('SELECT * FROM gpkg_geometry_columns WHERE table_name=:tableName;');
343
+ var stmt = db.prepare('SELECT * FROM gpkg_geometry_columns WHERE table_name=:tableName;');
265
344
  stmt.bind({
266
345
  ':tableName': tableName
267
346
  });
268
347
  stmt.step();
269
- const geometryColumn = stmt.getAsObject();
348
+ var geometryColumn = stmt.getAsObject();
270
349
  return geometryColumn;
271
350
  }
272
351
 
273
352
  function getDataColumns(db, tableName) {
274
- let stmt;
353
+ var stmt;
275
354
 
276
355
  try {
277
356
  stmt = db.prepare('SELECT * FROM gpkg_data_columns WHERE table_name=:tableName;');
@@ -286,14 +365,12 @@ function getDataColumns(db, tableName) {
286
365
  stmt.bind({
287
366
  ':tableName': tableName
288
367
  });
289
- const result = {};
368
+ var result = {};
290
369
 
291
370
  while (stmt.step()) {
292
- const column = stmt.getAsObject();
293
- const {
294
- column_name,
295
- name
296
- } = column;
371
+ var column = stmt.getAsObject();
372
+ var column_name = column.column_name,
373
+ name = column.name;
297
374
  result[column_name] = name || null;
298
375
  }
299
376
 
@@ -301,17 +378,15 @@ function getDataColumns(db, tableName) {
301
378
  }
302
379
 
303
380
  function getArrowSchema(db, tableName) {
304
- const stmt = db.prepare("PRAGMA table_info(`".concat(tableName, "`)"));
305
- const fields = [];
381
+ var stmt = db.prepare("PRAGMA table_info(`".concat(tableName, "`)"));
382
+ var fields = [];
306
383
 
307
384
  while (stmt.step()) {
308
- const pragmaTableInfo = stmt.getAsObject();
309
- const {
310
- name,
311
- type,
312
- notnull
313
- } = pragmaTableInfo;
314
- const field = new _schema.Field(name, new SQL_TYPE_MAPPING[type](), !notnull);
385
+ var pragmaTableInfo = stmt.getAsObject();
386
+ var name = pragmaTableInfo.name,
387
+ type = pragmaTableInfo.type,
388
+ notnull = pragmaTableInfo.notnull;
389
+ var field = new _schema.Field(name, new SQL_TYPE_MAPPING[type](), !notnull);
315
390
  fields.push(field);
316
391
  }
317
392
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/parse-geopackage.ts"],"names":["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","parseGeoPackage","arrayBuffer","options","sqlJsCDN","geopackage","reproject","_targetCrs","gis","db","loadDatabase","tables","listVectorTables","projections","getProjections","result","table","table_name","tableName","getVectorTable","SQL","locateFile","file","Database","Uint8Array","stmt","prepare","vectorTablesInfo","step","vectorTableInfo","getAsObject","push","dataColumns","getDataColumns","geomColumn","getGeometryColumn","featureIdColumn","getFeatureIdName","columns","values","exec","projection","geomColumnProjStr","srs_id","Proj4Projection","from","to","geojsonFeatures","row","geojsonFeature","constructGeoJsonFeature","schema","getArrowSchema","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","name","pk","envelopeLength","emptyGeometry","parseGeometryBitFlags","getUint8","wkbOffset","binaryGeometry","WKBLoader","parseSync","slice","byte","envelopeValue","littleEndian","Boolean","extendedGeometryType","bind","geometryColumn","error","message","includes","column","fields","notnull","field","Field","Schema"],"mappings":"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","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} 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} from './types';\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]: 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};\n\nexport default async function parseGeoPackage(\n arrayBuffer: ArrayBuffer,\n options?: GeoPackageLoaderOptions\n) {\n const {sqlJsCDN = 'https://sql.js.org/dist/'} = options?.geopackage || {};\n const {reproject = false, _targetCrs = 'WGS84'} = 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 result = {};\n for (const table of tables) {\n const {table_name: tableName} = table;\n result[tableName] = getVectorTable(db, tableName, projections, {\n reproject,\n _targetCrs\n });\n }\n\n return result;\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): object {\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 {geojsonFeatures: transformGeoJsonCoords(geojsonFeatures, projection.project), schema};\n }\n\n return {geojsonFeatures, schema};\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) {\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 && 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 {object} 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 field = new Field(name, new SQL_TYPE_MAPPING[type](), !notnull);\n fields.push(field);\n }\n\n return new Schema(fields);\n}\n"],"file":"parse-geopackage.js"}
1
+ {"version":3,"sources":["../../../src/lib/parse-geopackage.ts"],"names":["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","parseGeoPackage","arrayBuffer","options","geopackage","sqlJsCDN","gis","reproject","_targetCrs","loadDatabase","db","tables","listVectorTables","projections","getProjections","result","table","tableName","table_name","getVectorTable","locateFile","file","SQL","Database","Uint8Array","stmt","prepare","vectorTablesInfo","step","vectorTableInfo","getAsObject","push","dataColumns","getDataColumns","geomColumn","getGeometryColumn","featureIdColumn","getFeatureIdName","exec","columns","values","projection","geomColumnProjStr","srs_id","Proj4Projection","from","to","geojsonFeatures","row","geojsonFeature","constructGeoJsonFeature","schema","getArrowSchema","project","projectionMapping","srsInfo","definition","idIdx","indexOf","id","geomColumnIdx","column_name","geometry","parseGeometry","buffer","properties","Object","entries","key","value","idx","i","length","columnName","type","getGeopackageVersion","textDecoder","TextDecoder","applicationIdQuery","applicationId","ArrayBuffer","view","DataView","setInt32","Number","versionString","decode","userVersionQuery","userVersionInt","pragmaTableInfo","name","pk","parseGeometryBitFlags","getUint8","envelopeLength","emptyGeometry","wkbOffset","binaryGeometry","WKBLoader","parseSync","slice","byte","envelopeValue","littleEndian","Boolean","extendedGeometryType","bind","geometryColumn","error","message","includes","column","fields","notnull","field","Field","Schema"],"mappings":";;;;;;;;;;;;;;;AAEA;;AACA;;AACA;;AAcA;;AACA;;;;;;;;AAcA,IAAMA,qBAAqB,GAAG;AAC5B,KAAG,CADyB;AAE5B,KAAG,EAFyB;AAG5B,KAAG,EAHyB;AAI5B,KAAG,EAJyB;AAK5B,KAAG,EALyB;AAO5B,KAAG,CAPyB;AAQ5B,KAAG,CARyB;AAS5B,KAAG;AATyB,CAA9B;AAaA,IAAMC,gBAA0D,GAAG;AACjEC,EAAAA,OAAO,EAAEC,YADwD;AAEjEC,EAAAA,OAAO,EAAEC,YAFwD;AAGjEC,EAAAA,QAAQ,EAAEC,aAHuD;AAIjEC,EAAAA,SAAS,EAAEC,aAJsD;AAKjEC,EAAAA,GAAG,EAAED,aAL4D;AAMjEE,EAAAA,OAAO,EAAEF,aANwD;AAOjEG,EAAAA,KAAK,EAAEC,eAP0D;AAQjEC,EAAAA,MAAM,EAAEC,eARyD;AASjEC,EAAAA,IAAI,EAAED,eAT2D;AAUjEE,EAAAA,IAAI,EAAEC,YAV2D;AAWjEC,EAAAA,IAAI,EAAEC,cAX2D;AAYjEC,EAAAA,IAAI,EAAEH,YAZ2D;AAajEI,EAAAA,QAAQ,EAAEJ,YAbuD;AAcjEK,EAAAA,QAAQ,EAAEH;AAduD,CAAnE;;SAiB8BI,e;;;;;+EAAf,iBACbC,WADa,EAEbC,OAFa;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,oBAImC,CAAAA,OAAO,SAAP,IAAAA,OAAO,WAAP,YAAAA,OAAO,CAAEC,UAAT,KAAuB,EAJ1D,yBAINC,QAJM,EAINA,QAJM,+BAIK,0BAJL;AAAA,oBAKqC,CAAAF,OAAO,SAAP,IAAAA,OAAO,WAAP,YAAAA,OAAO,CAAEG,GAAT,KAAgB,EALrD,0BAKNC,SALM,EAKNA,SALM,gCAKM,KALN,6CAKaC,UALb,EAKaA,UALb,iCAK0B,OAL1B;AAAA;AAAA,mBAOIC,YAAY,CAACP,WAAD,EAAcG,QAAd,CAPhB;;AAAA;AAOPK,YAAAA,EAPO;AAQPC,YAAAA,MARO,GAQEC,gBAAgB,CAACF,EAAD,CARlB;AASPG,YAAAA,WATO,GASOC,cAAc,CAACJ,EAAD,CATrB;AAYPK,YAAAA,MAZO,GAYE,EAZF;AAAA,oDAaOJ,MAbP;;AAAA;AAab,qEAA4B;AAAjBK,gBAAAA,KAAiB;AACPC,gBAAAA,SADO,GACMD,KADN,CACnBE,UADmB;AAE1BH,gBAAAA,MAAM,CAACE,SAAD,CAAN,GAAoBE,cAAc,CAACT,EAAD,EAAKO,SAAL,EAAgBJ,WAAhB,EAA6B;AAC7DN,kBAAAA,SAAS,EAATA,SAD6D;AAE7DC,kBAAAA,UAAU,EAAVA;AAF6D,iBAA7B,CAAlC;AAID;AAnBY;AAAA;AAAA;AAAA;AAAA;;AAAA,6CAqBNO,MArBM;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,G;;;;SA8BAN,Y;;;;;4EAAf,kBAA4BP,WAA5B,EAAsDG,QAAtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAGMA,QAHN;AAAA;AAAA;AAAA;;AAAA;AAAA,mBAIgB,kBAAU;AACpBe,cAAAA,UAAU,EAAE,oBAACC,IAAD;AAAA,iCAAahB,QAAb,SAAwBgB,IAAxB;AAAA;AADQ,aAAV,CAJhB;;AAAA;AAIIC,YAAAA,GAJJ;AAAA;AAAA;;AAAA;AAAA;AAAA,mBAQgB,mBARhB;;AAAA;AAQIA,YAAAA,GARJ;;AAAA;AAAA,8CAUS,IAAIA,GAAG,CAACC,QAAR,CAAiB,IAAIC,UAAJ,CAAetB,WAAf,CAAjB,CAVT;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,G;;;;AAoBA,SAASU,gBAAT,CAA0BF,EAA1B,EAAuD;AAYrD,MAAMe,IAAI,GAAGf,EAAE,CAACgB,OAAH,CAAW,yDAAX,CAAb;AAEA,MAAMC,gBAA+B,GAAG,EAAxC;;AACA,SAAOF,IAAI,CAACG,IAAL,EAAP,EAAoB;AAClB,QAAMC,eAAe,GAAGJ,IAAI,CAACK,WAAL,EAAxB;AACAH,IAAAA,gBAAgB,CAACI,IAAjB,CAAsBF,eAAtB;AACD;;AAED,SAAOF,gBAAP;AACD;;AAUD,SAASR,cAAT,CACET,EADF,EAEEO,SAFF,EAGEJ,WAHF,QAKU;AAAA,MADPN,SACO,QADPA,SACO;AAAA,MADIC,UACJ,QADIA,UACJ;AACR,MAAMwB,WAAW,GAAGC,cAAc,CAACvB,EAAD,EAAKO,SAAL,CAAlC;AACA,MAAMiB,UAAU,GAAGC,iBAAiB,CAACzB,EAAD,EAAKO,SAAL,CAApC;AACA,MAAMmB,eAAe,GAAGC,gBAAgB,CAAC3B,EAAD,EAAKO,SAAL,CAAxC;AAIA,kBAA0BP,EAAE,CAAC4B,IAAH,0BAA2BrB,SAA3B,SAA2C,CAA3C,CAA1B;AAAA,MAAOsB,OAAP,aAAOA,OAAP;AAAA,MAAgBC,MAAhB,aAAgBA,MAAhB;AAEA,MAAIC,UAAJ;;AACA,MAAIlC,SAAJ,EAAe;AACb,QAAMmC,iBAAiB,GAAG7B,WAAW,CAACqB,UAAU,CAACS,MAAZ,CAArC;AACAF,IAAAA,UAAU,GAAG,IAAIG,qBAAJ,CAAoB;AAC/BC,MAAAA,IAAI,EAAEH,iBADyB;AAE/BI,MAAAA,EAAE,EAAEtC;AAF2B,KAApB,CAAb;AAID;;AAED,MAAMuC,eAAyB,GAAG,EAAlC;;AAlBQ,6CAmBUP,MAnBV;AAAA;;AAAA;AAmBR,wDAA0B;AAAA,UAAfQ,GAAe;AACxB,UAAMC,cAAc,GAAGC,uBAAuB,CAC5CX,OAD4C,EAE5CS,GAF4C,EAG5Cd,UAH4C,EAK5CF,WAL4C,EAM5CI,eAN4C,CAA9C;AAQAW,MAAAA,eAAe,CAAChB,IAAhB,CAAqBkB,cAArB;AACD;AA7BO;AAAA;AAAA;AAAA;AAAA;;AA+BR,MAAME,MAAM,GAAGC,cAAc,CAAC1C,EAAD,EAAKO,SAAL,CAA7B;;AACA,MAAIwB,UAAJ,EAAgB;AACd,WAAO;AAACM,MAAAA,eAAe,EAAE,iCAAuBA,eAAvB,EAAwCN,UAAU,CAACY,OAAnD,CAAlB;AAA+EF,MAAAA,MAAM,EAANA;AAA/E,KAAP;AACD;;AAED,SAAO;AAACJ,IAAAA,eAAe,EAAfA,eAAD;AAAkBI,IAAAA,MAAM,EAANA;AAAlB,GAAP;AACD;;AAQD,SAASrC,cAAT,CAAwBJ,EAAxB,EAAyD;AAEvD,MAAMe,IAAI,GAAGf,EAAE,CAACgB,OAAH,CAAW,qCAAX,CAAb;AAEA,MAAM4B,iBAAoC,GAAG,EAA7C;;AACA,SAAO7B,IAAI,CAACG,IAAL,EAAP,EAAoB;AAClB,QAAM2B,OAAO,GAAG9B,IAAI,CAACK,WAAL,EAAhB;AACA,QAAOa,MAAP,GAA6BY,OAA7B,CAAOZ,MAAP;AAAA,QAAea,UAAf,GAA6BD,OAA7B,CAAeC,UAAf;AACAF,IAAAA,iBAAiB,CAACX,MAAD,CAAjB,GAA4Ba,UAA5B;AACD;;AAED,SAAOF,iBAAP;AACD;;AAUD,SAASJ,uBAAT,CACEX,OADF,EAEES,GAFF,EAGEd,UAHF,EAIEF,WAJF,EAKEI,eALF,EAME;AAEA,MAAMqB,KAAK,GAAGlB,OAAO,CAACmB,OAAR,CAAgBtB,eAAhB,CAAd;AACA,MAAMuB,EAAE,GAAGX,GAAG,CAACS,KAAD,CAAd;AAGA,MAAMG,aAAa,GAAGrB,OAAO,CAACmB,OAAR,CAAgBxB,UAAU,CAAC2B,WAA3B,CAAtB;AACA,MAAMC,QAAQ,GAAGC,aAAa,CAACf,GAAG,CAACY,aAAD,CAAH,CAAmBI,MAApB,CAA9B;AAEA,MAAMC,UAAU,GAAG,EAAnB;;AACA,MAAIjC,WAAJ,EAAiB;AACf,uCAA2BkC,MAAM,CAACC,OAAP,CAAenC,WAAf,CAA3B,qCAAwD;AAAnD;AAAA,UAAOoC,GAAP;AAAA,UAAYC,KAAZ;;AACH,UAAMC,GAAG,GAAG/B,OAAO,CAACmB,OAAR,CAAgBU,GAAhB,CAAZ;AAEAH,MAAAA,UAAU,CAACI,KAAD,CAAV,GAAoBrB,GAAG,CAACsB,GAAD,CAAvB;AACD;AACF,GAND,MAMO;AAEL,SAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGhC,OAAO,CAACiC,MAA5B,EAAoCD,CAAC,EAArC,EAAyC;AACvC,UAAIA,CAAC,KAAKd,KAAN,IAAec,CAAC,KAAKX,aAAzB,EAAwC;AAEtC;AACD;;AAED,UAAMa,UAAU,GAAGlC,OAAO,CAACgC,CAAD,CAA1B;AACAN,MAAAA,UAAU,CAACQ,UAAD,CAAV,GAAyBzB,GAAG,CAACuB,CAAD,CAA5B;AACD;AACF;;AAED,SAAO;AACLZ,IAAAA,EAAE,EAAFA,EADK;AAELe,IAAAA,IAAI,EAAE,SAFD;AAGLZ,IAAAA,QAAQ,EAARA,QAHK;AAILG,IAAAA,UAAU,EAAVA;AAJK,GAAP;AAMD;;AAUD,SAASU,oBAAT,CAA8BjE,EAA9B,EAA2D;AACzD,MAAMkE,WAAW,GAAG,IAAIC,WAAJ,EAApB;AAGA,MAAMC,kBAAkB,GAAGpE,EAAE,CAAC4B,IAAH,CAAQ,wBAAR,EAAkC,CAAlC,CAA3B;AACA,MAAMyC,aAAa,GAAGD,kBAAkB,CAACtC,MAAnB,CAA0B,CAA1B,EAA6B,CAA7B,CAAtB;AAGA,MAAMwB,MAAM,GAAG,IAAIgB,WAAJ,CAAgB,CAAhB,CAAf;AACA,MAAMC,IAAI,GAAG,IAAIC,QAAJ,CAAalB,MAAb,CAAb;AACAiB,EAAAA,IAAI,CAACE,QAAL,CAAc,CAAd,EAAiBC,MAAM,CAACL,aAAD,CAAvB;AACA,MAAMM,aAAa,GAAGT,WAAW,CAACU,MAAZ,CAAmBtB,MAAnB,CAAtB;;AAEA,MAAIqB,aAAa,KAAK,MAAtB,EAA8B;AAC5B,WAAO,KAAP;AACD;;AAED,MAAIA,aAAa,KAAK,MAAtB,EAA8B;AAC5B,WAAO,KAAP;AACD;;AAGD,MAAME,gBAAgB,GAAG7E,EAAE,CAAC4B,IAAH,CAAQ,sBAAR,EAAgC,CAAhC,CAAzB;AACA,MAAMkD,cAAc,GAAGD,gBAAgB,CAAC/C,MAAjB,CAAwB,CAAxB,EAA2B,CAA3B,CAAvB;;AAEA,MAAIgD,cAAc,IAAIA,cAAc,GAAG,KAAvC,EAA8C;AAC5C,WAAO,KAAP;AACD;;AAED,SAAO,IAAP;AACD;;AAWD,SAASnD,gBAAT,CAA0B3B,EAA1B,EAAwCO,SAAxC,EAA0E;AAExE,MAAMQ,IAAI,GAAGf,EAAE,CAACgB,OAAH,8BAAkCT,SAAlC,QAAb;;AAEA,SAAOQ,IAAI,CAACG,IAAL,EAAP,EAAoB;AAClB,QAAM6D,eAAe,GAAGhE,IAAI,CAACK,WAAL,EAAxB;AACA,QAAO4D,IAAP,GAAmBD,eAAnB,CAAOC,IAAP;AAAA,QAAaC,EAAb,GAAmBF,eAAnB,CAAaE,EAAb;;AACA,QAAIA,EAAJ,EAAQ;AACN,aAAOD,IAAP;AACD;AACF;;AAGD,SAAO,IAAP;AACD;;AAUD,SAAS3B,aAAT,CAAuB7D,WAAvB,EAAkE;AAChE,MAAM+E,IAAI,GAAG,IAAIC,QAAJ,CAAahF,WAAb,CAAb;;AACA,8BAAwC0F,qBAAqB,CAACX,IAAI,CAACY,QAAL,CAAc,CAAd,CAAD,CAA7D;AAAA,MAAOC,cAAP,yBAAOA,cAAP;AAAA,MAAuBC,aAAvB,yBAAuBA,aAAvB;;AAMA,MAAIA,aAAJ,EAAmB;AACjB,WAAO,IAAP;AACD;;AAOD,MAAMC,SAAS,GAAG,IAAIF,cAAtB;;AAIA,MAAMG,cAAc,GAAGC,eAAUC,SAAV,CAAoBjG,WAAW,CAACkG,KAAZ,CAAkBJ,SAAlB,CAApB,CAAvB;;AAEA,SAAO,2BAAiBC,cAAjB,CAAP;AACD;;AASD,SAASL,qBAAT,CAA+BS,IAA/B,EAA+D;AAE7D,MAAMC,aAAa,GAAG,CAACD,IAAI,GAAG,EAAR,IAAsB,CAA5C;AAGA,MAAMP,cAAc,GAAGrH,qBAAqB,CAAC6H,aAAD,CAA5C;AAEA,SAAO;AACLC,IAAAA,YAAY,EAAEC,OAAO,CAACH,IAAI,GAAG,CAAR,CADhB;AAELP,IAAAA,cAAc,EAAdA,cAFK;AAGLC,IAAAA,aAAa,EAAES,OAAO,CAACH,IAAI,GAAG,EAAR,CAHjB;AAILI,IAAAA,oBAAoB,EAAED,OAAO,CAACH,IAAI,GAAG,EAAR;AAJxB,GAAP;AAMD;;AASD,SAASlE,iBAAT,CAA2BzB,EAA3B,EAAyCO,SAAzC,EAAgF;AAC9E,MAAMQ,IAAI,GAAGf,EAAE,CAACgB,OAAH,CAAW,kEAAX,CAAb;AACAD,EAAAA,IAAI,CAACiF,IAAL,CAAU;AAAC,kBAAczF;AAAf,GAAV;AAOAQ,EAAAA,IAAI,CAACG,IAAL;AACA,MAAM+E,cAAc,GAAGlF,IAAI,CAACK,WAAL,EAAvB;AACA,SAAO6E,cAAP;AACD;;AAQD,SAAS1E,cAAT,CAAwBvB,EAAxB,EAAsCO,SAAtC,EAAoF;AAGlF,MAAIQ,IAAJ;;AACA,MAAI;AACFA,IAAAA,IAAI,GAAGf,EAAE,CAACgB,OAAH,CAAW,8DAAX,CAAP;AACD,GAFD,CAEE,OAAOkF,KAAP,EAAc;AACd,QAAKA,KAAD,CAAiBC,OAAjB,CAAyBC,QAAzB,CAAkC,eAAlC,CAAJ,EAAwD;AACtD,aAAO,IAAP;AACD;;AAED,UAAMF,KAAN;AACD;;AAEDnF,EAAAA,IAAI,CAACiF,IAAL,CAAU;AAAC,kBAAczF;AAAf,GAAV;AAGA,MAAMF,MAA0B,GAAG,EAAnC;;AACA,SAAOU,IAAI,CAACG,IAAL,EAAP,EAAoB;AAClB,QAAMmF,MAAM,GAAGtF,IAAI,CAACK,WAAL,EAAf;AACA,QAAO+B,WAAP,GAA4BkD,MAA5B,CAAOlD,WAAP;AAAA,QAAoB6B,IAApB,GAA4BqB,MAA5B,CAAoBrB,IAApB;AACA3E,IAAAA,MAAM,CAAC8C,WAAD,CAAN,GAAsB6B,IAAI,IAAI,IAA9B;AACD;;AAED,SAAO3E,MAAP;AACD;;AAQD,SAASqC,cAAT,CAAwB1C,EAAxB,EAAsCO,SAAtC,EAAiE;AAC/D,MAAMQ,IAAI,GAAGf,EAAE,CAACgB,OAAH,8BAAkCT,SAAlC,QAAb;AAEA,MAAM+F,MAAe,GAAG,EAAxB;;AACA,SAAOvF,IAAI,CAACG,IAAL,EAAP,EAAoB;AAClB,QAAM6D,eAAe,GAAGhE,IAAI,CAACK,WAAL,EAAxB;AACA,QAAO4D,IAAP,GAA8BD,eAA9B,CAAOC,IAAP;AAAA,QAAahB,IAAb,GAA8Be,eAA9B,CAAaf,IAAb;AAAA,QAAmBuC,OAAnB,GAA8BxB,eAA9B,CAAmBwB,OAAnB;AACA,QAAMC,KAAK,GAAG,IAAIC,aAAJ,CAAUzB,IAAV,EAAgB,IAAIhH,gBAAgB,CAACgG,IAAD,CAApB,EAAhB,EAA8C,CAACuC,OAA/C,CAAd;AACAD,IAAAA,MAAM,CAACjF,IAAP,CAAYmF,KAAZ;AACD;;AAED,SAAO,IAAIE,cAAJ,CAAWJ,MAAX,CAAP;AACD","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} 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} from './types';\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]: 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};\n\nexport default async function parseGeoPackage(\n arrayBuffer: ArrayBuffer,\n options?: GeoPackageLoaderOptions\n) {\n const {sqlJsCDN = 'https://sql.js.org/dist/'} = options?.geopackage || {};\n const {reproject = false, _targetCrs = 'WGS84'} = 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 result = {};\n for (const table of tables) {\n const {table_name: tableName} = table;\n result[tableName] = getVectorTable(db, tableName, projections, {\n reproject,\n _targetCrs\n });\n }\n\n return result;\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): object {\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 {geojsonFeatures: transformGeoJsonCoords(geojsonFeatures, projection.project), schema};\n }\n\n return {geojsonFeatures, schema};\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) {\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 && 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 {object} 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 field = new Field(name, new SQL_TYPE_MAPPING[type](), !notnull);\n fields.push(field);\n }\n\n return new Schema(fields);\n}\n"],"file":"parse-geopackage.js"}
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.1.0-beta.3",
4
+ "version": "3.1.1",
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.1.0-beta.3",
29
- "@loaders.gl/schema": "3.1.0-beta.3",
30
- "@loaders.gl/wkt": "3.1.0-beta.3",
28
+ "@loaders.gl/gis": "3.1.1",
29
+ "@loaders.gl/schema": "3.1.1",
30
+ "@loaders.gl/wkt": "3.1.1",
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": "3537c382b3ea4e092b24b6f94c3edee72076039c"
35
+ "gitHead": "ed3c238bcb68ab5a2d4ddc64319f6f4c02a20df7"
36
36
  }