{"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"}