well-known-parser
Version:
A WKT/WKB/EWKT/EWKB/TWKB/GeoJSON parser and serializer
1 lines • 5.26 kB
Source Map (JSON)
{"version":3,"file":"well-known-parser20.cjs","sources":["../src/parsers/multilinestring.ts"],"sourcesContent":["import type { BinaryReader } from '../binaryreader';\nimport type { WktParser } from '../wktparser';\nimport type { GeometryOptions } from '../types';\nimport { MultiLineString } from '../multilinestring';\nimport { LineString } from '../linestring';\nimport { Point } from '../point';\nimport { parseLineStringGeoJSON } from './linestring';\nimport { parseRelativePointTwkb } from './point';\nimport { parseWkb } from './index';\nimport type { MultiLineString as GeoJSONMultiLineString } from 'geojson';\n\nexport function parseMultiLineStringWkt(\n value: WktParser,\n options: GeometryOptions\n): MultiLineString {\n const multiLineString = new MultiLineString();\n multiLineString.srid = options.srid;\n multiLineString.hasZ = options.hasZ ?? false;\n multiLineString.hasM = options.hasM ?? false;\n\n if (value.isMatch(['EMPTY'])) {\n return multiLineString;\n }\n\n value.expectGroupStart();\n\n do {\n value.expectGroupStart();\n const coordinates = value.matchCoordinates(options);\n multiLineString.lineStrings.push(new LineString(coordinates));\n value.expectGroupEnd();\n } while (value.isMatch([',']));\n\n value.expectGroupEnd();\n\n return multiLineString;\n}\n\nexport function parseMultiLineStringWkb(\n value: BinaryReader,\n options: GeometryOptions\n): MultiLineString {\n const multiLineString = new MultiLineString();\n multiLineString.srid = options.srid;\n multiLineString.hasZ = options.hasZ ?? false;\n multiLineString.hasM = options.hasM ?? false;\n\n const lineStringCount = value.readUInt32();\n\n for (let i = 0; i < lineStringCount; i++) {\n // This can only return a LineString, but we need to call parseWkb in order to make sure wkb headers are read\n multiLineString.lineStrings.push(parseWkb(value, options) as LineString);\n }\n\n return multiLineString;\n}\n\nexport function parseMultiLineStringTwkb(\n value: BinaryReader,\n options: GeometryOptions\n): MultiLineString {\n const multiLineString = new MultiLineString();\n multiLineString.hasZ = options.hasZ ?? false;\n multiLineString.hasM = options.hasM ?? false;\n\n if (options.isEmpty) {\n return multiLineString;\n }\n\n const previousPoint = new Point(0, 0, options.hasZ ? 0 : undefined, options.hasM ? 0 : undefined);\n\n const lineStringCount = value.readVarInt();\n\n for (let i = 0; i < lineStringCount; i++) {\n const lineString = new LineString();\n lineString.hasZ = options.hasZ ?? false;\n lineString.hasM = options.hasM ?? false;\n\n const pointCount = value.readVarInt();\n\n for (let j = 0; j < pointCount; j++) {\n lineString.points.push(parseRelativePointTwkb(value, options, previousPoint));\n }\n\n multiLineString.lineStrings.push(lineString);\n }\n\n return multiLineString;\n}\n\nexport function parseMultiLineStringGeoJSON(\n value: Pick<GeoJSONMultiLineString, 'coordinates'>\n): MultiLineString {\n const multiLineString = new MultiLineString();\n\n if (value.coordinates.length > 0 && value.coordinates[0].length > 0) {\n multiLineString.hasZ = value.coordinates[0][0].length > 2;\n }\n\n for (let i = 0; i < value.coordinates.length; i++) {\n multiLineString.lineStrings.push(parseLineStringGeoJSON({ coordinates: value.coordinates[i] }));\n }\n\n return multiLineString;\n}\n"],"names":["parseMultiLineStringWkt","value","options","multiLineString","MultiLineString","coordinates","LineString","parseMultiLineStringWkb","lineStringCount","i","parseWkb","parseMultiLineStringTwkb","previousPoint","Point","lineString","pointCount","j","parseRelativePointTwkb","parseMultiLineStringGeoJSON","parseLineStringGeoJSON"],"mappings":"6TAWO,SAASA,EACdC,EACAC,EACiB,CACjB,MAAMC,EAAkB,IAAIC,kBAK5B,GAJAD,EAAgB,KAAOD,EAAQ,KAC/BC,EAAgB,KAAOD,EAAQ,MAAQ,GACvCC,EAAgB,KAAOD,EAAQ,MAAQ,GAEnCD,EAAM,QAAQ,CAAC,OAAO,CAAC,EACzB,OAAOE,EAGTF,EAAM,iBAAA,EAEN,EAAG,CACDA,EAAM,iBAAA,EACN,MAAMI,EAAcJ,EAAM,iBAAiBC,CAAO,EAClDC,EAAgB,YAAY,KAAK,IAAIG,EAAAA,WAAWD,CAAW,CAAC,EAC5DJ,EAAM,eAAA,CACR,OAASA,EAAM,QAAQ,CAAC,GAAG,CAAC,GAE5B,OAAAA,EAAM,eAAA,EAECE,CACT,CAEO,SAASI,EACdN,EACAC,EACiB,CACjB,MAAMC,EAAkB,IAAIC,kBAC5BD,EAAgB,KAAOD,EAAQ,KAC/BC,EAAgB,KAAOD,EAAQ,MAAQ,GACvCC,EAAgB,KAAOD,EAAQ,MAAQ,GAEvC,MAAMM,EAAkBP,EAAM,WAAA,EAE9B,QAASQ,EAAI,EAAGA,EAAID,EAAiBC,IAEnCN,EAAgB,YAAY,KAAKO,EAAAA,SAAST,EAAOC,CAAO,CAAe,EAGzE,OAAOC,CACT,CAEO,SAASQ,EACdV,EACAC,EACiB,CACjB,MAAMC,EAAkB,IAAIC,kBAI5B,GAHAD,EAAgB,KAAOD,EAAQ,MAAQ,GACvCC,EAAgB,KAAOD,EAAQ,MAAQ,GAEnCA,EAAQ,QACV,OAAOC,EAGT,MAAMS,EAAgB,IAAIC,EAAAA,MAAM,EAAG,EAAGX,EAAQ,KAAO,EAAI,OAAWA,EAAQ,KAAO,EAAI,MAAS,EAE1FM,EAAkBP,EAAM,WAAA,EAE9B,QAASQ,EAAI,EAAGA,EAAID,EAAiBC,IAAK,CACxC,MAAMK,EAAa,IAAIR,aACvBQ,EAAW,KAAOZ,EAAQ,MAAQ,GAClCY,EAAW,KAAOZ,EAAQ,MAAQ,GAElC,MAAMa,EAAad,EAAM,WAAA,EAEzB,QAASe,EAAI,EAAGA,EAAID,EAAYC,IAC9BF,EAAW,OAAO,KAAKG,EAAAA,uBAAuBhB,EAAOC,EAASU,CAAa,CAAC,EAG9ET,EAAgB,YAAY,KAAKW,CAAU,CAC7C,CAEA,OAAOX,CACT,CAEO,SAASe,EACdjB,EACiB,CACjB,MAAME,EAAkB,IAAIC,kBAExBH,EAAM,YAAY,OAAS,GAAKA,EAAM,YAAY,CAAC,EAAE,OAAS,IAChEE,EAAgB,KAAOF,EAAM,YAAY,CAAC,EAAE,CAAC,EAAE,OAAS,GAG1D,QAAS,EAAI,EAAG,EAAIA,EAAM,YAAY,OAAQ,IAC5CE,EAAgB,YAAY,KAAKgB,yBAAuB,CAAE,YAAalB,EAAM,YAAY,CAAC,CAAA,CAAG,CAAC,EAGhG,OAAOE,CACT"}