UNPKG

well-known-parser

Version:

A WKT/WKB/EWKT/EWKB/TWKB/GeoJSON parser and serializer

1 lines 5.08 kB
{"version":3,"file":"well-known-parser16.cjs","sources":["../src/parsers/point.ts"],"sourcesContent":["import type { BinaryReader } from '../binaryreader';\nimport type { WktParser } from '../wktparser';\nimport type { GeometryOptions } from '../types';\nimport { Point } from '../point';\nimport * as ZigZag from '../zigzag';\n\nexport function parsePointWkt(value: WktParser, options: GeometryOptions): Point {\n const point = new Point();\n point.srid = options.srid;\n point.hasZ = options.hasZ ?? false;\n point.hasM = options.hasM ?? false;\n\n if (value.isMatch(['EMPTY'])) {\n return point;\n }\n\n value.expectGroupStart();\n\n const coordinate = value.matchCoordinate({\n hasZ: point.hasZ,\n hasM: point.hasM,\n });\n\n point.x = coordinate.x;\n point.y = coordinate.y;\n point.z = coordinate.z;\n point.m = coordinate.m;\n\n value.expectGroupEnd();\n\n return point;\n}\n\nexport function parsePointWkb(value: BinaryReader, options: GeometryOptions): Point {\n const x = value.readDouble();\n const y = value.readDouble();\n const z = options.hasZ ? value.readDouble() : undefined;\n const m = options.hasM ? value.readDouble() : undefined;\n\n return new Point(x, y, z, m, options.srid);\n}\n\nexport function parsePointTwkb(value: BinaryReader, options: GeometryOptions): Point {\n if (options.isEmpty) {\n const p = new Point(undefined, undefined, undefined, undefined, options.srid);\n p.hasZ = options.hasZ ?? false;\n p.hasM = options.hasM ?? false;\n return p;\n }\n\n return parseRelativePointTwkb(\n value,\n options,\n new Point(0, 0, options.hasZ ? 0 : undefined, options.hasM ? 0 : undefined)\n );\n}\n\n/**\n * Parses a Twkb point relative to previous point.\n * Previous point is mutated while parsing to allow for continuous use of the same point instance during parsing.\n * @param value The reader to parse\n * @param options\n * @param previousPoint The previous point to start from, is modified during parsing\n */\nexport function parseRelativePointTwkb(\n value: BinaryReader,\n options: GeometryOptions,\n previousPoint: Point\n): Point {\n const precisionFactor = options.precisionFactor ?? 1;\n const zPrecisionFactor = options.zPrecisionFactor ?? 1;\n const mPrecisionFactor = options.mPrecisionFactor ?? 1;\n\n previousPoint.x += ZigZag.decode(value.readVarInt()) / precisionFactor;\n previousPoint.y += ZigZag.decode(value.readVarInt()) / precisionFactor;\n\n if (options.hasZ) {\n previousPoint.z += ZigZag.decode(value.readVarInt()) / zPrecisionFactor;\n }\n if (options.hasM) {\n previousPoint.m += ZigZag.decode(value.readVarInt()) / mPrecisionFactor;\n }\n\n return new Point(\n previousPoint.x,\n previousPoint.y,\n previousPoint.z,\n previousPoint.m,\n options.srid\n );\n}\n\nexport function parsePointGeoJSON(coordinates: number[]): Point {\n if (coordinates.length === 0) {\n return new Point(undefined, undefined, undefined, undefined);\n }\n\n if (coordinates.length > 2) {\n return new Point(coordinates[0], coordinates[1], coordinates[2], undefined);\n }\n\n return new Point(coordinates[0], coordinates[1], undefined, undefined);\n}\n"],"names":["parsePointWkt","value","options","point","Point","coordinate","parsePointWkb","x","y","z","m","parsePointTwkb","p","parseRelativePointTwkb","previousPoint","precisionFactor","zPrecisionFactor","mPrecisionFactor","ZigZag.decode","parsePointGeoJSON","coordinates"],"mappings":"mKAMO,SAASA,EAAcC,EAAkBC,EAAiC,CAC/E,MAAMC,EAAQ,IAAIC,QAKlB,GAJAD,EAAM,KAAOD,EAAQ,KACrBC,EAAM,KAAOD,EAAQ,MAAQ,GAC7BC,EAAM,KAAOD,EAAQ,MAAQ,GAEzBD,EAAM,QAAQ,CAAC,OAAO,CAAC,EACzB,OAAOE,EAGTF,EAAM,iBAAA,EAEN,MAAMI,EAAaJ,EAAM,gBAAgB,CACvC,KAAME,EAAM,KACZ,KAAMA,EAAM,IAAA,CACb,EAEDA,OAAAA,EAAM,EAAIE,EAAW,EACrBF,EAAM,EAAIE,EAAW,EACrBF,EAAM,EAAIE,EAAW,EACrBF,EAAM,EAAIE,EAAW,EAErBJ,EAAM,eAAA,EAECE,CACT,CAEO,SAASG,EAAcL,EAAqBC,EAAiC,CAClF,MAAMK,EAAIN,EAAM,WAAA,EACVO,EAAIP,EAAM,WAAA,EACVQ,EAAIP,EAAQ,KAAOD,EAAM,aAAe,OACxCS,EAAIR,EAAQ,KAAOD,EAAM,aAAe,OAE9C,OAAO,IAAIG,EAAAA,MAAMG,EAAGC,EAAGC,EAAGC,EAAGR,EAAQ,IAAI,CAC3C,CAEO,SAASS,EAAeV,EAAqBC,EAAiC,CACnF,GAAIA,EAAQ,QAAS,CACnB,MAAMU,EAAI,IAAIR,EAAAA,MAAM,OAAW,OAAW,OAAW,OAAWF,EAAQ,IAAI,EAC5E,OAAAU,EAAE,KAAOV,EAAQ,MAAQ,GACzBU,EAAE,KAAOV,EAAQ,MAAQ,GAClBU,CACT,CAEA,OAAOC,EACLZ,EACAC,EACA,IAAIE,QAAM,EAAG,EAAGF,EAAQ,KAAO,EAAI,OAAWA,EAAQ,KAAO,EAAI,MAAS,CAAA,CAE9E,CASO,SAASW,EACdZ,EACAC,EACAY,EACO,CACP,MAAMC,EAAkBb,EAAQ,iBAAmB,EAC7Cc,EAAmBd,EAAQ,kBAAoB,EAC/Ce,EAAmBf,EAAQ,kBAAoB,EAErD,OAAAY,EAAc,GAAKI,EAAAA,OAAcjB,EAAM,WAAA,CAAY,EAAIc,EACvDD,EAAc,GAAKI,EAAAA,OAAcjB,EAAM,WAAA,CAAY,EAAIc,EAEnDb,EAAQ,OACVY,EAAc,GAAKI,EAAAA,OAAcjB,EAAM,WAAA,CAAY,EAAIe,GAErDd,EAAQ,OACVY,EAAc,GAAKI,EAAAA,OAAcjB,EAAM,WAAA,CAAY,EAAIgB,GAGlD,IAAIb,EAAAA,MACTU,EAAc,EACdA,EAAc,EACdA,EAAc,EACdA,EAAc,EACdZ,EAAQ,IAAA,CAEZ,CAEO,SAASiB,EAAkBC,EAA8B,CAC9D,OAAIA,EAAY,SAAW,EAClB,IAAIhB,EAAAA,MAAM,OAAW,OAAW,OAAW,MAAS,EAGzDgB,EAAY,OAAS,EAChB,IAAIhB,EAAAA,MAAMgB,EAAY,CAAC,EAAGA,EAAY,CAAC,EAAGA,EAAY,CAAC,EAAG,MAAS,EAGrE,IAAIhB,EAAAA,MAAMgB,EAAY,CAAC,EAAGA,EAAY,CAAC,EAAG,OAAW,MAAS,CACvE"}