well-known-parser
Version:
A WKT/WKB/EWKT/EWKB/TWKB/GeoJSON parser and serializer
1 lines • 6.58 kB
Source Map (JSON)
{"version":3,"file":"well-known-parser15.cjs","sources":["../src/wktparser.ts"],"sourcesContent":["import { GEOMETRY_TYPES } from './constants';\nimport { Point } from './point';\n\nexport interface DimensionInfo {\n hasZ?: boolean;\n hasM?: boolean;\n}\n\nexport class WktParser {\n value: string;\n position: number;\n\n constructor(value: string) {\n this.value = value;\n this.position = 0;\n }\n\n match(tokens: string[]): string | null {\n this.skipWhitespaces();\n\n for (let i = 0; i < tokens.length; i++) {\n if (this.value.substring(this.position).indexOf(tokens[i]) === 0) {\n this.position += tokens[i].length;\n return tokens[i];\n }\n }\n\n return null;\n }\n\n matchRegex(tokens: RegExp[]): RegExpMatchArray | null {\n this.skipWhitespaces();\n\n for (let i = 0; i < tokens.length; i++) {\n const match = this.value.substring(this.position).match(tokens[i]);\n\n if (match) {\n this.position += match[0].length;\n return match;\n }\n }\n\n return null;\n }\n\n isMatch(tokens: string[]): boolean {\n this.skipWhitespaces();\n\n for (let i = 0; i < tokens.length; i++) {\n if (this.value.substring(this.position).indexOf(tokens[i]) === 0) {\n this.position += tokens[i].length;\n return true;\n }\n }\n\n return false;\n }\n\n matchType(): string {\n const geometryType = this.match([\n GEOMETRY_TYPES.Point.wkt,\n GEOMETRY_TYPES.LineString.wkt,\n GEOMETRY_TYPES.Polygon.wkt,\n GEOMETRY_TYPES.MultiPoint.wkt,\n GEOMETRY_TYPES.MultiLineString.wkt,\n GEOMETRY_TYPES.MultiPolygon.wkt,\n GEOMETRY_TYPES.GeometryCollection.wkt\n ]);\n\n if (!geometryType) {\n throw new Error('Expected geometry type');\n }\n\n return geometryType;\n }\n\n matchDimension(): DimensionInfo {\n const dimension = this.match(['ZM', 'Z', 'M']);\n\n switch (dimension) {\n case 'ZM':\n return { hasZ: true, hasM: true };\n case 'Z':\n return { hasZ: true, hasM: false };\n case 'M':\n return { hasZ: false, hasM: true };\n default:\n return { hasZ: false, hasM: false };\n }\n }\n\n expectGroupStart(): void {\n if (!this.isMatch(['('])) {\n throw new Error('Expected group start');\n }\n }\n\n expectGroupEnd(): void {\n if (!this.isMatch([')'])) {\n throw new Error('Expected group end');\n }\n }\n\n matchCoordinate(options: DimensionInfo): Point {\n let match: RegExpMatchArray | null;\n\n if (options.hasZ && options.hasM) {\n match = this.matchRegex([/^(\\S*)\\s+(\\S*)\\s+(\\S*)\\s+([^\\s,)]*)/]);\n } else if (options.hasZ || options.hasM) {\n match = this.matchRegex([/^(\\S*)\\s+(\\S*)\\s+([^\\s,)]*)/]);\n } else {\n match = this.matchRegex([/^(\\S*)\\s+([^\\s,)]*)/]);\n }\n\n if (!match) {\n throw new Error('Expected coordinates');\n }\n\n if (options.hasZ && options.hasM) {\n return new Point(parseFloat(match[1]), parseFloat(match[2]), parseFloat(match[3]), parseFloat(match[4]));\n } else if (options.hasZ) {\n return new Point(parseFloat(match[1]), parseFloat(match[2]), parseFloat(match[3]), undefined);\n } else if (options.hasM) {\n return new Point(parseFloat(match[1]), parseFloat(match[2]), undefined, parseFloat(match[3]));\n } else {\n return new Point(parseFloat(match[1]), parseFloat(match[2]), undefined, undefined);\n }\n }\n\n matchCoordinates(options: DimensionInfo): Point[] {\n const coordinates: Point[] = [];\n\n do {\n const startsWithBracket = this.isMatch(['(']);\n\n coordinates.push(this.matchCoordinate(options));\n\n if (startsWithBracket) {\n this.expectGroupEnd();\n }\n } while (this.isMatch([',']));\n\n return coordinates;\n }\n\n skipWhitespaces(): void {\n while (this.position < this.value.length && this.value[this.position] === ' ') {\n this.position++;\n }\n }\n}"],"names":["WktParser","value","tokens","i","match","geometryType","GEOMETRY_TYPES","options","Point","coordinates","startsWithBracket"],"mappings":"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"}