@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.
- package/dist/es5/bundle.js +0 -1
- package/dist/es5/bundle.js.map +1 -1
- package/dist/es5/geopackage-loader.js +0 -5
- package/dist/es5/geopackage-loader.js.map +1 -1
- package/dist/es5/index.js +0 -1
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/lib/parse-geopackage.js +27 -81
- package/dist/es5/lib/parse-geopackage.js.map +1 -1
- package/dist/es5/lib/types.js.map +1 -1
- package/dist/esm/bundle.js +1 -1
- package/dist/esm/bundle.js.map +1 -1
- package/dist/esm/geopackage-loader.js +1 -0
- package/dist/esm/geopackage-loader.js.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/parse-geopackage.js +21 -39
- package/dist/esm/lib/parse-geopackage.js.map +1 -1
- package/dist/esm/lib/types.js.map +1 -1
- package/dist/geopackage-loader.d.ts +1 -1
- package/dist/geopackage-loader.d.ts.map +1 -1
- package/dist/geopackage-loader.js +5 -1
- package/dist/lib/types.d.ts +5 -5
- package/dist/lib/types.d.ts.map +1 -1
- package/package.json +5 -5
package/dist/es5/bundle.js
CHANGED
package/dist/es5/bundle.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
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,"
|
|
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
package/dist/es5/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
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
|
-
|
|
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
|
-
|
|
202
|
-
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
272
|
-
|
|
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
|
-
|
|
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
|
-
|
|
344
|
-
|
|
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
|
-
|
|
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
|
-
|
|
414
|
-
|
|
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
|
-
|
|
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":";;;;;;;;;;;AAEA;AACA;AACA;AAiBA;AACA;AAA+C;AAAA;AAAA;AAgBxC,IAAMA,iBAAiB,GAAG,sDAAsD;;AAAC;AAGxF,IAAMC,qBAAqB,GAAG;EAC5B,CAAC,EAAE,CAAC;EACJ,CAAC,EAAE,EAAE;EACL,CAAC,EAAE,EAAE;EACL,CAAC,EAAE,EAAE;EACL,CAAC,EAAE,EAAE;EAEL,CAAC,EAAE,CAAC;EACJ,CAAC,EAAE,CAAC;EACJ,CAAC,EAAE;AACL,CAAC;;AAGD,IAAMC,gBAAoF,GAAG;EAC3FC,OAAO,EAAEC,YAAI;EACbC,OAAO,EAAEC,YAAI;EACbC,QAAQ,EAAEC,aAAK;EACfC,SAAS,EAAEC,aAAK;EAChBC,GAAG,EAAED,aAAK;EACVE,OAAO,EAAEF,aAAK;EACdG,KAAK,EAAEC,eAAO;EACdC,MAAM,EAAEC,eAAO;EACfC,IAAI,EAAED,eAAO;EACbE,IAAI,EAAEC,YAAI;EACVC,IAAI,EAAEC,cAAM;EACZC,IAAI,EAAEH,YAAI;EACVI,QAAQ,EAAEJ,YAAI;EACdK,QAAQ,EAAEH,cAAM;EAChBI,KAAK,EAAEJ,cAAM;EACbK,UAAU,EAAEL,cAAM;EAClBM,OAAO,EAAEN,cAAM;EACfO,UAAU,EAAEP,cAAM;EAClBQ,eAAe,EAAER,cAAM;EACvBS,YAAY,EAAET,cAAM;EACpBU,kBAAkB,EAAEV;AACtB,CAAC;AAAC,SAE4BW,eAAe;EAAA;AAAA;AAAA;EAAA,6EAA9B,iBACbC,WAAwB,EACxBC,OAAiC;IAAA;IAAA;MAAA;QAAA;UAAA;YAAA,QAEM,CAAAA,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEC,UAAU,KAAI,CAAC,CAAC,yBAAzDC,QAAQ,EAARA,QAAQ,+BAAGpC,iBAAiB;YAAA,QACkC,CAAAkC,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEG,GAAG,KAAI,CAAC,CAAC,0BAAhFC,SAAS,EAATA,SAAS,gCAAG,KAAK,6CAAEC,UAAU,EAAVA,UAAU,iCAAG,OAAO,0CAAEC,MAAM,EAANA,MAAM,6BAAG,QAAQ;YAAA;YAAA,OAEhDC,YAAY,CAACR,WAAW,EAAEG,QAAQ,CAAC;UAAA;YAA9CM,EAAE;YACFC,MAAM,GAAGC,gBAAgB,CAACF,EAAE,CAAC;YAC7BG,WAAW,GAAGC,cAAc,CAACJ,EAAE,CAAC;YAGhCK,YAAoC,GAAG;cAC3CC,KAAK,EAAE,QAAQ;cACfL,MAAM,EAAE;YACV,CAAC;YAAA,wCAEmBA,MAAM;YAAA;cAA1B,uDAA4B;gBAAjBM,KAAK;gBACKC,SAAS,GAAID,KAAK,CAA9BE,UAAU;gBACjBJ,YAAY,CAACJ,MAAM,CAACS,IAAI,CAAC;kBACvBC,IAAI,EAAEH,SAAS;kBACfD,KAAK,EAAEK,cAAc,CAACZ,EAAE,EAAEQ,SAAS,EAAEL,WAAW,EAAE;oBAChDP,SAAS,EAATA,SAAS;oBACTC,UAAU,EAAVA;kBACF,CAAC;gBACH,CAAC,CAAC;cACJ;YAAC;cAAA;YAAA;cAAA;YAAA;YAAA,MAEGC,MAAM,KAAK,SAAS;cAAA;cAAA;YAAA;YAAA,iCACfe,qBAAqB,CAACR,YAAY,CAAC;UAAA;YAAA,iCAGrCA,YAAY;UAAA;UAAA;YAAA;QAAA;MAAA;IAAA;EAAA,CACpB;EAAA;AAAA;AAAA,SAQcN,YAAY;EAAA;AAAA;AAAA;EAAA,0EAA3B,kBAA4BR,WAAwB,EAAEG,QAAuB;IAAA;IAAA;MAAA;QAAA;UAAA;YAAA,KAGvEA,QAAQ;cAAA;cAAA;YAAA;YAAA;YAAA,OACE,IAAAoB,YAAS,EAAC;cACpBC,UAAU,EAAE,oBAACC,IAAI;gBAAA,iBAAQtB,QAAQ,SAAGsB,IAAI;cAAA;YAC1C,CAAC,CAAC;UAAA;YAFFC,GAAG;YAAA;YAAA;UAAA;YAAA;YAAA,OAIS,IAAAH,YAAS,GAAE;UAAA;YAAvBG,GAAG;UAAA;YAAA,kCAEE,IAAIA,GAAG,CAACC,QAAQ,CAAC,IAAIC,UAAU,CAAC5B,WAAW,CAAC,CAAC;UAAA;UAAA;YAAA;QAAA;MAAA;IAAA;EAAA,CACrD;EAAA;AAAA;AASD,SAASW,gBAAgB,CAACF,EAAY,EAAiB;;EAYrD,IAAMoB,IAAI,GAAGpB,EAAE,CAACqB,OAAO,CAAC,yDAAyD,CAAC;EAElF,IAAMC,gBAA+B,GAAG,EAAE;EAC1C,OAAOF,IAAI,CAACG,IAAI,EAAE,EAAE;IAClB,IAAMC,eAAe,GAAGJ,IAAI,CAACK,WAAW,EAA4B;IACpEH,gBAAgB,CAACZ,IAAI,CAACc,eAAe,CAAC;EACxC;EAEA,OAAOF,gBAAgB;AACzB;;AAUA,SAASV,cAAc,CACrBZ,EAAY,EACZQ,SAAiB,EACjBL,WAA8B,QAEd;EAAA,IADfP,SAAS,QAATA,SAAS;IAAEC,UAAU,QAAVA,UAAU;EAEtB,IAAM6B,WAAW,GAAGC,cAAc,CAAC3B,EAAE,EAAEQ,SAAS,CAAC;EACjD,IAAMoB,UAAU,GAAGC,iBAAiB,CAAC7B,EAAE,EAAEQ,SAAS,CAAC;EACnD,IAAMsB,eAAe,GAAGC,gBAAgB,CAAC/B,EAAE,EAAEQ,SAAS,CAAC;;EAIvD,gBAA0BR,EAAE,CAACgC,IAAI,0BAAoBxB,SAAS,QAAM,CAAC,CAAC,CAAC;IAAhEyB,OAAO,aAAPA,OAAO;IAAEC,MAAM,aAANA,MAAM;EAEtB,IAAIC,UAAU;EACd,IAAIvC,SAAS,EAAE;IACb,IAAMwC,iBAAiB,GAAGjC,WAAW,CAACyB,UAAU,CAACS,MAAM,CAAC;IACxDF,UAAU,GAAG,IAAIG,qBAAe,CAAC;MAC/BC,IAAI,EAAEH,iBAAiB;MACvBI,EAAE,EAAE3C;IACN,CAAC,CAAC;EACJ;EAEA,IAAM4C,eAAyB,GAAG,EAAE;EAAC,2CACnBP,MAAM;IAAA;EAAA;IAAxB,oDAA0B;MAAA,IAAfQ,GAAG;MACZ,IAAMC,cAAc,GAAGC,uBAAuB,CAC5CX,OAAO,EACPS,GAAG,EACHd,UAAU;MAEVF,WAAW,EACXI,eAAe,CAChB;MACDW,eAAe,CAAC/B,IAAI,CAACiC,cAAc,CAAC;IACtC;EAAC;IAAA;EAAA;IAAA;EAAA;EAED,IAAME,MAAM,GAAGC,cAAc,CAAC9C,EAAE,EAAEQ,SAAS,CAAC;EAC5C,IAAI2B,UAAU,EAAE;IACd,OAAO;MACLY,IAAI,EAAE,IAAAC,2BAAsB,EAACP,eAAe,EAAEN,UAAU,CAACc,OAAO,CAAC;MACjEJ,MAAM,EAANA,MAAM;MACNvC,KAAK,EAAE;IACT,CAAC;EACH;EAEA,OAAO;IAACyC,IAAI,EAAEN,eAAe;IAAEI,MAAM,EAANA,MAAM;IAAEvC,KAAK,EAAE;EAAkB,CAAC;AACnE;;AAQA,SAASF,cAAc,CAACJ,EAAY,EAAqB;EAEvD,IAAMoB,IAAI,GAAGpB,EAAE,CAACqB,OAAO,CAAC,qCAAqC,CAAC;EAE9D,IAAM6B,iBAAoC,GAAG,CAAC,CAAC;EAC/C,OAAO9B,IAAI,CAACG,IAAI,EAAE,EAAE;IAClB,IAAM4B,OAAO,GAAG/B,IAAI,CAACK,WAAW,EAAiC;IACjE,IAAOY,MAAM,GAAgBc,OAAO,CAA7Bd,MAAM;MAAEe,UAAU,GAAID,OAAO,CAArBC,UAAU;IACzBF,iBAAiB,CAACb,MAAM,CAAC,GAAGe,UAAU;EACxC;EAEA,OAAOF,iBAAiB;AAC1B;;AAUA,SAASN,uBAAuB,CAC9BX,OAAiB,EACjBS,GAAU,EACVd,UAA8B,EAC9BF,WAA+B,EAC/BI,eAAuB,EACG;EAE1B,IAAMuB,KAAK,GAAGpB,OAAO,CAACqB,OAAO,CAACxB,eAAe,CAAC;EAC9C,IAAMyB,EAAE,GAAGb,GAAG,CAACW,KAAK,CAAC;;EAGrB,IAAMG,aAAa,GAAGvB,OAAO,CAACqB,OAAO,CAAC1B,UAAU,CAAC6B,WAAW,CAAC;EAC7D,IAAMC,QAAQ,GAAGC,aAAa,CAACjB,GAAG,CAACc,aAAa,CAAC,CAACI,MAAM,CAAC;EAEzD,IAAMC,UAAU,GAAG,CAAC,CAAC;EACrB,IAAInC,WAAW,EAAE;IACf,mCAA2BoC,MAAM,CAACC,OAAO,CAACrC,WAAW,CAAC,qCAAE;MAAnD;QAAOsC,GAAG;QAAEC,KAAK;MACpB,IAAMC,GAAG,GAAGjC,OAAO,CAACqB,OAAO,CAACU,GAAG,CAAC;MAEhCH,UAAU,CAACI,KAAK,CAAC,GAAGvB,GAAG,CAACwB,GAAG,CAAC;IAC9B;EACF,CAAC,MAAM;IAEL,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGlC,OAAO,CAACmC,MAAM,EAAED,CAAC,EAAE,EAAE;MACvC,IAAIA,CAAC,KAAKd,KAAK,IAAIc,CAAC,KAAKX,aAAa,EAAE;QAEtC;MACF;MAEA,IAAMa,UAAU,GAAGpC,OAAO,CAACkC,CAAC,CAAC;MAC7BN,UAAU,CAACQ,UAAU,CAAC,GAAG3B,GAAG,CAACyB,CAAC,CAAC;IACjC;EACF;EAEA,OAAO;IACLZ,EAAE,EAAFA,EAAE;IACFe,IAAI,EAAE,SAAS;IACfZ,QAAQ,EAARA,QAAQ;IACRG,UAAU,EAAVA;EACF,CAAC;AACH;;AAUA,SAASU,oBAAoB,CAACvE,EAAY,EAAiB;EACzD,IAAMwE,WAAW,GAAG,IAAIC,WAAW,EAAE;;EAGrC,IAAMC,kBAAkB,GAAG1E,EAAE,CAACgC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;EAC/D,IAAM2C,aAAa,GAAGD,kBAAkB,CAACxC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;EAGrD,IAAM0B,MAAM,GAAG,IAAIgB,WAAW,CAAC,CAAC,CAAC;EACjC,IAAMC,IAAI,GAAG,IAAIC,QAAQ,CAAClB,MAAM,CAAC;EACjCiB,IAAI,CAACE,QAAQ,CAAC,CAAC,EAAEC,MAAM,CAACL,aAAa,CAAC,CAAC;EACvC,IAAMM,aAAa,GAAGT,WAAW,CAACU,MAAM,CAACtB,MAAM,CAAC;EAEhD,IAAIqB,aAAa,KAAK,MAAM,EAAE;IAC5B,OAAO,KAAK;EACd;EAEA,IAAIA,aAAa,KAAK,MAAM,EAAE;IAC5B,OAAO,KAAK;EACd;;EAGA,IAAME,gBAAgB,GAAGnF,EAAE,CAACgC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;EAC3D,IAAMoD,cAAc,GAAGD,gBAAgB,CAACjD,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EAEpD,IAAIkD,cAAc,IAAIA,cAAc,GAAG,KAAK,EAAE;IAC5C,OAAO,KAAK;EACd;EAEA,OAAO,IAAI;AACb;;AAWA,SAASrD,gBAAgB,CAAC/B,EAAY,EAAEQ,SAAiB,EAAiB;EAExE,IAAMY,IAAI,GAAGpB,EAAE,CAACqB,OAAO,8BAAwBb,SAAS,QAAM;EAE9D,OAAOY,IAAI,CAACG,IAAI,EAAE,EAAE;IAClB,IAAM8D,eAAe,GAAGjE,IAAI,CAACK,WAAW,EAAmC;IAC3E,IAAOd,IAAI,GAAQ0E,eAAe,CAA3B1E,IAAI;MAAE2E,EAAE,GAAID,eAAe,CAArBC,EAAE;IACf,IAAIA,EAAE,EAAE;MACN,OAAO3E,IAAI;IACb;EACF;;EAGA,OAAO,IAAI;AACb;;AAUA,SAASgD,aAAa,CAACpE,WAAwB,EAAmB;EAChE,IAAMsF,IAAI,GAAG,IAAIC,QAAQ,CAACvF,WAAW,CAAC;EACtC,4BAAwCgG,qBAAqB,CAACV,IAAI,CAACW,QAAQ,CAAC,CAAC,CAAC,CAAC;IAAxEC,cAAc,yBAAdA,cAAc;IAAEC,aAAa,yBAAbA,aAAa;;EAMpC,IAAIA,aAAa,EAAE;IACjB,OAAO,IAAI;EACb;;EAOA,IAAMC,SAAS,GAAG,CAAC,GAAGF,cAAc;;EAIpC,IAAMG,cAAc,GAAGC,cAAS,CAACC,SAAS,CAACvG,WAAW,CAACwG,KAAK,CAACJ,SAAS,CAAC,CAAC;EAExE,OAAO,IAAAK,qBAAgB,EAACJ,cAAc,CAAC;AACzC;;AASA,SAASL,qBAAqB,CAACU,IAAY,EAAoB;EAE7D,IAAMC,aAAa,GAAG,CAACD,IAAI,GAAG,EAAU,IAAI,CAAC;;EAG7C,IAAMR,cAAc,GAAGlI,qBAAqB,CAAC2I,aAAa,CAAW;EAErE,OAAO;IACLC,YAAY,EAAEC,OAAO,CAACH,IAAI,GAAG,CAAU,CAAC;IACxCR,cAAc,EAAdA,cAAc;IACdC,aAAa,EAAEU,OAAO,CAACH,IAAI,GAAG,EAAU,CAAC;IACzCI,oBAAoB,EAAED,OAAO,CAACH,IAAI,GAAG,EAAU;EACjD,CAAC;AACH;;AASA,SAASpE,iBAAiB,CAAC7B,EAAY,EAAEQ,SAAiB,EAAsB;EAC9E,IAAMY,IAAI,GAAGpB,EAAE,CAACqB,OAAO,CAAC,kEAAkE,CAAC;EAC3FD,IAAI,CAACkF,IAAI,CAAC;IAAC,YAAY,EAAE9F;EAAS,CAAC,CAAC;;EAOpCY,IAAI,CAACG,IAAI,EAAE;EACX,IAAMgF,cAAc,GAAGnF,IAAI,CAACK,WAAW,EAAmC;EAC1E,OAAO8E,cAAc;AACvB;;AAQA,SAAS5E,cAAc,CAAC3B,EAAY,EAAEQ,SAAiB,EAA6B;EAGlF,IAAIY,IAAe;EACnB,IAAI;IACFA,IAAI,GAAGpB,EAAE,CAACqB,OAAO,CAAC,8DAA8D,CAAC;EACnF,CAAC,CAAC,OAAOmF,KAAK,EAAE;IACd,IAAKA,KAAK,CAAWC,OAAO,CAACC,QAAQ,CAAC,eAAe,CAAC,EAAE;MACtD,OAAO,IAAI;IACb;IAEA,MAAMF,KAAK;EACb;EAEApF,IAAI,CAACkF,IAAI,CAAC;IAAC,YAAY,EAAE9F;EAAS,CAAC,CAAC;;EAGpC,IAAMmG,MAA0B,GAAG,CAAC,CAAC;EACrC,OAAOvF,IAAI,CAACG,IAAI,EAAE,EAAE;IAClB,IAAMqF,MAAM,GAAGxF,IAAI,CAACK,WAAW,EAA+B;IAC9D,IAAOgC,WAAW,GAAUmD,MAAM,CAA3BnD,WAAW;MAAE9C,IAAI,GAAIiG,MAAM,CAAdjG,IAAI;IACxBgG,MAAM,CAAClD,WAAW,CAAC,GAAG9C,IAAI,IAAI,IAAI;EACpC;EAEA,OAAOgG,MAAM;AACf;;AAQA,SAAS7D,cAAc,CAAC9C,EAAY,EAAEQ,SAAiB,EAAU;EAC/D,IAAMY,IAAI,GAAGpB,EAAE,CAACqB,OAAO,8BAAwBb,SAAS,QAAM;EAE9D,IAAMqG,MAAe,GAAG,EAAE;EAC1B,OAAOzF,IAAI,CAACG,IAAI,EAAE,EAAE;IAClB,IAAM8D,eAAe,GAAGjE,IAAI,CAACK,WAAW,EAAmC;IAC3E,IAAOd,IAAI,GAAmB0E,eAAe,CAAtC1E,IAAI;MAAE2D,IAAI,GAAae,eAAe,CAAhCf,IAAI;MAAEwC,OAAO,GAAIzB,eAAe,CAA1ByB,OAAO;IAC1B,IAAMC,UAAU,GAAGvJ,gBAAgB,CAAC8G,IAAI,CAAC,IAAI,IAAI9G,gBAAgB,CAAC8G,IAAI,CAAC,EAAE;IACzE,IAAM0C,KAAK,GAAG,IAAIC,aAAK,CAACtG,IAAI,EAAEoG,UAAU,EAAE,CAACD,OAAO,CAAC;IACnDD,MAAM,CAACnG,IAAI,CAACsG,KAAK,CAAC;EACpB;EAEA,OAAO,IAAIE,cAAM,CAACL,MAAM,CAAC;AAC3B;AAEA,SAAShG,qBAAqB,CAACZ,MAA8B,EAA6B;EACxF,IAAMkH,UAAU,GAAG,CAAC,CAAC;EAAC,4CACFlH,MAAM,CAACA,MAAM;IAAA;EAAA;IAAjC,uDAAmC;MAAA,IAAxBM,KAAK;MACd4G,UAAU,CAAC5G,KAAK,CAACI,IAAI,CAAC,GAAGJ,KAAK,CAACA,KAAK,CAACwC,IAAI;IAC3C;EAAC;IAAA;EAAA;IAAA;EAAA;EAED,OAAOoE,UAAU;AACnB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
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":""}
|
package/dist/esm/bundle.js
CHANGED
package/dist/esm/bundle.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
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"}
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
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
|
-
|
|
105
|
-
|
|
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,
|
|
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,"
|
|
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 +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,
|
|
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.
|
|
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];
|
package/dist/lib/types.d.ts
CHANGED
|
@@ -4,20 +4,20 @@ export interface GeometryBitFlags {
|
|
|
4
4
|
emptyGeometry: boolean;
|
|
5
5
|
extendedGeometryType: boolean;
|
|
6
6
|
}
|
|
7
|
-
export
|
|
7
|
+
export type ProjectionMapping = {
|
|
8
8
|
[srsId: number]: string;
|
|
9
9
|
};
|
|
10
|
-
export
|
|
10
|
+
export type DataColumnsMapping = {
|
|
11
11
|
[columnName: string]: string | null;
|
|
12
12
|
};
|
|
13
|
-
export
|
|
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
|
|
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
|
-
|
|
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
|
*/
|
package/dist/lib/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,oBAAoB,EAAE,OAAO,CAAC;CAC/B;AAED,
|
|
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.
|
|
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.
|
|
29
|
-
"@loaders.gl/schema": "3.3.0-alpha.
|
|
30
|
-
"@loaders.gl/wkt": "3.3.0-alpha.
|
|
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": "
|
|
35
|
+
"gitHead": "53bc8d3f18fbc3445a00f8509038479119895c78"
|
|
36
36
|
}
|