@loaders.gl/geopackage 3.3.0-alpha.1 → 3.3.0-alpha.10

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,7 +1,6 @@
1
1
  "use strict";
2
2
 
3
3
  var moduleExports = require('./index');
4
-
5
4
  globalThis.loaders = globalThis.loaders || {};
6
5
  module.exports = Object.assign(globalThis.loaders, moduleExports);
7
6
  //# sourceMappingURL=bundle.js.map
@@ -1 +1 @@
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"}
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,18 +1,13 @@
1
1
  "use strict";
2
2
 
3
3
  var _typeof = require("@babel/runtime/helpers/typeof");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.GeoPackageLoader = void 0;
9
-
10
8
  var _parseGeopackage = _interopRequireWildcard(require("./lib/parse-geopackage"));
11
-
12
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); }
13
-
14
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; }
15
-
16
11
  var VERSION = 'latest';
17
12
  var GeoPackageLoader = {
18
13
  id: '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","DEFAULT_SQLJS_CDN","gis","format"],"mappings":";;;;;;;;;AACA;;;;;;AAKA,IAAMA,OAAO,GAAG,QAAhB;AAeO,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,EAAEC;AADA,KADL;AAIPC,IAAAA,GAAG,EAAE;AACHC,MAAAA,MAAM,EAAE;AADL;AAJE;AATuC,CAA3C","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"],"file":"geopackage-loader.js"}
1
+ {"version":3,"file":"geopackage-loader.js","names":["VERSION","GeoPackageLoader","id","name","module","version","extensions","mimeTypes","category","parse","parseGeoPackage","options","geopackage","sqlJsCDN","DEFAULT_SQLJS_CDN","gis","format"],"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;AAA0E;AAAA;AAK1E,IAAMA,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;AAAC"}
package/dist/es5/index.js CHANGED
@@ -9,6 +9,5 @@ Object.defineProperty(exports, "GeoPackageLoader", {
9
9
  return _geopackageLoader.GeoPackageLoader;
10
10
  }
11
11
  });
12
-
13
12
  var _geopackageLoader = require("./geopackage-loader");
14
13
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA","sourcesContent":["export {GeoPackageLoader} from './geopackage-loader';\n"],"file":"index.js"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/index.ts"],"sourcesContent":["export {GeoPackageLoader} from './geopackage-loader';\n"],"mappings":";;;;;;;;;;;AAAA"}
@@ -1,36 +1,24 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
- exports.default = parseGeoPackage;
9
7
  exports.DEFAULT_SQLJS_CDN = void 0;
10
-
8
+ exports.default = parseGeoPackage;
11
9
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
12
-
13
10
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
14
-
15
11
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
16
-
17
12
  var _sql = _interopRequireDefault(require("sql.js"));
18
-
19
13
  var _wkt = require("@loaders.gl/wkt");
20
-
21
14
  var _schema = require("@loaders.gl/schema");
22
-
23
15
  var _gis = require("@loaders.gl/gis");
24
-
25
16
  var _proj = require("@math.gl/proj4");
26
-
27
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; } } }; }
28
-
29
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); }
30
-
31
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; }
32
-
33
20
  var DEFAULT_SQLJS_CDN = 'https://cdnjs.cloudflare.com/ajax/libs/sql.js/1.5.0/';
21
+
34
22
  exports.DEFAULT_SQLJS_CDN = DEFAULT_SQLJS_CDN;
35
23
  var ENVELOPE_BYTE_LENGTHS = {
36
24
  0: 0,
@@ -42,6 +30,7 @@ var ENVELOPE_BYTE_LENGTHS = {
42
30
  6: 0,
43
31
  7: 0
44
32
  };
33
+
45
34
  var SQL_TYPE_MAPPING = {
46
35
  BOOLEAN: _schema.Bool,
47
36
  TINYINT: _schema.Int8,
@@ -65,15 +54,12 @@ var SQL_TYPE_MAPPING = {
65
54
  MULTIPOLYGON: _schema.Binary,
66
55
  GEOMETRYCOLLECTION: _schema.Binary
67
56
  };
68
-
69
57
  function parseGeoPackage(_x, _x2) {
70
58
  return _parseGeoPackage.apply(this, arguments);
71
59
  }
72
-
73
60
  function _parseGeoPackage() {
74
61
  _parseGeoPackage = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(arrayBuffer, options) {
75
62
  var _ref2, _ref2$sqlJsCDN, sqlJsCDN, _ref3, _ref3$reproject, reproject, _ref3$_targetCrs, _targetCrs, _ref3$format, format, db, tables, projections, outputTables, _iterator3, _step3, table, tableName;
76
-
77
63
  return _regenerator.default.wrap(function _callee$(_context) {
78
64
  while (1) {
79
65
  switch (_context.prev = _context.next) {
@@ -82,7 +68,6 @@ function _parseGeoPackage() {
82
68
  _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;
83
69
  _context.next = 4;
84
70
  return loadDatabase(arrayBuffer, sqlJsCDN);
85
-
86
71
  case 4:
87
72
  db = _context.sent;
88
73
  tables = listVectorTables(db);
@@ -92,7 +77,6 @@ function _parseGeoPackage() {
92
77
  tables: []
93
78
  };
94
79
  _iterator3 = _createForOfIteratorHelper(tables);
95
-
96
80
  try {
97
81
  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
98
82
  table = _step3.value;
@@ -110,17 +94,13 @@ function _parseGeoPackage() {
110
94
  } finally {
111
95
  _iterator3.f();
112
96
  }
113
-
114
97
  if (!(format === 'geojson')) {
115
98
  _context.next = 12;
116
99
  break;
117
100
  }
118
-
119
101
  return _context.abrupt("return", formatTablesAsGeojson(outputTables));
120
-
121
102
  case 12:
122
103
  return _context.abrupt("return", outputTables);
123
-
124
104
  case 13:
125
105
  case "end":
126
106
  return _context.stop();
@@ -130,11 +110,9 @@ function _parseGeoPackage() {
130
110
  }));
131
111
  return _parseGeoPackage.apply(this, arguments);
132
112
  }
133
-
134
113
  function loadDatabase(_x3, _x4) {
135
114
  return _loadDatabase.apply(this, arguments);
136
115
  }
137
-
138
116
  function _loadDatabase() {
139
117
  _loadDatabase = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee2(arrayBuffer, sqlJsCDN) {
140
118
  var SQL;
@@ -146,29 +124,23 @@ function _loadDatabase() {
146
124
  _context2.next = 6;
147
125
  break;
148
126
  }
149
-
150
127
  _context2.next = 3;
151
128
  return (0, _sql.default)({
152
129
  locateFile: function locateFile(file) {
153
130
  return "".concat(sqlJsCDN).concat(file);
154
131
  }
155
132
  });
156
-
157
133
  case 3:
158
134
  SQL = _context2.sent;
159
135
  _context2.next = 9;
160
136
  break;
161
-
162
137
  case 6:
163
138
  _context2.next = 8;
164
139
  return (0, _sql.default)();
165
-
166
140
  case 8:
167
141
  SQL = _context2.sent;
168
-
169
142
  case 9:
170
143
  return _context2.abrupt("return", new SQL.Database(new Uint8Array(arrayBuffer)));
171
-
172
144
  case 10:
173
145
  case "end":
174
146
  return _context2.stop();
@@ -178,30 +150,28 @@ function _loadDatabase() {
178
150
  }));
179
151
  return _loadDatabase.apply(this, arguments);
180
152
  }
181
-
182
153
  function listVectorTables(db) {
154
+
183
155
  var stmt = db.prepare("SELECT * FROM gpkg_contents WHERE data_type='features';");
184
156
  var vectorTablesInfo = [];
185
-
186
157
  while (stmt.step()) {
187
158
  var vectorTableInfo = stmt.getAsObject();
188
159
  vectorTablesInfo.push(vectorTableInfo);
189
160
  }
190
-
191
161
  return vectorTablesInfo;
192
162
  }
193
163
 
194
164
  function getVectorTable(db, tableName, projections, _ref) {
195
165
  var reproject = _ref.reproject,
196
- _targetCrs = _ref._targetCrs;
166
+ _targetCrs = _ref._targetCrs;
197
167
  var dataColumns = getDataColumns(db, tableName);
198
168
  var geomColumn = getGeometryColumn(db, tableName);
199
169
  var featureIdColumn = getFeatureIdName(db, tableName);
170
+
200
171
  var _db$exec$ = db.exec("SELECT * FROM `".concat(tableName, "`;"))[0],
201
- columns = _db$exec$.columns,
202
- values = _db$exec$.values;
172
+ columns = _db$exec$.columns,
173
+ values = _db$exec$.values;
203
174
  var projection;
204
-
205
175
  if (reproject) {
206
176
  var geomColumnProjStr = projections[geomColumn.srs_id];
207
177
  projection = new _proj.Proj4Projection({
@@ -209,16 +179,14 @@ function getVectorTable(db, tableName, projections, _ref) {
209
179
  to: _targetCrs
210
180
  });
211
181
  }
212
-
213
182
  var geojsonFeatures = [];
214
-
215
183
  var _iterator = _createForOfIteratorHelper(values),
216
- _step;
217
-
184
+ _step;
218
185
  try {
219
186
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
220
187
  var row = _step.value;
221
- var geojsonFeature = constructGeoJsonFeature(columns, row, geomColumn, dataColumns, featureIdColumn);
188
+ var geojsonFeature = constructGeoJsonFeature(columns, row, geomColumn,
189
+ dataColumns, featureIdColumn);
222
190
  geojsonFeatures.push(geojsonFeature);
223
191
  }
224
192
  } catch (err) {
@@ -226,9 +194,7 @@ function getVectorTable(db, tableName, projections, _ref) {
226
194
  } finally {
227
195
  _iterator.f();
228
196
  }
229
-
230
197
  var schema = getArrowSchema(db, tableName);
231
-
232
198
  if (projection) {
233
199
  return {
234
200
  data: (0, _gis.transformGeoJsonCoords)(geojsonFeatures, projection.project),
@@ -236,7 +202,6 @@ function getVectorTable(db, tableName, projections, _ref) {
236
202
  shape: 'object-row-table'
237
203
  };
238
204
  }
239
-
240
205
  return {
241
206
  data: geojsonFeatures,
242
207
  schema: schema,
@@ -247,30 +212,27 @@ function getVectorTable(db, tableName, projections, _ref) {
247
212
  function getProjections(db) {
248
213
  var stmt = db.prepare('SELECT * FROM gpkg_spatial_ref_sys;');
249
214
  var projectionMapping = {};
250
-
251
215
  while (stmt.step()) {
252
216
  var srsInfo = stmt.getAsObject();
253
217
  var srs_id = srsInfo.srs_id,
254
- definition = srsInfo.definition;
218
+ definition = srsInfo.definition;
255
219
  projectionMapping[srs_id] = definition;
256
220
  }
257
-
258
221
  return projectionMapping;
259
222
  }
260
223
 
261
224
  function constructGeoJsonFeature(columns, row, geomColumn, dataColumns, featureIdColumn) {
262
225
  var idIdx = columns.indexOf(featureIdColumn);
263
226
  var id = row[idIdx];
227
+
264
228
  var geomColumnIdx = columns.indexOf(geomColumn.column_name);
265
229
  var geometry = parseGeometry(row[geomColumnIdx].buffer);
266
230
  var properties = {};
267
-
268
231
  if (dataColumns) {
269
232
  for (var _i = 0, _Object$entries = Object.entries(dataColumns); _i < _Object$entries.length; _i++) {
270
233
  var _Object$entries$_i = (0, _slicedToArray2.default)(_Object$entries[_i], 2),
271
- key = _Object$entries$_i[0],
272
- value = _Object$entries$_i[1];
273
-
234
+ key = _Object$entries$_i[0],
235
+ value = _Object$entries$_i[1];
274
236
  var idx = columns.indexOf(key);
275
237
  properties[value] = row[idx];
276
238
  }
@@ -279,12 +241,10 @@ function constructGeoJsonFeature(columns, row, geomColumn, dataColumns, featureI
279
241
  if (i === idIdx || i === geomColumnIdx) {
280
242
  continue;
281
243
  }
282
-
283
244
  var columnName = columns[i];
284
245
  properties[columnName] = row[i];
285
246
  }
286
247
  }
287
-
288
248
  return {
289
249
  id: id,
290
250
  type: 'Feature',
@@ -295,39 +255,35 @@ function constructGeoJsonFeature(columns, row, geomColumn, dataColumns, featureI
295
255
 
296
256
  function getGeopackageVersion(db) {
297
257
  var textDecoder = new TextDecoder();
258
+
298
259
  var applicationIdQuery = db.exec('PRAGMA application_id;')[0];
299
260
  var applicationId = applicationIdQuery.values[0][0];
261
+
300
262
  var buffer = new ArrayBuffer(4);
301
263
  var view = new DataView(buffer);
302
264
  view.setInt32(0, Number(applicationId));
303
265
  var versionString = textDecoder.decode(buffer);
304
-
305
266
  if (versionString === 'GP10') {
306
267
  return '1.0';
307
268
  }
308
-
309
269
  if (versionString === 'GP11') {
310
270
  return '1.1';
311
271
  }
312
272
 
313
273
  var userVersionQuery = db.exec('PRAGMA user_version;')[0];
314
274
  var userVersionInt = userVersionQuery.values[0][0];
315
-
316
275
  if (userVersionInt && userVersionInt < 10300) {
317
276
  return '1.2';
318
277
  }
319
-
320
278
  return null;
321
279
  }
322
280
 
323
281
  function getFeatureIdName(db, tableName) {
324
282
  var stmt = db.prepare("PRAGMA table_info(`".concat(tableName, "`)"));
325
-
326
283
  while (stmt.step()) {
327
284
  var pragmaTableInfo = stmt.getAsObject();
328
285
  var name = pragmaTableInfo.name,
329
- pk = pragmaTableInfo.pk;
330
-
286
+ pk = pragmaTableInfo.pk;
331
287
  if (pk) {
332
288
  return name;
333
289
  }
@@ -338,10 +294,9 @@ function getFeatureIdName(db, tableName) {
338
294
 
339
295
  function parseGeometry(arrayBuffer) {
340
296
  var view = new DataView(arrayBuffer);
341
-
342
297
  var _parseGeometryBitFlag = parseGeometryBitFlags(view.getUint8(3)),
343
- envelopeLength = _parseGeometryBitFlag.envelopeLength,
344
- emptyGeometry = _parseGeometryBitFlag.emptyGeometry;
298
+ envelopeLength = _parseGeometryBitFlag.envelopeLength,
299
+ emptyGeometry = _parseGeometryBitFlag.emptyGeometry;
345
300
 
346
301
  if (emptyGeometry) {
347
302
  return null;
@@ -350,12 +305,12 @@ function parseGeometry(arrayBuffer) {
350
305
  var wkbOffset = 8 + envelopeLength;
351
306
 
352
307
  var binaryGeometry = _wkt.WKBLoader.parseSync(arrayBuffer.slice(wkbOffset));
353
-
354
308
  return (0, _gis.binaryToGeometry)(binaryGeometry);
355
309
  }
356
310
 
357
311
  function parseGeometryBitFlags(byte) {
358
312
  var envelopeValue = (byte & 14) / 2;
313
+
359
314
  var envelopeLength = ENVELOPE_BYTE_LENGTHS[envelopeValue];
360
315
  return {
361
316
  littleEndian: Boolean(byte & 1),
@@ -370,6 +325,7 @@ function getGeometryColumn(db, tableName) {
370
325
  stmt.bind({
371
326
  ':tableName': tableName
372
327
  });
328
+
373
329
  stmt.step();
374
330
  var geometryColumn = stmt.getAsObject();
375
331
  return geometryColumn;
@@ -377,55 +333,46 @@ function getGeometryColumn(db, tableName) {
377
333
 
378
334
  function getDataColumns(db, tableName) {
379
335
  var stmt;
380
-
381
336
  try {
382
337
  stmt = db.prepare('SELECT * FROM gpkg_data_columns WHERE table_name=:tableName;');
383
338
  } catch (error) {
384
339
  if (error.message.includes('no such table')) {
385
340
  return null;
386
341
  }
387
-
388
342
  throw error;
389
343
  }
390
-
391
344
  stmt.bind({
392
345
  ':tableName': tableName
393
346
  });
394
- var result = {};
395
347
 
348
+ var result = {};
396
349
  while (stmt.step()) {
397
350
  var column = stmt.getAsObject();
398
351
  var column_name = column.column_name,
399
- name = column.name;
352
+ name = column.name;
400
353
  result[column_name] = name || null;
401
354
  }
402
-
403
355
  return result;
404
356
  }
405
357
 
406
358
  function getArrowSchema(db, tableName) {
407
359
  var stmt = db.prepare("PRAGMA table_info(`".concat(tableName, "`)"));
408
360
  var fields = [];
409
-
410
361
  while (stmt.step()) {
411
362
  var pragmaTableInfo = stmt.getAsObject();
412
363
  var name = pragmaTableInfo.name,
413
- type = pragmaTableInfo.type,
414
- notnull = pragmaTableInfo.notnull;
364
+ type = pragmaTableInfo.type,
365
+ notnull = pragmaTableInfo.notnull;
415
366
  var schemaType = SQL_TYPE_MAPPING[type] && new SQL_TYPE_MAPPING[type]();
416
367
  var field = new _schema.Field(name, schemaType, !notnull);
417
368
  fields.push(field);
418
369
  }
419
-
420
370
  return new _schema.Schema(fields);
421
371
  }
422
-
423
372
  function formatTablesAsGeojson(tables) {
424
373
  var geojsonMap = {};
425
-
426
374
  var _iterator2 = _createForOfIteratorHelper(tables.tables),
427
- _step2;
428
-
375
+ _step2;
429
376
  try {
430
377
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
431
378
  var table = _step2.value;
@@ -436,7 +383,6 @@ function formatTablesAsGeojson(tables) {
436
383
  } finally {
437
384
  _iterator2.f();
438
385
  }
439
-
440
386
  return geojsonMap;
441
387
  }
442
388
  //# sourceMappingURL=parse-geopackage.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/parse-geopackage.ts"],"names":["DEFAULT_SQLJS_CDN","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","geopackage","sqlJsCDN","gis","reproject","_targetCrs","format","loadDatabase","db","tables","listVectorTables","projections","getProjections","outputTables","shape","table","tableName","table_name","push","name","getVectorTable","formatTablesAsGeojson","locateFile","file","SQL","Database","Uint8Array","stmt","prepare","vectorTablesInfo","step","vectorTableInfo","getAsObject","dataColumns","getDataColumns","geomColumn","getGeometryColumn","featureIdColumn","getFeatureIdName","exec","columns","values","projection","geomColumnProjStr","srs_id","Proj4Projection","from","to","geojsonFeatures","row","geojsonFeature","constructGeoJsonFeature","schema","getArrowSchema","data","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","pk","parseGeometryBitFlags","getUint8","envelopeLength","emptyGeometry","wkbOffset","binaryGeometry","WKBLoader","parseSync","slice","byte","envelopeValue","littleEndian","Boolean","extendedGeometryType","bind","geometryColumn","error","message","includes","result","column","fields","notnull","schemaType","field","Field","Schema","geojsonMap"],"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 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 && 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"],"file":"parse-geopackage.js"}
1
+ {"version":3,"file":"parse-geopackage.js","names":["DEFAULT_SQLJS_CDN","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","geopackage","sqlJsCDN","gis","reproject","_targetCrs","format","loadDatabase","db","tables","listVectorTables","projections","getProjections","outputTables","shape","table","tableName","table_name","push","name","getVectorTable","formatTablesAsGeojson","initSqlJs","locateFile","file","SQL","Database","Uint8Array","stmt","prepare","vectorTablesInfo","step","vectorTableInfo","getAsObject","dataColumns","getDataColumns","geomColumn","getGeometryColumn","featureIdColumn","getFeatureIdName","exec","columns","values","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","Object","entries","key","value","idx","i","length","columnName","type","getGeopackageVersion","textDecoder","TextDecoder","applicationIdQuery","applicationId","ArrayBuffer","view","DataView","setInt32","Number","versionString","decode","userVersionQuery","userVersionInt","pragmaTableInfo","pk","parseGeometryBitFlags","getUint8","envelopeLength","emptyGeometry","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 && 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 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"types.js"}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../../src/lib/types.ts"],"sourcesContent":["/* eslint-disable camelcase */\nexport interface GeometryBitFlags {\n littleEndian: boolean;\n envelopeLength: number;\n emptyGeometry: boolean;\n extendedGeometryType: boolean;\n}\n\nexport type ProjectionMapping = {[srsId: number]: string};\nexport type DataColumnsMapping = {[columnName: string]: string | null};\nexport type SQLiteTypes =\n | 'BOOLEAN'\n | 'TINYINT'\n | 'SMALLINT'\n | 'MEDIUMINT'\n | 'INT'\n | 'INTEGER'\n | 'FLOAT'\n | 'DOUBLE'\n | 'REAL'\n | 'TEXT'\n | 'BLOB'\n | 'DATE'\n | 'DATETIME';\n\n/** Type names for geopackage geometries\n *\n * As defined in https://www.geopackage.org/spec130/index.html#table_column_data_types, geometries\n * can be stored with any geometry name listed here:\n * https://www.geopackage.org/spec130/index.html#geometry_types\n */\nexport type GeoPackageGeometryTypes =\n | 'GEOMETRY'\n | 'POINT'\n | 'LINESTRING'\n | 'POLYGON'\n | 'MULTIPOINT'\n | 'MULTILINESTRING'\n | 'MULTIPOLYGON'\n | 'GEOMETRYCOLLECTION';\n\n/**\n * https://www.geopackage.org/spec121/#spatial_ref_sys\n */\nexport interface SpatialRefSysRow {\n /**\n * Human readable name of this SRS\n */\n srs_name: string;\n\n /**\n * Unique identifier for each Spatial Reference System within a GeoPackage\n */\n srs_id: number;\n\n /**\n * Case-insensitive name of the defining organization e.g. EPSG or epsg\n */\n organization: string;\n\n /**\n * Numeric ID of the Spatial Reference System assigned by the organization\n */\n organization_coordsys_id: number;\n\n /**\n * Well-known Text [A32] Representation of the Spatial Reference System\n */\n definition: string;\n\n /**\n * Human readable description of this SRS\n */\n description?: string;\n}\n\n/**\n * https://www.geopackage.org/spec121/#_contents\n */\nexport interface ContentsRow {\n /**\n * The name of the actual content (e.g., tiles, features, or attributes) table\n */\n table_name: string;\n\n /**\n * Type of data stored in the table\n */\n data_type: 'features' | 'attributes' | 'tiles';\n\n /**\n * A human-readable identifier (e.g. short name) for the table_name content\n */\n identifier?: string;\n\n /**\n * A human-readable description for the table_name content\n */\n description?: string;\n\n /**\n * timestamp of last change to content, in ISO 8601 format\n */\n last_change: string;\n\n /**\n * Bounding box minimum easting or longitude for all content in table_name. If tiles, this is informational and the tile matrix set should be used for calculating tile coordinates.\n */\n min_x?: number;\n\n /**\n * Bounding box minimum northing or latitude for all content in table_name. If tiles, this is informational and the tile matrix set should be used for calculating tile coordinates.\n */\n min_y?: number;\n /**\n * Bounding box maximum easting or longitude for all content in table_name. If tiles, this is informational and the tile matrix set should be used for calculating tile coordinates.\n */\n max_x?: number;\n\n /**\n * Bounding box maximum northing or latitude for all content in table_name. If tiles, this is informational and the tile matrix set should be used for calculating tile coordinates.\n */\n max_y?: number;\n\n /**\n * Spatial Reference System ID: gpkg_spatial_ref_sys.srs_id; when data_type is features, SHALL also match gpkg_geometry_columns.srs_id; When data_type is tiles, SHALL also match gpkg_tile_matrix_set.srs_id\n */\n srs_id?: number;\n}\n\n// https://www.geopackage.org/spec121/#geometry_types_extension\ntype GeometryType =\n | 'GEOMETRY'\n | 'POINT'\n | 'LINESTRING'\n | 'POLYGON'\n | 'MULTIPOINT'\n | 'MULTILINESTRING'\n | 'MULTIPOLYGON'\n | 'GEOMETRYCOLLECTION'\n | 'CIRCULARSTRING'\n | 'COMPOUNDCURVE'\n | 'CURVEPOLYGON'\n | 'MULTICURVE'\n | 'MULTISURFACE'\n | 'CURVE'\n | 'SURFACE';\n\n/**\n * https://www.geopackage.org/spec121/#_geometry_columns\n */\nexport interface GeometryColumnsRow {\n /**\n * Name of the table containing the geometry column\n */\n table_name: string;\n\n /**\n * Name of a column in the feature table that is a Geometry Column\n */\n column_name: string;\n\n /**\n * Name from Geometry Type Codes (Core) or Geometry Type Codes (Extension) in Geometry Types (Normative)\n */\n geometry_type_name: GeometryType;\n\n /**\n * Spatial Reference System ID: gpkg_spatial_ref_sys.srs_id\n */\n srs_id: number;\n\n /**\n * 0: z values prohibited; 1: z values mandatory; 2: z values optional\n */\n z: 0 | 1 | 2;\n\n /**\n * 0: m values prohibited; 1: m values mandatory; 2: m values optional\n */\n m: 0 | 1 | 2;\n}\n\n/**\n * https://www.geopackage.org/spec121/#extensions_table_definition\n */\nexport interface ExtensionsRow {\n /**\n * Name of the table that requires the extension. When NULL, the extension is required for the entire GeoPackage. SHALL NOT be NULL when the column_name is not NULL.\n */\n table_name?: string;\n\n /**\n * Name of the column that requires the extension. When NULL, the extension is required for the entire table.\n */\n column_name?: string;\n\n /**\n * The case sensitive name of the extension that is required, in the form <author>_<extension_name>.\n */\n extension_name: string;\n\n /**\n * Permalink, URI, or reference to a document that defines the extension\n */\n definition: string;\n\n /**\n * Indicates scope of extension effects on readers / writers: 'read-write' or 'write-only' in lowercase.\n */\n scope: string;\n}\n\n/**\n * https://www.geopackage.org/spec121/#gpkg_data_columns_cols\n */\nexport interface DataColumnsRow {\n /**\n * Name of the tiles or feature table\n */\n table_name: string;\n\n /**\n * Name of the table column\n */\n column_name: string;\n\n /**\n * A human-readable identifier (e.g. short name) for the column_name content\n */\n name?: string;\n\n /**\n * A human-readable formal title for the column_name content\n */\n title?: string;\n\n /**\n * A human-readable description for the column_name content\n */\n description?: string;\n\n /**\n * MIME [A21] type of column_name if BLOB type, or NULL for other types\n */\n mime_type?: string;\n\n /**\n * Column value constraint name (lowercase) specified by reference to gpkg_data_column_constraints.constraint name\n */\n constraint_name?: string;\n}\n\n/**\n * Type for PRAGMA table_info(tableName);\n */\nexport interface PragmaTableInfoRow {\n cid: number;\n name: string;\n type: SQLiteTypes;\n notnull: 0 | 1;\n dflt_value: any;\n pk: 0 | 1;\n}\n"],"mappings":""}
@@ -1,5 +1,5 @@
1
- const moduleExports = require('./index');
2
1
 
2
+ const moduleExports = require('./index');
3
3
  globalThis.loaders = globalThis.loaders || {};
4
4
  module.exports = Object.assign(globalThis.loaders, moduleExports);
5
5
  //# sourceMappingURL=bundle.js.map
@@ -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,"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,4 +1,5 @@
1
1
  import parseGeoPackage, { DEFAULT_SQLJS_CDN } from './lib/parse-geopackage';
2
+
2
3
  const VERSION = 'latest';
3
4
  export const GeoPackageLoader = {
4
5
  id: 'geopackage',
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/geopackage-loader.ts"],"names":["parseGeoPackage","DEFAULT_SQLJS_CDN","VERSION","GeoPackageLoader","id","name","module","version","extensions","mimeTypes","category","parse","options","geopackage","sqlJsCDN","gis","format"],"mappings":"AACA,OAAOA,eAAP,IAAyBC,iBAAzB,QAAiD,wBAAjD;AAKA,MAAMC,OAAO,GAAG,QAAhB;AAeA,OAAO,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,EAAEX,eARyC;AAShDY,EAAAA,OAAO,EAAE;AACPC,IAAAA,UAAU,EAAE;AACVC,MAAAA,QAAQ,EAAEb;AADA,KADL;AAIPc,IAAAA,GAAG,EAAE;AACHC,MAAAA,MAAM,EAAE;AADL;AAJE;AATuC,CAA3C","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"],"file":"geopackage-loader.js"}
1
+ {"version":3,"file":"geopackage-loader.js","names":["parseGeoPackage","DEFAULT_SQLJS_CDN","VERSION","GeoPackageLoader","id","name","module","version","extensions","mimeTypes","category","parse","options","geopackage","sqlJsCDN","gis","format"],"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,OAAOA,eAAe,IAAGC,iBAAiB,QAAO,wBAAwB;;AAKzE,MAAMC,OAAO,GAAG,QAAQ;AAexB,OAAO,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,EAAEX,eAAe;EACtBY,OAAO,EAAE;IACPC,UAAU,EAAE;MACVC,QAAQ,EAAEb;IACZ,CAAC;IACDc,GAAG,EAAE;MACHC,MAAM,EAAE;IACV;EACF;AACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts"],"names":["GeoPackageLoader"],"mappings":"AAAA,SAAQA,gBAAR,QAA+B,qBAA/B","sourcesContent":["export {GeoPackageLoader} from './geopackage-loader';\n"],"file":"index.js"}
1
+ {"version":3,"file":"index.js","names":["GeoPackageLoader"],"sources":["../../src/index.ts"],"sourcesContent":["export {GeoPackageLoader} from './geopackage-loader';\n"],"mappings":"AAAA,SAAQA,gBAAgB,QAAO,qBAAqB"}
@@ -1,9 +1,12 @@
1
+
2
+
1
3
  import initSqlJs from 'sql.js';
2
4
  import { WKBLoader } from '@loaders.gl/wkt';
3
5
  import { Schema, Field, Bool, Utf8, Float64, Int32, Int8, Int16, Float32, Binary } from '@loaders.gl/schema';
4
6
  import { binaryToGeometry, transformGeoJsonCoords } from '@loaders.gl/gis';
5
7
  import { Proj4Projection } from '@math.gl/proj4';
6
8
  export const DEFAULT_SQLJS_CDN = 'https://cdnjs.cloudflare.com/ajax/libs/sql.js/1.5.0/';
9
+
7
10
  const ENVELOPE_BYTE_LENGTHS = {
8
11
  0: 0,
9
12
  1: 32,
@@ -14,6 +17,7 @@ const ENVELOPE_BYTE_LENGTHS = {
14
17
  6: 0,
15
18
  7: 0
16
19
  };
20
+
17
21
  const SQL_TYPE_MAPPING = {
18
22
  BOOLEAN: Bool,
19
23
  TINYINT: Int8,
@@ -49,11 +53,11 @@ export default async function parseGeoPackage(arrayBuffer, options) {
49
53
  const db = await loadDatabase(arrayBuffer, sqlJsCDN);
50
54
  const tables = listVectorTables(db);
51
55
  const projections = getProjections(db);
56
+
52
57
  const outputTables = {
53
58
  shape: 'tables',
54
59
  tables: []
55
60
  };
56
-
57
61
  for (const table of tables) {
58
62
  const {
59
63
  table_name: tableName
@@ -66,17 +70,14 @@ export default async function parseGeoPackage(arrayBuffer, options) {
66
70
  })
67
71
  });
68
72
  }
69
-
70
73
  if (format === 'geojson') {
71
74
  return formatTablesAsGeojson(outputTables);
72
75
  }
73
-
74
76
  return outputTables;
75
77
  }
76
78
 
77
79
  async function loadDatabase(arrayBuffer, sqlJsCDN) {
78
80
  let SQL;
79
-
80
81
  if (sqlJsCDN) {
81
82
  SQL = await initSqlJs({
82
83
  locateFile: file => "".concat(sqlJsCDN).concat(file)
@@ -84,35 +85,34 @@ async function loadDatabase(arrayBuffer, sqlJsCDN) {
84
85
  } else {
85
86
  SQL = await initSqlJs();
86
87
  }
87
-
88
88
  return new SQL.Database(new Uint8Array(arrayBuffer));
89
89
  }
90
90
 
91
91
  function listVectorTables(db) {
92
+
92
93
  const stmt = db.prepare("SELECT * FROM gpkg_contents WHERE data_type='features';");
93
94
  const vectorTablesInfo = [];
94
-
95
95
  while (stmt.step()) {
96
96
  const vectorTableInfo = stmt.getAsObject();
97
97
  vectorTablesInfo.push(vectorTableInfo);
98
98
  }
99
-
100
99
  return vectorTablesInfo;
101
100
  }
102
101
 
103
- function getVectorTable(db, tableName, projections, {
104
- reproject,
105
- _targetCrs
106
- }) {
102
+ function getVectorTable(db, tableName, projections, _ref) {
103
+ let {
104
+ reproject,
105
+ _targetCrs
106
+ } = _ref;
107
107
  const dataColumns = getDataColumns(db, tableName);
108
108
  const geomColumn = getGeometryColumn(db, tableName);
109
109
  const featureIdColumn = getFeatureIdName(db, tableName);
110
+
110
111
  const {
111
112
  columns,
112
113
  values
113
114
  } = db.exec("SELECT * FROM `".concat(tableName, "`;"))[0];
114
115
  let projection;
115
-
116
116
  if (reproject) {
117
117
  const geomColumnProjStr = projections[geomColumn.srs_id];
118
118
  projection = new Proj4Projection({
@@ -120,16 +120,13 @@ function getVectorTable(db, tableName, projections, {
120
120
  to: _targetCrs
121
121
  });
122
122
  }
123
-
124
123
  const geojsonFeatures = [];
125
-
126
124
  for (const row of values) {
127
- const geojsonFeature = constructGeoJsonFeature(columns, row, geomColumn, dataColumns, featureIdColumn);
125
+ const geojsonFeature = constructGeoJsonFeature(columns, row, geomColumn,
126
+ dataColumns, featureIdColumn);
128
127
  geojsonFeatures.push(geojsonFeature);
129
128
  }
130
-
131
129
  const schema = getArrowSchema(db, tableName);
132
-
133
130
  if (projection) {
134
131
  return {
135
132
  data: transformGeoJsonCoords(geojsonFeatures, projection.project),
@@ -137,7 +134,6 @@ function getVectorTable(db, tableName, projections, {
137
134
  shape: 'object-row-table'
138
135
  };
139
136
  }
140
-
141
137
  return {
142
138
  data: geojsonFeatures,
143
139
  schema,
@@ -148,7 +144,6 @@ function getVectorTable(db, tableName, projections, {
148
144
  function getProjections(db) {
149
145
  const stmt = db.prepare('SELECT * FROM gpkg_spatial_ref_sys;');
150
146
  const projectionMapping = {};
151
-
152
147
  while (stmt.step()) {
153
148
  const srsInfo = stmt.getAsObject();
154
149
  const {
@@ -157,17 +152,16 @@ function getProjections(db) {
157
152
  } = srsInfo;
158
153
  projectionMapping[srs_id] = definition;
159
154
  }
160
-
161
155
  return projectionMapping;
162
156
  }
163
157
 
164
158
  function constructGeoJsonFeature(columns, row, geomColumn, dataColumns, featureIdColumn) {
165
159
  const idIdx = columns.indexOf(featureIdColumn);
166
160
  const id = row[idIdx];
161
+
167
162
  const geomColumnIdx = columns.indexOf(geomColumn.column_name);
168
163
  const geometry = parseGeometry(row[geomColumnIdx].buffer);
169
164
  const properties = {};
170
-
171
165
  if (dataColumns) {
172
166
  for (const [key, value] of Object.entries(dataColumns)) {
173
167
  const idx = columns.indexOf(key);
@@ -178,12 +172,10 @@ function constructGeoJsonFeature(columns, row, geomColumn, dataColumns, featureI
178
172
  if (i === idIdx || i === geomColumnIdx) {
179
173
  continue;
180
174
  }
181
-
182
175
  const columnName = columns[i];
183
176
  properties[columnName] = row[i];
184
177
  }
185
178
  }
186
-
187
179
  return {
188
180
  id,
189
181
  type: 'Feature',
@@ -194,41 +186,37 @@ function constructGeoJsonFeature(columns, row, geomColumn, dataColumns, featureI
194
186
 
195
187
  function getGeopackageVersion(db) {
196
188
  const textDecoder = new TextDecoder();
189
+
197
190
  const applicationIdQuery = db.exec('PRAGMA application_id;')[0];
198
191
  const applicationId = applicationIdQuery.values[0][0];
192
+
199
193
  const buffer = new ArrayBuffer(4);
200
194
  const view = new DataView(buffer);
201
195
  view.setInt32(0, Number(applicationId));
202
196
  const versionString = textDecoder.decode(buffer);
203
-
204
197
  if (versionString === 'GP10') {
205
198
  return '1.0';
206
199
  }
207
-
208
200
  if (versionString === 'GP11') {
209
201
  return '1.1';
210
202
  }
211
203
 
212
204
  const userVersionQuery = db.exec('PRAGMA user_version;')[0];
213
205
  const userVersionInt = userVersionQuery.values[0][0];
214
-
215
206
  if (userVersionInt && userVersionInt < 10300) {
216
207
  return '1.2';
217
208
  }
218
-
219
209
  return null;
220
210
  }
221
211
 
222
212
  function getFeatureIdName(db, tableName) {
223
213
  const stmt = db.prepare("PRAGMA table_info(`".concat(tableName, "`)"));
224
-
225
214
  while (stmt.step()) {
226
215
  const pragmaTableInfo = stmt.getAsObject();
227
216
  const {
228
217
  name,
229
218
  pk
230
219
  } = pragmaTableInfo;
231
-
232
220
  if (pk) {
233
221
  return name;
234
222
  }
@@ -249,12 +237,14 @@ function parseGeometry(arrayBuffer) {
249
237
  }
250
238
 
251
239
  const wkbOffset = 8 + envelopeLength;
240
+
252
241
  const binaryGeometry = WKBLoader.parseSync(arrayBuffer.slice(wkbOffset));
253
242
  return binaryToGeometry(binaryGeometry);
254
243
  }
255
244
 
256
245
  function parseGeometryBitFlags(byte) {
257
246
  const envelopeValue = (byte & 0b00001110) / 2;
247
+
258
248
  const envelopeLength = ENVELOPE_BYTE_LENGTHS[envelopeValue];
259
249
  return {
260
250
  littleEndian: Boolean(byte & 0b00000001),
@@ -269,6 +259,7 @@ function getGeometryColumn(db, tableName) {
269
259
  stmt.bind({
270
260
  ':tableName': tableName
271
261
  });
262
+
272
263
  stmt.step();
273
264
  const geometryColumn = stmt.getAsObject();
274
265
  return geometryColumn;
@@ -276,22 +267,19 @@ function getGeometryColumn(db, tableName) {
276
267
 
277
268
  function getDataColumns(db, tableName) {
278
269
  let stmt;
279
-
280
270
  try {
281
271
  stmt = db.prepare('SELECT * FROM gpkg_data_columns WHERE table_name=:tableName;');
282
272
  } catch (error) {
283
273
  if (error.message.includes('no such table')) {
284
274
  return null;
285
275
  }
286
-
287
276
  throw error;
288
277
  }
289
-
290
278
  stmt.bind({
291
279
  ':tableName': tableName
292
280
  });
293
- const result = {};
294
281
 
282
+ const result = {};
295
283
  while (stmt.step()) {
296
284
  const column = stmt.getAsObject();
297
285
  const {
@@ -300,14 +288,12 @@ function getDataColumns(db, tableName) {
300
288
  } = column;
301
289
  result[column_name] = name || null;
302
290
  }
303
-
304
291
  return result;
305
292
  }
306
293
 
307
294
  function getArrowSchema(db, tableName) {
308
295
  const stmt = db.prepare("PRAGMA table_info(`".concat(tableName, "`)"));
309
296
  const fields = [];
310
-
311
297
  while (stmt.step()) {
312
298
  const pragmaTableInfo = stmt.getAsObject();
313
299
  const {
@@ -319,17 +305,13 @@ function getArrowSchema(db, tableName) {
319
305
  const field = new Field(name, schemaType, !notnull);
320
306
  fields.push(field);
321
307
  }
322
-
323
308
  return new Schema(fields);
324
309
  }
325
-
326
310
  function formatTablesAsGeojson(tables) {
327
311
  const geojsonMap = {};
328
-
329
312
  for (const table of tables.tables) {
330
313
  geojsonMap[table.name] = table.table.data;
331
314
  }
332
-
333
315
  return geojsonMap;
334
316
  }
335
317
  //# sourceMappingURL=parse-geopackage.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/parse-geopackage.ts"],"names":["initSqlJs","WKBLoader","Schema","Field","Bool","Utf8","Float64","Int32","Int8","Int16","Float32","Binary","binaryToGeometry","transformGeoJsonCoords","Proj4Projection","DEFAULT_SQLJS_CDN","ENVELOPE_BYTE_LENGTHS","SQL_TYPE_MAPPING","BOOLEAN","TINYINT","SMALLINT","MEDIUMINT","INT","INTEGER","FLOAT","DOUBLE","REAL","TEXT","BLOB","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","locateFile","file","Database","Uint8Array","stmt","prepare","vectorTablesInfo","step","vectorTableInfo","getAsObject","dataColumns","getDataColumns","geomColumn","getGeometryColumn","featureIdColumn","getFeatureIdName","columns","values","exec","projection","geomColumnProjStr","srs_id","from","to","geojsonFeatures","row","geojsonFeature","constructGeoJsonFeature","schema","getArrowSchema","data","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","parseSync","slice","byte","envelopeValue","littleEndian","Boolean","extendedGeometryType","bind","geometryColumn","error","message","includes","result","column","fields","notnull","schemaType","field","geojsonMap"],"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 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 && 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"],"file":"parse-geopackage.js"}
1
+ {"version":3,"file":"parse-geopackage.js","names":["initSqlJs","WKBLoader","Schema","Field","Bool","Utf8","Float64","Int32","Int8","Int16","Float32","Binary","binaryToGeometry","transformGeoJsonCoords","Proj4Projection","DEFAULT_SQLJS_CDN","ENVELOPE_BYTE_LENGTHS","SQL_TYPE_MAPPING","BOOLEAN","TINYINT","SMALLINT","MEDIUMINT","INT","INTEGER","FLOAT","DOUBLE","REAL","TEXT","BLOB","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","locateFile","file","Database","Uint8Array","stmt","prepare","vectorTablesInfo","step","vectorTableInfo","getAsObject","dataColumns","getDataColumns","geomColumn","getGeometryColumn","featureIdColumn","getFeatureIdName","columns","values","exec","projection","geomColumnProjStr","srs_id","from","to","geojsonFeatures","row","geojsonFeature","constructGeoJsonFeature","schema","getArrowSchema","data","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","parseSync","slice","byte","envelopeValue","littleEndian","Boolean","extendedGeometryType","bind","geometryColumn","error","message","includes","result","column","fields","notnull","schemaType","field","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 && 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 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"types.js"}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../../src/lib/types.ts"],"sourcesContent":["/* eslint-disable camelcase */\nexport interface GeometryBitFlags {\n littleEndian: boolean;\n envelopeLength: number;\n emptyGeometry: boolean;\n extendedGeometryType: boolean;\n}\n\nexport type ProjectionMapping = {[srsId: number]: string};\nexport type DataColumnsMapping = {[columnName: string]: string | null};\nexport type SQLiteTypes =\n | 'BOOLEAN'\n | 'TINYINT'\n | 'SMALLINT'\n | 'MEDIUMINT'\n | 'INT'\n | 'INTEGER'\n | 'FLOAT'\n | 'DOUBLE'\n | 'REAL'\n | 'TEXT'\n | 'BLOB'\n | 'DATE'\n | 'DATETIME';\n\n/** Type names for geopackage geometries\n *\n * As defined in https://www.geopackage.org/spec130/index.html#table_column_data_types, geometries\n * can be stored with any geometry name listed here:\n * https://www.geopackage.org/spec130/index.html#geometry_types\n */\nexport type GeoPackageGeometryTypes =\n | 'GEOMETRY'\n | 'POINT'\n | 'LINESTRING'\n | 'POLYGON'\n | 'MULTIPOINT'\n | 'MULTILINESTRING'\n | 'MULTIPOLYGON'\n | 'GEOMETRYCOLLECTION';\n\n/**\n * https://www.geopackage.org/spec121/#spatial_ref_sys\n */\nexport interface SpatialRefSysRow {\n /**\n * Human readable name of this SRS\n */\n srs_name: string;\n\n /**\n * Unique identifier for each Spatial Reference System within a GeoPackage\n */\n srs_id: number;\n\n /**\n * Case-insensitive name of the defining organization e.g. EPSG or epsg\n */\n organization: string;\n\n /**\n * Numeric ID of the Spatial Reference System assigned by the organization\n */\n organization_coordsys_id: number;\n\n /**\n * Well-known Text [A32] Representation of the Spatial Reference System\n */\n definition: string;\n\n /**\n * Human readable description of this SRS\n */\n description?: string;\n}\n\n/**\n * https://www.geopackage.org/spec121/#_contents\n */\nexport interface ContentsRow {\n /**\n * The name of the actual content (e.g., tiles, features, or attributes) table\n */\n table_name: string;\n\n /**\n * Type of data stored in the table\n */\n data_type: 'features' | 'attributes' | 'tiles';\n\n /**\n * A human-readable identifier (e.g. short name) for the table_name content\n */\n identifier?: string;\n\n /**\n * A human-readable description for the table_name content\n */\n description?: string;\n\n /**\n * timestamp of last change to content, in ISO 8601 format\n */\n last_change: string;\n\n /**\n * Bounding box minimum easting or longitude for all content in table_name. If tiles, this is informational and the tile matrix set should be used for calculating tile coordinates.\n */\n min_x?: number;\n\n /**\n * Bounding box minimum northing or latitude for all content in table_name. If tiles, this is informational and the tile matrix set should be used for calculating tile coordinates.\n */\n min_y?: number;\n /**\n * Bounding box maximum easting or longitude for all content in table_name. If tiles, this is informational and the tile matrix set should be used for calculating tile coordinates.\n */\n max_x?: number;\n\n /**\n * Bounding box maximum northing or latitude for all content in table_name. If tiles, this is informational and the tile matrix set should be used for calculating tile coordinates.\n */\n max_y?: number;\n\n /**\n * Spatial Reference System ID: gpkg_spatial_ref_sys.srs_id; when data_type is features, SHALL also match gpkg_geometry_columns.srs_id; When data_type is tiles, SHALL also match gpkg_tile_matrix_set.srs_id\n */\n srs_id?: number;\n}\n\n// https://www.geopackage.org/spec121/#geometry_types_extension\ntype GeometryType =\n | 'GEOMETRY'\n | 'POINT'\n | 'LINESTRING'\n | 'POLYGON'\n | 'MULTIPOINT'\n | 'MULTILINESTRING'\n | 'MULTIPOLYGON'\n | 'GEOMETRYCOLLECTION'\n | 'CIRCULARSTRING'\n | 'COMPOUNDCURVE'\n | 'CURVEPOLYGON'\n | 'MULTICURVE'\n | 'MULTISURFACE'\n | 'CURVE'\n | 'SURFACE';\n\n/**\n * https://www.geopackage.org/spec121/#_geometry_columns\n */\nexport interface GeometryColumnsRow {\n /**\n * Name of the table containing the geometry column\n */\n table_name: string;\n\n /**\n * Name of a column in the feature table that is a Geometry Column\n */\n column_name: string;\n\n /**\n * Name from Geometry Type Codes (Core) or Geometry Type Codes (Extension) in Geometry Types (Normative)\n */\n geometry_type_name: GeometryType;\n\n /**\n * Spatial Reference System ID: gpkg_spatial_ref_sys.srs_id\n */\n srs_id: number;\n\n /**\n * 0: z values prohibited; 1: z values mandatory; 2: z values optional\n */\n z: 0 | 1 | 2;\n\n /**\n * 0: m values prohibited; 1: m values mandatory; 2: m values optional\n */\n m: 0 | 1 | 2;\n}\n\n/**\n * https://www.geopackage.org/spec121/#extensions_table_definition\n */\nexport interface ExtensionsRow {\n /**\n * Name of the table that requires the extension. When NULL, the extension is required for the entire GeoPackage. SHALL NOT be NULL when the column_name is not NULL.\n */\n table_name?: string;\n\n /**\n * Name of the column that requires the extension. When NULL, the extension is required for the entire table.\n */\n column_name?: string;\n\n /**\n * The case sensitive name of the extension that is required, in the form <author>_<extension_name>.\n */\n extension_name: string;\n\n /**\n * Permalink, URI, or reference to a document that defines the extension\n */\n definition: string;\n\n /**\n * Indicates scope of extension effects on readers / writers: 'read-write' or 'write-only' in lowercase.\n */\n scope: string;\n}\n\n/**\n * https://www.geopackage.org/spec121/#gpkg_data_columns_cols\n */\nexport interface DataColumnsRow {\n /**\n * Name of the tiles or feature table\n */\n table_name: string;\n\n /**\n * Name of the table column\n */\n column_name: string;\n\n /**\n * A human-readable identifier (e.g. short name) for the column_name content\n */\n name?: string;\n\n /**\n * A human-readable formal title for the column_name content\n */\n title?: string;\n\n /**\n * A human-readable description for the column_name content\n */\n description?: string;\n\n /**\n * MIME [A21] type of column_name if BLOB type, or NULL for other types\n */\n mime_type?: string;\n\n /**\n * Column value constraint name (lowercase) specified by reference to gpkg_data_column_constraints.constraint name\n */\n constraint_name?: string;\n}\n\n/**\n * Type for PRAGMA table_info(tableName);\n */\nexport interface PragmaTableInfoRow {\n cid: number;\n name: string;\n type: SQLiteTypes;\n notnull: 0 | 1;\n dflt_value: any;\n pk: 0 | 1;\n}\n"],"mappings":""}
@@ -1,5 +1,5 @@
1
1
  import type { LoaderWithParser, LoaderOptions } from '@loaders.gl/loader-utils';
2
- export declare type GeoPackageLoaderOptions = LoaderOptions & {
2
+ export type GeoPackageLoaderOptions = LoaderOptions & {
3
3
  geopackage?: {
4
4
  sqlJsCDN: string | null;
5
5
  };
@@ -1 +1 @@
1
- {"version":3,"file":"geopackage-loader.d.ts","sourceRoot":"","sources":["../src/geopackage-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,gBAAgB,EAAE,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAQ9E,oBAAY,uBAAuB,GAAG,aAAa,GAAG;IACpD,UAAU,CAAC,EAAE;QAEX,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;KACzB,CAAC;IACF,GAAG,CAAC,EAAE;QACJ,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,MAAM,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;KAC/B,CAAC;CACH,CAAC;AAEF,wBAAwB;AACxB,eAAO,MAAM,gBAAgB,EAAE,gBAiB9B,CAAC"}
1
+ {"version":3,"file":"geopackage-loader.d.ts","sourceRoot":"","sources":["../src/geopackage-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,gBAAgB,EAAE,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAQ9E,MAAM,MAAM,uBAAuB,GAAG,aAAa,GAAG;IACpD,UAAU,CAAC,EAAE;QAEX,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;KACzB,CAAC;IACF,GAAG,CAAC,EAAE;QACJ,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,MAAM,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;KAC/B,CAAC;CACH,CAAC;AAEF,wBAAwB;AACxB,eAAO,MAAM,gBAAgB,EAAE,gBAiB9B,CAAC"}
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -4,20 +4,20 @@ export interface GeometryBitFlags {
4
4
  emptyGeometry: boolean;
5
5
  extendedGeometryType: boolean;
6
6
  }
7
- export declare type ProjectionMapping = {
7
+ export type ProjectionMapping = {
8
8
  [srsId: number]: string;
9
9
  };
10
- export declare type DataColumnsMapping = {
10
+ export type DataColumnsMapping = {
11
11
  [columnName: string]: string | null;
12
12
  };
13
- export declare type SQLiteTypes = 'BOOLEAN' | 'TINYINT' | 'SMALLINT' | 'MEDIUMINT' | 'INT' | 'INTEGER' | 'FLOAT' | 'DOUBLE' | 'REAL' | 'TEXT' | 'BLOB' | 'DATE' | 'DATETIME';
13
+ export type SQLiteTypes = 'BOOLEAN' | 'TINYINT' | 'SMALLINT' | 'MEDIUMINT' | 'INT' | 'INTEGER' | 'FLOAT' | 'DOUBLE' | 'REAL' | 'TEXT' | 'BLOB' | 'DATE' | 'DATETIME';
14
14
  /** Type names for geopackage geometries
15
15
  *
16
16
  * As defined in https://www.geopackage.org/spec130/index.html#table_column_data_types, geometries
17
17
  * can be stored with any geometry name listed here:
18
18
  * https://www.geopackage.org/spec130/index.html#geometry_types
19
19
  */
20
- export declare type GeoPackageGeometryTypes = 'GEOMETRY' | 'POINT' | 'LINESTRING' | 'POLYGON' | 'MULTIPOINT' | 'MULTILINESTRING' | 'MULTIPOLYGON' | 'GEOMETRYCOLLECTION';
20
+ export type GeoPackageGeometryTypes = 'GEOMETRY' | 'POINT' | 'LINESTRING' | 'POLYGON' | 'MULTIPOINT' | 'MULTILINESTRING' | 'MULTIPOLYGON' | 'GEOMETRYCOLLECTION';
21
21
  /**
22
22
  * https://www.geopackage.org/spec121/#spatial_ref_sys
23
23
  */
@@ -92,7 +92,7 @@ export interface ContentsRow {
92
92
  */
93
93
  srs_id?: number;
94
94
  }
95
- declare type GeometryType = 'GEOMETRY' | 'POINT' | 'LINESTRING' | 'POLYGON' | 'MULTIPOINT' | 'MULTILINESTRING' | 'MULTIPOLYGON' | 'GEOMETRYCOLLECTION' | 'CIRCULARSTRING' | 'COMPOUNDCURVE' | 'CURVEPOLYGON' | 'MULTICURVE' | 'MULTISURFACE' | 'CURVE' | 'SURFACE';
95
+ type GeometryType = 'GEOMETRY' | 'POINT' | 'LINESTRING' | 'POLYGON' | 'MULTIPOINT' | 'MULTILINESTRING' | 'MULTIPOLYGON' | 'GEOMETRYCOLLECTION' | 'CIRCULARSTRING' | 'COMPOUNDCURVE' | 'CURVEPOLYGON' | 'MULTICURVE' | 'MULTISURFACE' | 'CURVE' | 'SURFACE';
96
96
  /**
97
97
  * https://www.geopackage.org/spec121/#_geometry_columns
98
98
  */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"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.3.0-alpha.1",
4
+ "version": "3.3.0-alpha.10",
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.3.0-alpha.1",
29
- "@loaders.gl/schema": "3.3.0-alpha.1",
30
- "@loaders.gl/wkt": "3.3.0-alpha.1",
28
+ "@loaders.gl/gis": "3.3.0-alpha.10",
29
+ "@loaders.gl/schema": "3.3.0-alpha.10",
30
+ "@loaders.gl/wkt": "3.3.0-alpha.10",
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": "85ed2df7d17dd0d204c8bd8feb44779f70bc693b"
35
+ "gitHead": "53bc8d3f18fbc3445a00f8509038479119895c78"
36
36
  }