@loaders.gl/shapefile 3.4.0-alpha.1 → 3.4.0-alpha.2
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/dbf-worker.js +1 -1
- package/dist/es5/dbf-loader.js +1 -1
- package/dist/es5/lib/parsers/parse-shp.js.map +1 -1
- package/dist/es5/lib/parsers/types.js.map +1 -1
- package/dist/es5/shapefile-loader.js +1 -1
- package/dist/es5/shp-loader.js +1 -1
- package/dist/esm/dbf-loader.js +1 -1
- package/dist/esm/lib/parsers/parse-shp.js.map +1 -1
- package/dist/esm/lib/parsers/types.js.map +1 -1
- package/dist/esm/shapefile-loader.js +1 -1
- package/dist/esm/shp-loader.js +1 -1
- package/dist/lib/parsers/parse-shp.d.ts +3 -2
- package/dist/lib/parsers/parse-shp.d.ts.map +1 -1
- package/dist/lib/parsers/types.d.ts +5 -0
- package/dist/lib/parsers/types.d.ts.map +1 -1
- package/dist/shp-worker.js +1 -1
- package/package.json +5 -5
- package/src/lib/parsers/parse-shp.ts +2 -2
- package/src/lib/parsers/types.ts +5 -0
package/dist/dbf-worker.js
CHANGED
package/dist/es5/dbf-loader.js
CHANGED
|
@@ -11,7 +11,7 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
|
|
|
11
11
|
var _parseDbf = require("./lib/parsers/parse-dbf");
|
|
12
12
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
13
13
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
14
|
-
var VERSION = typeof "3.4.0-alpha.
|
|
14
|
+
var VERSION = typeof "3.4.0-alpha.2" !== 'undefined' ? "3.4.0-alpha.2" : 'latest';
|
|
15
15
|
|
|
16
16
|
var DBFWorkerLoader = {
|
|
17
17
|
name: 'DBF',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-shp.js","names":["LITTLE_ENDIAN","BIG_ENDIAN","SHP_HEADER_SIZE","SHP_RECORD_HEADER_SIZE","STATE","EXPECTING_HEADER","EXPECTING_RECORD","END","ERROR","SHPParser","options","BinaryChunkReader","maxRewindBytes","geometries","progress","bytesTotal","NaN","bytesUsed","rows","currentIndex","arrayBuffer","binaryReader","write","state","parseState","result","end","error","parseSHP","shpParser","parseSHPInBatches","asyncIterator","parser","headerReturned","header","length","dataView","getDataView","parseSHPHeader","hasAvailableBytes","recordHeaderView","recordHeader","recordNumber","getInt32","byteLength","type","rewind","invalidRecord","recordView","geometry","parseRecord","push","ended","message"],"sources":["../../../../src/lib/parsers/parse-shp.ts"],"sourcesContent":["import type {BinaryGeometry} from '@loaders.gl/schema';\nimport BinaryChunkReader from '../streaming/binary-chunk-reader';\nimport {parseSHPHeader, SHPHeader} from './parse-shp-header';\nimport {parseRecord} from './parse-shp-geometry';\nimport {SHPLoaderOptions} from './types';\n\nconst LITTLE_ENDIAN = true;\nconst BIG_ENDIAN = false;\n\nconst SHP_HEADER_SIZE = 100;\n// According to the spec, the record header is just 8 bytes, but here we set it\n// to 12 so that we can also access the record's type\nconst SHP_RECORD_HEADER_SIZE = 12;\n\nconst STATE = {\n EXPECTING_HEADER: 0,\n EXPECTING_RECORD: 1,\n END: 2,\n ERROR: 3\n};\n\ntype SHPResult = {\n geometries: (BinaryGeometry | null)[];\n header?: SHPHeader;\n error?: string;\n progress: {\n bytesUsed: number;\n bytesTotal: number;\n rows: number;\n };\n currentIndex: number;\n};\n\nclass SHPParser {\n options?: SHPLoaderOptions = {};\n binaryReader = new BinaryChunkReader({maxRewindBytes: SHP_RECORD_HEADER_SIZE});\n state = STATE.EXPECTING_HEADER;\n result: SHPResult = {\n geometries: [],\n // Initialize with number values to make TS happy\n // These are initialized for real in STATE.EXPECTING_HEADER\n progress: {\n bytesTotal: NaN,\n bytesUsed: NaN,\n rows: NaN\n },\n currentIndex: NaN\n };\n\n constructor(options?: SHPLoaderOptions) {\n this.options = options;\n }\n\n write(arrayBuffer: ArrayBuffer) {\n this.binaryReader.write(arrayBuffer);\n this.state = parseState(this.state, this.result, this.binaryReader, this.options);\n }\n\n end() {\n this.binaryReader.end();\n this.state = parseState(this.state, this.result, this.binaryReader, this.options);\n // this.result.progress.bytesUsed = this.binaryReader.bytesUsed();\n if (this.state !== STATE.END) {\n this.state = STATE.ERROR;\n this.result.error = 'SHP incomplete file';\n }\n }\n}\n\nexport function parseSHP(arrayBuffer: ArrayBuffer, options?: object): BinaryGeometry[] {\n const shpParser = new SHPParser(options);\n shpParser.write(arrayBuffer);\n shpParser.end();\n\n // @ts-ignore\n return shpParser.result;\n}\n\n/**\n * @param asyncIterator\n * @param options\n * @returns\n */\nexport async function* parseSHPInBatches(\n asyncIterator: AsyncIterable<ArrayBuffer> | Iterable<ArrayBuffer>,\n options?: object\n): AsyncIterable<BinaryGeometry | object> {\n const parser = new SHPParser(options);\n let headerReturned = false;\n for await (const arrayBuffer of asyncIterator) {\n parser.write(arrayBuffer);\n if (!headerReturned && parser.result.header) {\n headerReturned = true;\n yield parser.result.header;\n }\n\n if (parser.result.geometries.length > 0) {\n yield parser.result.geometries;\n parser.result.geometries = [];\n }\n }\n parser.end();\n if (parser.result.geometries.length > 0) {\n yield parser.result.geometries;\n }\n\n return;\n}\n\n/**\n * State-machine parser for SHP data\n *\n * Note that whenever more data is needed, a `return`, not a `break`, is\n * necessary, as the `break` keeps the context within `parseState`, while\n * `return` releases context so that more data can be written into the\n * BinaryChunkReader.\n *\n * @param state Current state\n * @param result An object to hold result data\n * @param binaryReader\n * @return State at end of current parsing\n */\n/* eslint-disable complexity, max-depth */\nfunction parseState(\n state: number,\n result: SHPResult,\n binaryReader: BinaryChunkReader,\n options?: SHPLoaderOptions\n): number {\n // eslint-disable-next-line no-constant-condition\n while (true) {\n try {\n switch (state) {\n case STATE.ERROR:\n case STATE.END:\n return state;\n\n case STATE.EXPECTING_HEADER:\n // Parse initial file header\n const dataView = binaryReader.getDataView(SHP_HEADER_SIZE);\n if (!dataView) {\n return state;\n }\n\n result.header = parseSHPHeader(dataView);\n result.progress = {\n bytesUsed: 0,\n bytesTotal: result.header.length,\n rows: 0\n };\n // index numbering starts at 1\n result.currentIndex = 1;\n state = STATE.EXPECTING_RECORD;\n break;\n\n case STATE.EXPECTING_RECORD:\n while (binaryReader.hasAvailableBytes(SHP_RECORD_HEADER_SIZE)) {\n const recordHeaderView = binaryReader.getDataView(SHP_RECORD_HEADER_SIZE) as DataView;\n const recordHeader = {\n recordNumber: recordHeaderView.getInt32(0, BIG_ENDIAN),\n // 2 byte words; includes the four words of record header\n byteLength: recordHeaderView.getInt32(4, BIG_ENDIAN) * 2,\n // This is actually part of the record, not the header...\n type: recordHeaderView.getInt32(8, LITTLE_ENDIAN)\n };\n\n if (!binaryReader.hasAvailableBytes(recordHeader.byteLength - 4)) {\n binaryReader.rewind(SHP_RECORD_HEADER_SIZE);\n return state;\n }\n\n const invalidRecord =\n recordHeader.byteLength < 4 ||\n recordHeader.type !== result.header?.type ||\n recordHeader.recordNumber !== result.currentIndex;\n\n // All records must have at least four bytes (for the record shape type)\n if (invalidRecord) {\n // Malformed record, try again, advancing just 4 bytes\n // Note: this is a rewind because binaryReader.getDataView above\n // moved the pointer forward 12 bytes, so rewinding 8 bytes still\n // leaves us 4 bytes ahead\n binaryReader.rewind(SHP_RECORD_HEADER_SIZE - 4);\n } else {\n // Note: type is actually part of the record, not the header, so\n // rewind 4 bytes before reading record\n binaryReader.rewind(4);\n\n const recordView = binaryReader.getDataView(recordHeader.byteLength) as DataView;\n const geometry = parseRecord(recordView, options);\n result.geometries.push(geometry);\n\n result.currentIndex++;\n result.progress.rows = result.currentIndex - 1;\n }\n }\n\n if (binaryReader.ended) {\n state = STATE.END;\n }\n\n return state;\n\n default:\n state = STATE.ERROR;\n result.error = `illegal parser state ${state}`;\n return state;\n }\n } catch (error) {\n state = STATE.ERROR;\n result.error = `SHP parsing failed: ${(error as Error)?.message}`;\n return state;\n }\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"parse-shp.js","names":["LITTLE_ENDIAN","BIG_ENDIAN","SHP_HEADER_SIZE","SHP_RECORD_HEADER_SIZE","STATE","EXPECTING_HEADER","EXPECTING_RECORD","END","ERROR","SHPParser","options","BinaryChunkReader","maxRewindBytes","geometries","progress","bytesTotal","NaN","bytesUsed","rows","currentIndex","arrayBuffer","binaryReader","write","state","parseState","result","end","error","parseSHP","shpParser","parseSHPInBatches","asyncIterator","parser","headerReturned","header","length","dataView","getDataView","parseSHPHeader","hasAvailableBytes","recordHeaderView","recordHeader","recordNumber","getInt32","byteLength","type","rewind","invalidRecord","recordView","geometry","parseRecord","push","ended","message"],"sources":["../../../../src/lib/parsers/parse-shp.ts"],"sourcesContent":["import type {BinaryGeometry} from '@loaders.gl/schema';\nimport BinaryChunkReader from '../streaming/binary-chunk-reader';\nimport {parseSHPHeader, SHPHeader} from './parse-shp-header';\nimport {parseRecord} from './parse-shp-geometry';\nimport {SHPLoaderOptions} from './types';\n\nconst LITTLE_ENDIAN = true;\nconst BIG_ENDIAN = false;\n\nconst SHP_HEADER_SIZE = 100;\n// According to the spec, the record header is just 8 bytes, but here we set it\n// to 12 so that we can also access the record's type\nconst SHP_RECORD_HEADER_SIZE = 12;\n\nconst STATE = {\n EXPECTING_HEADER: 0,\n EXPECTING_RECORD: 1,\n END: 2,\n ERROR: 3\n};\n\ntype SHPResult = {\n geometries: (BinaryGeometry | null)[];\n header?: SHPHeader;\n error?: string;\n progress: {\n bytesUsed: number;\n bytesTotal: number;\n rows: number;\n };\n currentIndex: number;\n};\n\nclass SHPParser {\n options?: SHPLoaderOptions = {};\n binaryReader = new BinaryChunkReader({maxRewindBytes: SHP_RECORD_HEADER_SIZE});\n state = STATE.EXPECTING_HEADER;\n result: SHPResult = {\n geometries: [],\n // Initialize with number values to make TS happy\n // These are initialized for real in STATE.EXPECTING_HEADER\n progress: {\n bytesTotal: NaN,\n bytesUsed: NaN,\n rows: NaN\n },\n currentIndex: NaN\n };\n\n constructor(options?: SHPLoaderOptions) {\n this.options = options;\n }\n\n write(arrayBuffer: ArrayBuffer) {\n this.binaryReader.write(arrayBuffer);\n this.state = parseState(this.state, this.result, this.binaryReader, this.options);\n }\n\n end() {\n this.binaryReader.end();\n this.state = parseState(this.state, this.result, this.binaryReader, this.options);\n // this.result.progress.bytesUsed = this.binaryReader.bytesUsed();\n if (this.state !== STATE.END) {\n this.state = STATE.ERROR;\n this.result.error = 'SHP incomplete file';\n }\n }\n}\n\nexport function parseSHP(arrayBuffer: ArrayBuffer, options?: SHPLoaderOptions): BinaryGeometry[] {\n const shpParser = new SHPParser(options);\n shpParser.write(arrayBuffer);\n shpParser.end();\n\n // @ts-ignore\n return shpParser.result;\n}\n\n/**\n * @param asyncIterator\n * @param options\n * @returns\n */\nexport async function* parseSHPInBatches(\n asyncIterator: AsyncIterable<ArrayBuffer> | Iterable<ArrayBuffer>,\n options?: SHPLoaderOptions\n): AsyncIterable<BinaryGeometry | object> {\n const parser = new SHPParser(options);\n let headerReturned = false;\n for await (const arrayBuffer of asyncIterator) {\n parser.write(arrayBuffer);\n if (!headerReturned && parser.result.header) {\n headerReturned = true;\n yield parser.result.header;\n }\n\n if (parser.result.geometries.length > 0) {\n yield parser.result.geometries;\n parser.result.geometries = [];\n }\n }\n parser.end();\n if (parser.result.geometries.length > 0) {\n yield parser.result.geometries;\n }\n\n return;\n}\n\n/**\n * State-machine parser for SHP data\n *\n * Note that whenever more data is needed, a `return`, not a `break`, is\n * necessary, as the `break` keeps the context within `parseState`, while\n * `return` releases context so that more data can be written into the\n * BinaryChunkReader.\n *\n * @param state Current state\n * @param result An object to hold result data\n * @param binaryReader\n * @return State at end of current parsing\n */\n/* eslint-disable complexity, max-depth */\nfunction parseState(\n state: number,\n result: SHPResult,\n binaryReader: BinaryChunkReader,\n options?: SHPLoaderOptions\n): number {\n // eslint-disable-next-line no-constant-condition\n while (true) {\n try {\n switch (state) {\n case STATE.ERROR:\n case STATE.END:\n return state;\n\n case STATE.EXPECTING_HEADER:\n // Parse initial file header\n const dataView = binaryReader.getDataView(SHP_HEADER_SIZE);\n if (!dataView) {\n return state;\n }\n\n result.header = parseSHPHeader(dataView);\n result.progress = {\n bytesUsed: 0,\n bytesTotal: result.header.length,\n rows: 0\n };\n // index numbering starts at 1\n result.currentIndex = 1;\n state = STATE.EXPECTING_RECORD;\n break;\n\n case STATE.EXPECTING_RECORD:\n while (binaryReader.hasAvailableBytes(SHP_RECORD_HEADER_SIZE)) {\n const recordHeaderView = binaryReader.getDataView(SHP_RECORD_HEADER_SIZE) as DataView;\n const recordHeader = {\n recordNumber: recordHeaderView.getInt32(0, BIG_ENDIAN),\n // 2 byte words; includes the four words of record header\n byteLength: recordHeaderView.getInt32(4, BIG_ENDIAN) * 2,\n // This is actually part of the record, not the header...\n type: recordHeaderView.getInt32(8, LITTLE_ENDIAN)\n };\n\n if (!binaryReader.hasAvailableBytes(recordHeader.byteLength - 4)) {\n binaryReader.rewind(SHP_RECORD_HEADER_SIZE);\n return state;\n }\n\n const invalidRecord =\n recordHeader.byteLength < 4 ||\n recordHeader.type !== result.header?.type ||\n recordHeader.recordNumber !== result.currentIndex;\n\n // All records must have at least four bytes (for the record shape type)\n if (invalidRecord) {\n // Malformed record, try again, advancing just 4 bytes\n // Note: this is a rewind because binaryReader.getDataView above\n // moved the pointer forward 12 bytes, so rewinding 8 bytes still\n // leaves us 4 bytes ahead\n binaryReader.rewind(SHP_RECORD_HEADER_SIZE - 4);\n } else {\n // Note: type is actually part of the record, not the header, so\n // rewind 4 bytes before reading record\n binaryReader.rewind(4);\n\n const recordView = binaryReader.getDataView(recordHeader.byteLength) as DataView;\n const geometry = parseRecord(recordView, options);\n result.geometries.push(geometry);\n\n result.currentIndex++;\n result.progress.rows = result.currentIndex - 1;\n }\n }\n\n if (binaryReader.ended) {\n state = STATE.END;\n }\n\n return state;\n\n default:\n state = STATE.ERROR;\n result.error = `illegal parser state ${state}`;\n return state;\n }\n } catch (error) {\n state = STATE.ERROR;\n result.error = `SHP parsing failed: ${(error as Error)?.message}`;\n return state;\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":[],"sources":["../../../../src/lib/parsers/types.ts"],"sourcesContent":["import {Schema, ObjectRowTable} from '@loaders.gl/schema';\nimport type {LoaderOptions} from '@loaders.gl/loader-utils';\n\nexport type SHPLoaderOptions = LoaderOptions & {\n shp?: {\n _maxDimensions?: number;\n };\n};\n\nexport type DBFLoaderOptions = LoaderOptions & {\n dbf?: {\n encoding?: string;\n shape?: 'rows' | 'table' | 'object-row-table';\n };\n};\n\nexport type ShapefileLoaderOptions = LoaderOptions &\n SHPLoaderOptions & {\n shapefile?: {\n shape?: 'geojson';\n };\n gis?: {\n reproject?: boolean;\n _targetCrs?: string;\n /** @deprecated. Use options.shapefile.shape */\n format?: 'geojson';\n };\n };\n\nexport type DBFRowsOutput = ObjectRowTable['data'];\n\n/**\n * DBF Table output. Deprecated in favor of ObjectRowTable\n * @deprecated\n */\nexport interface DBFTableOutput {\n schema?: Schema;\n rows: DBFRowsOutput;\n}\n\nexport type DBFHeader = {\n // Last updated date\n year: number;\n month: number;\n day: number;\n // Number of records in data file\n nRecords: number;\n // Length of header in bytes\n headerLength: number;\n // Length of each record\n recordLength: number;\n // Not sure if this is usually set\n languageDriver: number;\n};\n\nexport type DBFField = {\n name: string;\n dataType: string;\n fieldLength: number;\n decimal: number;\n};\n\nexport type DBFResult = {\n data: {[key: string]: any}[];\n schema?: Schema;\n error?: string;\n dbfHeader?: DBFHeader;\n dbfFields?: DBFField[];\n progress?: {\n bytesUsed: number;\n rowsTotal: number;\n rows: number;\n };\n};\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../../../../src/lib/parsers/types.ts"],"sourcesContent":["import {Schema, ObjectRowTable} from '@loaders.gl/schema';\nimport type {LoaderOptions} from '@loaders.gl/loader-utils';\n\nexport type SHPLoaderOptions = LoaderOptions & {\n shp?: {\n _maxDimensions?: number;\n };\n};\n\nexport type DBFLoaderOptions = LoaderOptions & {\n dbf?: {\n encoding?: string;\n shape?: 'rows' | 'table' | 'object-row-table';\n };\n /** @deprecated */\n tables?: {\n /** @deprecated */\n format?: 'rows' | 'table' | 'object-row-table';\n };\n};\n\nexport type ShapefileLoaderOptions = LoaderOptions &\n SHPLoaderOptions & {\n shapefile?: {\n shape?: 'geojson';\n };\n gis?: {\n reproject?: boolean;\n _targetCrs?: string;\n /** @deprecated. Use options.shapefile.shape */\n format?: 'geojson';\n };\n };\n\nexport type DBFRowsOutput = ObjectRowTable['data'];\n\n/**\n * DBF Table output. Deprecated in favor of ObjectRowTable\n * @deprecated\n */\nexport interface DBFTableOutput {\n schema?: Schema;\n rows: DBFRowsOutput;\n}\n\nexport type DBFHeader = {\n // Last updated date\n year: number;\n month: number;\n day: number;\n // Number of records in data file\n nRecords: number;\n // Length of header in bytes\n headerLength: number;\n // Length of each record\n recordLength: number;\n // Not sure if this is usually set\n languageDriver: number;\n};\n\nexport type DBFField = {\n name: string;\n dataType: string;\n fieldLength: number;\n decimal: number;\n};\n\nexport type DBFResult = {\n data: {[key: string]: any}[];\n schema?: Schema;\n error?: string;\n dbfHeader?: DBFHeader;\n dbfFields?: DBFField[];\n progress?: {\n bytesUsed: number;\n rowsTotal: number;\n rows: number;\n };\n};\n"],"mappings":""}
|
|
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports._typecheckShapefileLoader = exports.ShapefileLoader = void 0;
|
|
7
7
|
var _shpLoader = require("./shp-loader");
|
|
8
8
|
var _parseShapefile = require("./lib/parsers/parse-shapefile");
|
|
9
|
-
var VERSION = typeof "3.4.0-alpha.
|
|
9
|
+
var VERSION = typeof "3.4.0-alpha.2" !== 'undefined' ? "3.4.0-alpha.2" : 'latest';
|
|
10
10
|
|
|
11
11
|
var ShapefileLoader = {
|
|
12
12
|
name: 'Shapefile',
|
package/dist/es5/shp-loader.js
CHANGED
|
@@ -11,7 +11,7 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
|
|
|
11
11
|
var _parseShp = require("./lib/parsers/parse-shp");
|
|
12
12
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
13
13
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
14
|
-
var VERSION = typeof "3.4.0-alpha.
|
|
14
|
+
var VERSION = typeof "3.4.0-alpha.2" !== 'undefined' ? "3.4.0-alpha.2" : 'latest';
|
|
15
15
|
var SHP_MAGIC_NUMBER = [0x00, 0x00, 0x27, 0x0a];
|
|
16
16
|
|
|
17
17
|
exports.SHP_MAGIC_NUMBER = SHP_MAGIC_NUMBER;
|
package/dist/esm/dbf-loader.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { parseDBF, parseDBFInBatches } from './lib/parsers/parse-dbf';
|
|
2
2
|
|
|
3
|
-
const VERSION = typeof "3.4.0-alpha.
|
|
3
|
+
const VERSION = typeof "3.4.0-alpha.2" !== 'undefined' ? "3.4.0-alpha.2" : 'latest';
|
|
4
4
|
|
|
5
5
|
export const DBFWorkerLoader = {
|
|
6
6
|
name: 'DBF',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-shp.js","names":["BinaryChunkReader","parseSHPHeader","parseRecord","LITTLE_ENDIAN","BIG_ENDIAN","SHP_HEADER_SIZE","SHP_RECORD_HEADER_SIZE","STATE","EXPECTING_HEADER","EXPECTING_RECORD","END","ERROR","SHPParser","constructor","options","maxRewindBytes","geometries","progress","bytesTotal","NaN","bytesUsed","rows","currentIndex","write","arrayBuffer","binaryReader","state","parseState","result","end","error","parseSHP","shpParser","parseSHPInBatches","asyncIterator","parser","headerReturned","header","length","dataView","getDataView","hasAvailableBytes","recordHeaderView","recordHeader","recordNumber","getInt32","byteLength","type","rewind","invalidRecord","recordView","geometry","push","ended","message"],"sources":["../../../../src/lib/parsers/parse-shp.ts"],"sourcesContent":["import type {BinaryGeometry} from '@loaders.gl/schema';\nimport BinaryChunkReader from '../streaming/binary-chunk-reader';\nimport {parseSHPHeader, SHPHeader} from './parse-shp-header';\nimport {parseRecord} from './parse-shp-geometry';\nimport {SHPLoaderOptions} from './types';\n\nconst LITTLE_ENDIAN = true;\nconst BIG_ENDIAN = false;\n\nconst SHP_HEADER_SIZE = 100;\n// According to the spec, the record header is just 8 bytes, but here we set it\n// to 12 so that we can also access the record's type\nconst SHP_RECORD_HEADER_SIZE = 12;\n\nconst STATE = {\n EXPECTING_HEADER: 0,\n EXPECTING_RECORD: 1,\n END: 2,\n ERROR: 3\n};\n\ntype SHPResult = {\n geometries: (BinaryGeometry | null)[];\n header?: SHPHeader;\n error?: string;\n progress: {\n bytesUsed: number;\n bytesTotal: number;\n rows: number;\n };\n currentIndex: number;\n};\n\nclass SHPParser {\n options?: SHPLoaderOptions = {};\n binaryReader = new BinaryChunkReader({maxRewindBytes: SHP_RECORD_HEADER_SIZE});\n state = STATE.EXPECTING_HEADER;\n result: SHPResult = {\n geometries: [],\n // Initialize with number values to make TS happy\n // These are initialized for real in STATE.EXPECTING_HEADER\n progress: {\n bytesTotal: NaN,\n bytesUsed: NaN,\n rows: NaN\n },\n currentIndex: NaN\n };\n\n constructor(options?: SHPLoaderOptions) {\n this.options = options;\n }\n\n write(arrayBuffer: ArrayBuffer) {\n this.binaryReader.write(arrayBuffer);\n this.state = parseState(this.state, this.result, this.binaryReader, this.options);\n }\n\n end() {\n this.binaryReader.end();\n this.state = parseState(this.state, this.result, this.binaryReader, this.options);\n // this.result.progress.bytesUsed = this.binaryReader.bytesUsed();\n if (this.state !== STATE.END) {\n this.state = STATE.ERROR;\n this.result.error = 'SHP incomplete file';\n }\n }\n}\n\nexport function parseSHP(arrayBuffer: ArrayBuffer, options?: object): BinaryGeometry[] {\n const shpParser = new SHPParser(options);\n shpParser.write(arrayBuffer);\n shpParser.end();\n\n // @ts-ignore\n return shpParser.result;\n}\n\n/**\n * @param asyncIterator\n * @param options\n * @returns\n */\nexport async function* parseSHPInBatches(\n asyncIterator: AsyncIterable<ArrayBuffer> | Iterable<ArrayBuffer>,\n options?: object\n): AsyncIterable<BinaryGeometry | object> {\n const parser = new SHPParser(options);\n let headerReturned = false;\n for await (const arrayBuffer of asyncIterator) {\n parser.write(arrayBuffer);\n if (!headerReturned && parser.result.header) {\n headerReturned = true;\n yield parser.result.header;\n }\n\n if (parser.result.geometries.length > 0) {\n yield parser.result.geometries;\n parser.result.geometries = [];\n }\n }\n parser.end();\n if (parser.result.geometries.length > 0) {\n yield parser.result.geometries;\n }\n\n return;\n}\n\n/**\n * State-machine parser for SHP data\n *\n * Note that whenever more data is needed, a `return`, not a `break`, is\n * necessary, as the `break` keeps the context within `parseState`, while\n * `return` releases context so that more data can be written into the\n * BinaryChunkReader.\n *\n * @param state Current state\n * @param result An object to hold result data\n * @param binaryReader\n * @return State at end of current parsing\n */\n/* eslint-disable complexity, max-depth */\nfunction parseState(\n state: number,\n result: SHPResult,\n binaryReader: BinaryChunkReader,\n options?: SHPLoaderOptions\n): number {\n // eslint-disable-next-line no-constant-condition\n while (true) {\n try {\n switch (state) {\n case STATE.ERROR:\n case STATE.END:\n return state;\n\n case STATE.EXPECTING_HEADER:\n // Parse initial file header\n const dataView = binaryReader.getDataView(SHP_HEADER_SIZE);\n if (!dataView) {\n return state;\n }\n\n result.header = parseSHPHeader(dataView);\n result.progress = {\n bytesUsed: 0,\n bytesTotal: result.header.length,\n rows: 0\n };\n // index numbering starts at 1\n result.currentIndex = 1;\n state = STATE.EXPECTING_RECORD;\n break;\n\n case STATE.EXPECTING_RECORD:\n while (binaryReader.hasAvailableBytes(SHP_RECORD_HEADER_SIZE)) {\n const recordHeaderView = binaryReader.getDataView(SHP_RECORD_HEADER_SIZE) as DataView;\n const recordHeader = {\n recordNumber: recordHeaderView.getInt32(0, BIG_ENDIAN),\n // 2 byte words; includes the four words of record header\n byteLength: recordHeaderView.getInt32(4, BIG_ENDIAN) * 2,\n // This is actually part of the record, not the header...\n type: recordHeaderView.getInt32(8, LITTLE_ENDIAN)\n };\n\n if (!binaryReader.hasAvailableBytes(recordHeader.byteLength - 4)) {\n binaryReader.rewind(SHP_RECORD_HEADER_SIZE);\n return state;\n }\n\n const invalidRecord =\n recordHeader.byteLength < 4 ||\n recordHeader.type !== result.header?.type ||\n recordHeader.recordNumber !== result.currentIndex;\n\n // All records must have at least four bytes (for the record shape type)\n if (invalidRecord) {\n // Malformed record, try again, advancing just 4 bytes\n // Note: this is a rewind because binaryReader.getDataView above\n // moved the pointer forward 12 bytes, so rewinding 8 bytes still\n // leaves us 4 bytes ahead\n binaryReader.rewind(SHP_RECORD_HEADER_SIZE - 4);\n } else {\n // Note: type is actually part of the record, not the header, so\n // rewind 4 bytes before reading record\n binaryReader.rewind(4);\n\n const recordView = binaryReader.getDataView(recordHeader.byteLength) as DataView;\n const geometry = parseRecord(recordView, options);\n result.geometries.push(geometry);\n\n result.currentIndex++;\n result.progress.rows = result.currentIndex - 1;\n }\n }\n\n if (binaryReader.ended) {\n state = STATE.END;\n }\n\n return state;\n\n default:\n state = STATE.ERROR;\n result.error = `illegal parser state ${state}`;\n return state;\n }\n } catch (error) {\n state = STATE.ERROR;\n result.error = `SHP parsing failed: ${(error as Error)?.message}`;\n return state;\n }\n }\n}\n"],"mappings":";AACA,OAAOA,iBAAiB,MAAM,kCAAkC;AAChE,SAAQC,cAAc,QAAkB,oBAAoB;AAC5D,SAAQC,WAAW,QAAO,sBAAsB;AAGhD,MAAMC,aAAa,GAAG,IAAI;AAC1B,MAAMC,UAAU,GAAG,KAAK;AAExB,MAAMC,eAAe,GAAG,GAAG;AAG3B,MAAMC,sBAAsB,GAAG,EAAE;AAEjC,MAAMC,KAAK,GAAG;EACZC,gBAAgB,EAAE,CAAC;EACnBC,gBAAgB,EAAE,CAAC;EACnBC,GAAG,EAAE,CAAC;EACNC,KAAK,EAAE;AACT,CAAC;AAcD,MAAMC,SAAS,CAAC;EAgBdC,WAAW,CAACC,OAA0B,EAAE;IAAA,iCAfX,CAAC,CAAC;IAAA,sCAChB,IAAId,iBAAiB,CAAC;MAACe,cAAc,EAAET;IAAsB,CAAC,CAAC;IAAA,+BACtEC,KAAK,CAACC,gBAAgB;IAAA,gCACV;MAClBQ,UAAU,EAAE,EAAE;MAGdC,QAAQ,EAAE;QACRC,UAAU,EAAEC,GAAG;QACfC,SAAS,EAAED,GAAG;QACdE,IAAI,EAAEF;MACR,CAAC;MACDG,YAAY,EAAEH;IAChB,CAAC;IAGC,IAAI,CAACL,OAAO,GAAGA,OAAO;EACxB;EAEAS,KAAK,CAACC,WAAwB,EAAE;IAC9B,IAAI,CAACC,YAAY,CAACF,KAAK,CAACC,WAAW,CAAC;IACpC,IAAI,CAACE,KAAK,GAAGC,UAAU,CAAC,IAAI,CAACD,KAAK,EAAE,IAAI,CAACE,MAAM,EAAE,IAAI,CAACH,YAAY,EAAE,IAAI,CAACX,OAAO,CAAC;EACnF;EAEAe,GAAG,GAAG;IACJ,IAAI,CAACJ,YAAY,CAACI,GAAG,EAAE;IACvB,IAAI,CAACH,KAAK,GAAGC,UAAU,CAAC,IAAI,CAACD,KAAK,EAAE,IAAI,CAACE,MAAM,EAAE,IAAI,CAACH,YAAY,EAAE,IAAI,CAACX,OAAO,CAAC;IAEjF,IAAI,IAAI,CAACY,KAAK,KAAKnB,KAAK,CAACG,GAAG,EAAE;MAC5B,IAAI,CAACgB,KAAK,GAAGnB,KAAK,CAACI,KAAK;MACxB,IAAI,CAACiB,MAAM,CAACE,KAAK,GAAG,qBAAqB;IAC3C;EACF;AACF;AAEA,OAAO,SAASC,QAAQ,CAACP,WAAwB,EAAEV,OAAgB,EAAoB;EACrF,MAAMkB,SAAS,GAAG,IAAIpB,SAAS,CAACE,OAAO,CAAC;EACxCkB,SAAS,CAACT,KAAK,CAACC,WAAW,CAAC;EAC5BQ,SAAS,CAACH,GAAG,EAAE;;EAGf,OAAOG,SAAS,CAACJ,MAAM;AACzB;;AAOA,OAAO,gBAAgBK,iBAAiB,CACtCC,aAAiE,EACjEpB,OAAgB,EACwB;EACxC,MAAMqB,MAAM,GAAG,IAAIvB,SAAS,CAACE,OAAO,CAAC;EACrC,IAAIsB,cAAc,GAAG,KAAK;EAC1B,WAAW,MAAMZ,WAAW,IAAIU,aAAa,EAAE;IAC7CC,MAAM,CAACZ,KAAK,CAACC,WAAW,CAAC;IACzB,IAAI,CAACY,cAAc,IAAID,MAAM,CAACP,MAAM,CAACS,MAAM,EAAE;MAC3CD,cAAc,GAAG,IAAI;MACrB,MAAMD,MAAM,CAACP,MAAM,CAACS,MAAM;IAC5B;IAEA,IAAIF,MAAM,CAACP,MAAM,CAACZ,UAAU,CAACsB,MAAM,GAAG,CAAC,EAAE;MACvC,MAAMH,MAAM,CAACP,MAAM,CAACZ,UAAU;MAC9BmB,MAAM,CAACP,MAAM,CAACZ,UAAU,GAAG,EAAE;IAC/B;EACF;EACAmB,MAAM,CAACN,GAAG,EAAE;EACZ,IAAIM,MAAM,CAACP,MAAM,CAACZ,UAAU,CAACsB,MAAM,GAAG,CAAC,EAAE;IACvC,MAAMH,MAAM,CAACP,MAAM,CAACZ,UAAU;EAChC;EAEA;AACF;;AAgBA,SAASW,UAAU,CACjBD,KAAa,EACbE,MAAiB,EACjBH,YAA+B,EAC/BX,OAA0B,EAClB;EAER,OAAO,IAAI,EAAE;IACX,IAAI;MACF,QAAQY,KAAK;QACX,KAAKnB,KAAK,CAACI,KAAK;QAChB,KAAKJ,KAAK,CAACG,GAAG;UACZ,OAAOgB,KAAK;QAEd,KAAKnB,KAAK,CAACC,gBAAgB;UAEzB,MAAM+B,QAAQ,GAAGd,YAAY,CAACe,WAAW,CAACnC,eAAe,CAAC;UAC1D,IAAI,CAACkC,QAAQ,EAAE;YACb,OAAOb,KAAK;UACd;UAEAE,MAAM,CAACS,MAAM,GAAGpC,cAAc,CAACsC,QAAQ,CAAC;UACxCX,MAAM,CAACX,QAAQ,GAAG;YAChBG,SAAS,EAAE,CAAC;YACZF,UAAU,EAAEU,MAAM,CAACS,MAAM,CAACC,MAAM;YAChCjB,IAAI,EAAE;UACR,CAAC;UAEDO,MAAM,CAACN,YAAY,GAAG,CAAC;UACvBI,KAAK,GAAGnB,KAAK,CAACE,gBAAgB;UAC9B;QAEF,KAAKF,KAAK,CAACE,gBAAgB;UACzB,OAAOgB,YAAY,CAACgB,iBAAiB,CAACnC,sBAAsB,CAAC,EAAE;YAAA;YAC7D,MAAMoC,gBAAgB,GAAGjB,YAAY,CAACe,WAAW,CAAClC,sBAAsB,CAAa;YACrF,MAAMqC,YAAY,GAAG;cACnBC,YAAY,EAAEF,gBAAgB,CAACG,QAAQ,CAAC,CAAC,EAAEzC,UAAU,CAAC;cAEtD0C,UAAU,EAAEJ,gBAAgB,CAACG,QAAQ,CAAC,CAAC,EAAEzC,UAAU,CAAC,GAAG,CAAC;cAExD2C,IAAI,EAAEL,gBAAgB,CAACG,QAAQ,CAAC,CAAC,EAAE1C,aAAa;YAClD,CAAC;YAED,IAAI,CAACsB,YAAY,CAACgB,iBAAiB,CAACE,YAAY,CAACG,UAAU,GAAG,CAAC,CAAC,EAAE;cAChErB,YAAY,CAACuB,MAAM,CAAC1C,sBAAsB,CAAC;cAC3C,OAAOoB,KAAK;YACd;YAEA,MAAMuB,aAAa,GACjBN,YAAY,CAACG,UAAU,GAAG,CAAC,IAC3BH,YAAY,CAACI,IAAI,wBAAKnB,MAAM,CAACS,MAAM,mDAAb,eAAeU,IAAI,KACzCJ,YAAY,CAACC,YAAY,KAAKhB,MAAM,CAACN,YAAY;;YAGnD,IAAI2B,aAAa,EAAE;cAKjBxB,YAAY,CAACuB,MAAM,CAAC1C,sBAAsB,GAAG,CAAC,CAAC;YACjD,CAAC,MAAM;cAGLmB,YAAY,CAACuB,MAAM,CAAC,CAAC,CAAC;cAEtB,MAAME,UAAU,GAAGzB,YAAY,CAACe,WAAW,CAACG,YAAY,CAACG,UAAU,CAAa;cAChF,MAAMK,QAAQ,GAAGjD,WAAW,CAACgD,UAAU,EAAEpC,OAAO,CAAC;cACjDc,MAAM,CAACZ,UAAU,CAACoC,IAAI,CAACD,QAAQ,CAAC;cAEhCvB,MAAM,CAACN,YAAY,EAAE;cACrBM,MAAM,CAACX,QAAQ,CAACI,IAAI,GAAGO,MAAM,CAACN,YAAY,GAAG,CAAC;YAChD;UACF;UAEA,IAAIG,YAAY,CAAC4B,KAAK,EAAE;YACtB3B,KAAK,GAAGnB,KAAK,CAACG,GAAG;UACnB;UAEA,OAAOgB,KAAK;QAEd;UACEA,KAAK,GAAGnB,KAAK,CAACI,KAAK;UACnBiB,MAAM,CAACE,KAAK,kCAA2BJ,KAAK,CAAE;UAC9C,OAAOA,KAAK;MAAC;IAEnB,CAAC,CAAC,OAAOI,KAAK,EAAE;MACdJ,KAAK,GAAGnB,KAAK,CAACI,KAAK;MACnBiB,MAAM,CAACE,KAAK,iCAA2BA,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAYwB,OAAO,CAAE;MACjE,OAAO5B,KAAK;IACd;EACF;AACF"}
|
|
1
|
+
{"version":3,"file":"parse-shp.js","names":["BinaryChunkReader","parseSHPHeader","parseRecord","LITTLE_ENDIAN","BIG_ENDIAN","SHP_HEADER_SIZE","SHP_RECORD_HEADER_SIZE","STATE","EXPECTING_HEADER","EXPECTING_RECORD","END","ERROR","SHPParser","constructor","options","maxRewindBytes","geometries","progress","bytesTotal","NaN","bytesUsed","rows","currentIndex","write","arrayBuffer","binaryReader","state","parseState","result","end","error","parseSHP","shpParser","parseSHPInBatches","asyncIterator","parser","headerReturned","header","length","dataView","getDataView","hasAvailableBytes","recordHeaderView","recordHeader","recordNumber","getInt32","byteLength","type","rewind","invalidRecord","recordView","geometry","push","ended","message"],"sources":["../../../../src/lib/parsers/parse-shp.ts"],"sourcesContent":["import type {BinaryGeometry} from '@loaders.gl/schema';\nimport BinaryChunkReader from '../streaming/binary-chunk-reader';\nimport {parseSHPHeader, SHPHeader} from './parse-shp-header';\nimport {parseRecord} from './parse-shp-geometry';\nimport {SHPLoaderOptions} from './types';\n\nconst LITTLE_ENDIAN = true;\nconst BIG_ENDIAN = false;\n\nconst SHP_HEADER_SIZE = 100;\n// According to the spec, the record header is just 8 bytes, but here we set it\n// to 12 so that we can also access the record's type\nconst SHP_RECORD_HEADER_SIZE = 12;\n\nconst STATE = {\n EXPECTING_HEADER: 0,\n EXPECTING_RECORD: 1,\n END: 2,\n ERROR: 3\n};\n\ntype SHPResult = {\n geometries: (BinaryGeometry | null)[];\n header?: SHPHeader;\n error?: string;\n progress: {\n bytesUsed: number;\n bytesTotal: number;\n rows: number;\n };\n currentIndex: number;\n};\n\nclass SHPParser {\n options?: SHPLoaderOptions = {};\n binaryReader = new BinaryChunkReader({maxRewindBytes: SHP_RECORD_HEADER_SIZE});\n state = STATE.EXPECTING_HEADER;\n result: SHPResult = {\n geometries: [],\n // Initialize with number values to make TS happy\n // These are initialized for real in STATE.EXPECTING_HEADER\n progress: {\n bytesTotal: NaN,\n bytesUsed: NaN,\n rows: NaN\n },\n currentIndex: NaN\n };\n\n constructor(options?: SHPLoaderOptions) {\n this.options = options;\n }\n\n write(arrayBuffer: ArrayBuffer) {\n this.binaryReader.write(arrayBuffer);\n this.state = parseState(this.state, this.result, this.binaryReader, this.options);\n }\n\n end() {\n this.binaryReader.end();\n this.state = parseState(this.state, this.result, this.binaryReader, this.options);\n // this.result.progress.bytesUsed = this.binaryReader.bytesUsed();\n if (this.state !== STATE.END) {\n this.state = STATE.ERROR;\n this.result.error = 'SHP incomplete file';\n }\n }\n}\n\nexport function parseSHP(arrayBuffer: ArrayBuffer, options?: SHPLoaderOptions): BinaryGeometry[] {\n const shpParser = new SHPParser(options);\n shpParser.write(arrayBuffer);\n shpParser.end();\n\n // @ts-ignore\n return shpParser.result;\n}\n\n/**\n * @param asyncIterator\n * @param options\n * @returns\n */\nexport async function* parseSHPInBatches(\n asyncIterator: AsyncIterable<ArrayBuffer> | Iterable<ArrayBuffer>,\n options?: SHPLoaderOptions\n): AsyncIterable<BinaryGeometry | object> {\n const parser = new SHPParser(options);\n let headerReturned = false;\n for await (const arrayBuffer of asyncIterator) {\n parser.write(arrayBuffer);\n if (!headerReturned && parser.result.header) {\n headerReturned = true;\n yield parser.result.header;\n }\n\n if (parser.result.geometries.length > 0) {\n yield parser.result.geometries;\n parser.result.geometries = [];\n }\n }\n parser.end();\n if (parser.result.geometries.length > 0) {\n yield parser.result.geometries;\n }\n\n return;\n}\n\n/**\n * State-machine parser for SHP data\n *\n * Note that whenever more data is needed, a `return`, not a `break`, is\n * necessary, as the `break` keeps the context within `parseState`, while\n * `return` releases context so that more data can be written into the\n * BinaryChunkReader.\n *\n * @param state Current state\n * @param result An object to hold result data\n * @param binaryReader\n * @return State at end of current parsing\n */\n/* eslint-disable complexity, max-depth */\nfunction parseState(\n state: number,\n result: SHPResult,\n binaryReader: BinaryChunkReader,\n options?: SHPLoaderOptions\n): number {\n // eslint-disable-next-line no-constant-condition\n while (true) {\n try {\n switch (state) {\n case STATE.ERROR:\n case STATE.END:\n return state;\n\n case STATE.EXPECTING_HEADER:\n // Parse initial file header\n const dataView = binaryReader.getDataView(SHP_HEADER_SIZE);\n if (!dataView) {\n return state;\n }\n\n result.header = parseSHPHeader(dataView);\n result.progress = {\n bytesUsed: 0,\n bytesTotal: result.header.length,\n rows: 0\n };\n // index numbering starts at 1\n result.currentIndex = 1;\n state = STATE.EXPECTING_RECORD;\n break;\n\n case STATE.EXPECTING_RECORD:\n while (binaryReader.hasAvailableBytes(SHP_RECORD_HEADER_SIZE)) {\n const recordHeaderView = binaryReader.getDataView(SHP_RECORD_HEADER_SIZE) as DataView;\n const recordHeader = {\n recordNumber: recordHeaderView.getInt32(0, BIG_ENDIAN),\n // 2 byte words; includes the four words of record header\n byteLength: recordHeaderView.getInt32(4, BIG_ENDIAN) * 2,\n // This is actually part of the record, not the header...\n type: recordHeaderView.getInt32(8, LITTLE_ENDIAN)\n };\n\n if (!binaryReader.hasAvailableBytes(recordHeader.byteLength - 4)) {\n binaryReader.rewind(SHP_RECORD_HEADER_SIZE);\n return state;\n }\n\n const invalidRecord =\n recordHeader.byteLength < 4 ||\n recordHeader.type !== result.header?.type ||\n recordHeader.recordNumber !== result.currentIndex;\n\n // All records must have at least four bytes (for the record shape type)\n if (invalidRecord) {\n // Malformed record, try again, advancing just 4 bytes\n // Note: this is a rewind because binaryReader.getDataView above\n // moved the pointer forward 12 bytes, so rewinding 8 bytes still\n // leaves us 4 bytes ahead\n binaryReader.rewind(SHP_RECORD_HEADER_SIZE - 4);\n } else {\n // Note: type is actually part of the record, not the header, so\n // rewind 4 bytes before reading record\n binaryReader.rewind(4);\n\n const recordView = binaryReader.getDataView(recordHeader.byteLength) as DataView;\n const geometry = parseRecord(recordView, options);\n result.geometries.push(geometry);\n\n result.currentIndex++;\n result.progress.rows = result.currentIndex - 1;\n }\n }\n\n if (binaryReader.ended) {\n state = STATE.END;\n }\n\n return state;\n\n default:\n state = STATE.ERROR;\n result.error = `illegal parser state ${state}`;\n return state;\n }\n } catch (error) {\n state = STATE.ERROR;\n result.error = `SHP parsing failed: ${(error as Error)?.message}`;\n return state;\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":[],"sources":["../../../../src/lib/parsers/types.ts"],"sourcesContent":["import {Schema, ObjectRowTable} from '@loaders.gl/schema';\nimport type {LoaderOptions} from '@loaders.gl/loader-utils';\n\nexport type SHPLoaderOptions = LoaderOptions & {\n shp?: {\n _maxDimensions?: number;\n };\n};\n\nexport type DBFLoaderOptions = LoaderOptions & {\n dbf?: {\n encoding?: string;\n shape?: 'rows' | 'table' | 'object-row-table';\n };\n};\n\nexport type ShapefileLoaderOptions = LoaderOptions &\n SHPLoaderOptions & {\n shapefile?: {\n shape?: 'geojson';\n };\n gis?: {\n reproject?: boolean;\n _targetCrs?: string;\n /** @deprecated. Use options.shapefile.shape */\n format?: 'geojson';\n };\n };\n\nexport type DBFRowsOutput = ObjectRowTable['data'];\n\n/**\n * DBF Table output. Deprecated in favor of ObjectRowTable\n * @deprecated\n */\nexport interface DBFTableOutput {\n schema?: Schema;\n rows: DBFRowsOutput;\n}\n\nexport type DBFHeader = {\n // Last updated date\n year: number;\n month: number;\n day: number;\n // Number of records in data file\n nRecords: number;\n // Length of header in bytes\n headerLength: number;\n // Length of each record\n recordLength: number;\n // Not sure if this is usually set\n languageDriver: number;\n};\n\nexport type DBFField = {\n name: string;\n dataType: string;\n fieldLength: number;\n decimal: number;\n};\n\nexport type DBFResult = {\n data: {[key: string]: any}[];\n schema?: Schema;\n error?: string;\n dbfHeader?: DBFHeader;\n dbfFields?: DBFField[];\n progress?: {\n bytesUsed: number;\n rowsTotal: number;\n rows: number;\n };\n};\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../../../../src/lib/parsers/types.ts"],"sourcesContent":["import {Schema, ObjectRowTable} from '@loaders.gl/schema';\nimport type {LoaderOptions} from '@loaders.gl/loader-utils';\n\nexport type SHPLoaderOptions = LoaderOptions & {\n shp?: {\n _maxDimensions?: number;\n };\n};\n\nexport type DBFLoaderOptions = LoaderOptions & {\n dbf?: {\n encoding?: string;\n shape?: 'rows' | 'table' | 'object-row-table';\n };\n /** @deprecated */\n tables?: {\n /** @deprecated */\n format?: 'rows' | 'table' | 'object-row-table';\n };\n};\n\nexport type ShapefileLoaderOptions = LoaderOptions &\n SHPLoaderOptions & {\n shapefile?: {\n shape?: 'geojson';\n };\n gis?: {\n reproject?: boolean;\n _targetCrs?: string;\n /** @deprecated. Use options.shapefile.shape */\n format?: 'geojson';\n };\n };\n\nexport type DBFRowsOutput = ObjectRowTable['data'];\n\n/**\n * DBF Table output. Deprecated in favor of ObjectRowTable\n * @deprecated\n */\nexport interface DBFTableOutput {\n schema?: Schema;\n rows: DBFRowsOutput;\n}\n\nexport type DBFHeader = {\n // Last updated date\n year: number;\n month: number;\n day: number;\n // Number of records in data file\n nRecords: number;\n // Length of header in bytes\n headerLength: number;\n // Length of each record\n recordLength: number;\n // Not sure if this is usually set\n languageDriver: number;\n};\n\nexport type DBFField = {\n name: string;\n dataType: string;\n fieldLength: number;\n decimal: number;\n};\n\nexport type DBFResult = {\n data: {[key: string]: any}[];\n schema?: Schema;\n error?: string;\n dbfHeader?: DBFHeader;\n dbfFields?: DBFField[];\n progress?: {\n bytesUsed: number;\n rowsTotal: number;\n rows: number;\n };\n};\n"],"mappings":""}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { SHP_MAGIC_NUMBER } from './shp-loader';
|
|
2
2
|
import { parseShapefile, parseShapefileInBatches } from './lib/parsers/parse-shapefile';
|
|
3
3
|
|
|
4
|
-
const VERSION = typeof "3.4.0-alpha.
|
|
4
|
+
const VERSION = typeof "3.4.0-alpha.2" !== 'undefined' ? "3.4.0-alpha.2" : 'latest';
|
|
5
5
|
|
|
6
6
|
export const ShapefileLoader = {
|
|
7
7
|
name: 'Shapefile',
|
package/dist/esm/shp-loader.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { parseSHP, parseSHPInBatches } from './lib/parsers/parse-shp';
|
|
2
2
|
|
|
3
|
-
const VERSION = typeof "3.4.0-alpha.
|
|
3
|
+
const VERSION = typeof "3.4.0-alpha.2" !== 'undefined' ? "3.4.0-alpha.2" : 'latest';
|
|
4
4
|
export const SHP_MAGIC_NUMBER = [0x00, 0x00, 0x27, 0x0a];
|
|
5
5
|
|
|
6
6
|
export const SHPWorkerLoader = {
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import type { BinaryGeometry } from '@loaders.gl/schema';
|
|
2
|
-
|
|
2
|
+
import { SHPLoaderOptions } from './types';
|
|
3
|
+
export declare function parseSHP(arrayBuffer: ArrayBuffer, options?: SHPLoaderOptions): BinaryGeometry[];
|
|
3
4
|
/**
|
|
4
5
|
* @param asyncIterator
|
|
5
6
|
* @param options
|
|
6
7
|
* @returns
|
|
7
8
|
*/
|
|
8
|
-
export declare function parseSHPInBatches(asyncIterator: AsyncIterable<ArrayBuffer> | Iterable<ArrayBuffer>, options?:
|
|
9
|
+
export declare function parseSHPInBatches(asyncIterator: AsyncIterable<ArrayBuffer> | Iterable<ArrayBuffer>, options?: SHPLoaderOptions): AsyncIterable<BinaryGeometry | object>;
|
|
9
10
|
//# sourceMappingURL=parse-shp.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-shp.d.ts","sourceRoot":"","sources":["../../../src/lib/parsers/parse-shp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"parse-shp.d.ts","sourceRoot":"","sources":["../../../src/lib/parsers/parse-shp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAIvD,OAAO,EAAC,gBAAgB,EAAC,MAAM,SAAS,CAAC;AAiEzC,wBAAgB,QAAQ,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,cAAc,EAAE,CAO/F;AAED;;;;GAIG;AACH,wBAAuB,iBAAiB,CACtC,aAAa,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,EACjE,OAAO,CAAC,EAAE,gBAAgB,GACzB,aAAa,CAAC,cAAc,GAAG,MAAM,CAAC,CAqBxC"}
|
|
@@ -10,6 +10,11 @@ export type DBFLoaderOptions = LoaderOptions & {
|
|
|
10
10
|
encoding?: string;
|
|
11
11
|
shape?: 'rows' | 'table' | 'object-row-table';
|
|
12
12
|
};
|
|
13
|
+
/** @deprecated */
|
|
14
|
+
tables?: {
|
|
15
|
+
/** @deprecated */
|
|
16
|
+
format?: 'rows' | 'table' | 'object-row-table';
|
|
17
|
+
};
|
|
13
18
|
};
|
|
14
19
|
export type ShapefileLoaderOptions = LoaderOptions & SHPLoaderOptions & {
|
|
15
20
|
shapefile?: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/parsers/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAE,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAE5D,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG;IAC7C,GAAG,CAAC,EAAE;QACJ,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG;IAC7C,GAAG,CAAC,EAAE;QACJ,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,kBAAkB,CAAC;KAC/C,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,aAAa,GAChD,gBAAgB,GAAG;IACjB,SAAS,CAAC,EAAE;QACV,KAAK,CAAC,EAAE,SAAS,CAAC;KACnB,CAAC;IACF,GAAG,CAAC,EAAE;QACJ,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,+CAA+C;QAC/C,MAAM,CAAC,EAAE,SAAS,CAAC;KACpB,CAAC;CACH,CAAC;AAEJ,MAAM,MAAM,aAAa,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;AAEnD;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,aAAa,CAAC;CACrB;AAED,MAAM,MAAM,SAAS,GAAG;IAEtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IAEZ,QAAQ,EAAE,MAAM,CAAC;IAEjB,YAAY,EAAE,MAAM,CAAC;IAErB,YAAY,EAAE,MAAM,CAAC;IAErB,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAC,EAAE,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE;QACT,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/parsers/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAE,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAE5D,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG;IAC7C,GAAG,CAAC,EAAE;QACJ,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG;IAC7C,GAAG,CAAC,EAAE;QACJ,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,kBAAkB,CAAC;KAC/C,CAAC;IACF,kBAAkB;IAClB,MAAM,CAAC,EAAE;QACP,kBAAkB;QAClB,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,kBAAkB,CAAC;KAChD,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,aAAa,GAChD,gBAAgB,GAAG;IACjB,SAAS,CAAC,EAAE;QACV,KAAK,CAAC,EAAE,SAAS,CAAC;KACnB,CAAC;IACF,GAAG,CAAC,EAAE;QACJ,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,+CAA+C;QAC/C,MAAM,CAAC,EAAE,SAAS,CAAC;KACpB,CAAC;CACH,CAAC;AAEJ,MAAM,MAAM,aAAa,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;AAEnD;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,aAAa,CAAC;CACrB;AAED,MAAM,MAAM,SAAS,GAAG;IAEtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IAEZ,QAAQ,EAAE,MAAM,CAAC;IAEjB,YAAY,EAAE,MAAM,CAAC;IAErB,YAAY,EAAE,MAAM,CAAC;IAErB,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAC,EAAE,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE;QACT,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH,CAAC"}
|
package/dist/shp-worker.js
CHANGED
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@loaders.gl/shapefile",
|
|
3
3
|
"description": "Loader for the Shapefile Format",
|
|
4
|
-
"version": "3.4.0-alpha.
|
|
4
|
+
"version": "3.4.0-alpha.2",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"publishConfig": {
|
|
7
7
|
"access": "public"
|
|
@@ -37,10 +37,10 @@
|
|
|
37
37
|
"build-worker-dbf": "esbuild src/workers/dbf-worker.ts --bundle --outfile=dist/dbf-worker.js --define:__VERSION__=\\\"$npm_package_version\\\""
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@loaders.gl/gis": "3.4.0-alpha.
|
|
41
|
-
"@loaders.gl/loader-utils": "3.4.0-alpha.
|
|
42
|
-
"@loaders.gl/schema": "3.4.0-alpha.
|
|
40
|
+
"@loaders.gl/gis": "3.4.0-alpha.2",
|
|
41
|
+
"@loaders.gl/loader-utils": "3.4.0-alpha.2",
|
|
42
|
+
"@loaders.gl/schema": "3.4.0-alpha.2",
|
|
43
43
|
"@math.gl/proj4": "^3.5.1"
|
|
44
44
|
},
|
|
45
|
-
"gitHead": "
|
|
45
|
+
"gitHead": "f1c00c124d8d0c41a138ff40afb0d1a00711bf2e"
|
|
46
46
|
}
|
|
@@ -67,7 +67,7 @@ class SHPParser {
|
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
-
export function parseSHP(arrayBuffer: ArrayBuffer, options?:
|
|
70
|
+
export function parseSHP(arrayBuffer: ArrayBuffer, options?: SHPLoaderOptions): BinaryGeometry[] {
|
|
71
71
|
const shpParser = new SHPParser(options);
|
|
72
72
|
shpParser.write(arrayBuffer);
|
|
73
73
|
shpParser.end();
|
|
@@ -83,7 +83,7 @@ export function parseSHP(arrayBuffer: ArrayBuffer, options?: object): BinaryGeom
|
|
|
83
83
|
*/
|
|
84
84
|
export async function* parseSHPInBatches(
|
|
85
85
|
asyncIterator: AsyncIterable<ArrayBuffer> | Iterable<ArrayBuffer>,
|
|
86
|
-
options?:
|
|
86
|
+
options?: SHPLoaderOptions
|
|
87
87
|
): AsyncIterable<BinaryGeometry | object> {
|
|
88
88
|
const parser = new SHPParser(options);
|
|
89
89
|
let headerReturned = false;
|
package/src/lib/parsers/types.ts
CHANGED
|
@@ -12,6 +12,11 @@ export type DBFLoaderOptions = LoaderOptions & {
|
|
|
12
12
|
encoding?: string;
|
|
13
13
|
shape?: 'rows' | 'table' | 'object-row-table';
|
|
14
14
|
};
|
|
15
|
+
/** @deprecated */
|
|
16
|
+
tables?: {
|
|
17
|
+
/** @deprecated */
|
|
18
|
+
format?: 'rows' | 'table' | 'object-row-table';
|
|
19
|
+
};
|
|
15
20
|
};
|
|
16
21
|
|
|
17
22
|
export type ShapefileLoaderOptions = LoaderOptions &
|