{"version":3,"file":"well-known-parser5.cjs","sources":["../src/linestring.ts"],"sourcesContent":["import { Geometry } from './geometry';\nimport type { Coordinates, GeometryOptions } from './types';\nimport { GEOMETRY_TYPES } from './constants';\nimport { Point } from './point';\nimport { BinaryWriter } from './binarywriter';\nimport type { LineString as GeoJSONLineString } from 'geojson';\n\nexport class LineString extends Geometry {\n  points: Point[];\n\n  constructor(points?: Point[], srid?: number) {\n    super();\n\n    this.points = points || [];\n    this.srid = srid;\n\n    if (this.points.length > 0) {\n      this.hasZ = this.points[0].hasZ;\n      this.hasM = this.points[0].hasM;\n    }\n  }\n\n  static Z(points?: Point[], srid?: number): LineString {\n    const lineString = new LineString(points, srid);\n    lineString.hasZ = true;\n    return lineString;\n  }\n\n  static M(points?: Point[], srid?: number): LineString {\n    const lineString = new LineString(points, srid);\n    lineString.hasM = true;\n    return lineString;\n  }\n\n  static ZM(points?: Point[], srid?: number): LineString {\n    const lineString = new LineString(points, srid);\n    lineString.hasZ = true;\n    lineString.hasM = true;\n    return lineString;\n  }\n\n  toWkt(isNested: boolean = false): string {\n    if (isNested) return this.toInnerWkt();\n\n    if (this.points.length === 0) {\n      return this.getWktType(GEOMETRY_TYPES.LineString.wkt, true);\n    }\n\n    return this.getWktType(GEOMETRY_TYPES.LineString.wkt, false) + this.toInnerWkt();\n  }\n\n  private toInnerWkt(): string {\n    let innerWkt = '(';\n\n    for (const point of this.points) {\n      innerWkt += point.toWkt(true) + ',';\n    }\n\n    innerWkt = innerWkt.slice(0, -1);\n    innerWkt += ')';\n\n    return innerWkt;\n  }\n\n  toWkb(parentOptions?: GeometryOptions): Buffer {\n    const wkb = new BinaryWriter(this.getWkbSize());\n\n    wkb.writeInt8(1);\n    this.writeWkbType(wkb, GEOMETRY_TYPES.LineString.wkb, parentOptions);\n    wkb.writeUInt32LE(this.points.length);\n\n    for (const p of this.points) {\n      wkb.writeBuffer(p.toWkb(parentOptions, true));\n    }\n\n    return wkb.buffer;\n  }\n\n  toTwkb(previousPoint: Point = new Point(0, 0, 0, 0), isNested: boolean = false): Buffer {\n    const twkb = new BinaryWriter(0, true);\n\n    const precision = Geometry.getTwkbPrecision(5, 0, 0);\n    const isEmpty = this.points.length === 0;\n\n    if (!isNested) {\n      this.writeTwkbHeader(twkb, GEOMETRY_TYPES.LineString.wkb, precision, isEmpty);\n    }\n\n    if (this.points.length > 0) {\n      twkb.writeVarInt(this.points.length);\n\n      for (const p of this.points) {\n        twkb.writeBuffer(p.toTwkb(previousPoint, true));\n      }\n    }\n\n    return twkb.buffer;\n  }\n\n  getWkbSize(): number {\n    let coordinateSize = 16;\n\n    if (this.hasZ) {\n      coordinateSize += 8;\n    }\n    if (this.hasM) {\n      coordinateSize += 8;\n    }\n\n    return 1 + 4 + 4 + this.points.length * coordinateSize;\n  }\n\n  toGeoJSON(): GeoJSONLineString;\n  toGeoJSON(isNested: true): Coordinates<GeoJSONLineString>;\n  toGeoJSON(isNested: boolean = false): GeoJSONLineString | Coordinates<GeoJSONLineString> {\n    const coordinates: Coordinates<GeoJSONLineString> = [];\n    for (const p of this.points) {\n      coordinates.push(p.toGeoJSON(true));\n    }\n\n    if (isNested) return coordinates;\n\n    return {\n      type: GEOMETRY_TYPES.LineString.geoJSON,\n      coordinates,\n    };\n  }\n}\n"],"names":["LineString","Geometry","points","srid","lineString","isNested","GEOMETRY_TYPES","innerWkt","point","parentOptions","wkb","BinaryWriter","p","previousPoint","Point","twkb","precision","isEmpty","coordinateSize","coordinates"],"mappings":"+OAOO,MAAMA,UAAmBC,EAAAA,QAAS,CAGvC,YAAYC,EAAkBC,EAAe,CAC3C,MAAA,EAEA,KAAK,OAASD,GAAU,CAAA,EACxB,KAAK,KAAOC,EAER,KAAK,OAAO,OAAS,IACvB,KAAK,KAAO,KAAK,OAAO,CAAC,EAAE,KAC3B,KAAK,KAAO,KAAK,OAAO,CAAC,EAAE,KAE/B,CAEA,OAAO,EAAED,EAAkBC,EAA2B,CACpD,MAAMC,EAAa,IAAIJ,EAAWE,EAAQC,CAAI,EAC9C,OAAAC,EAAW,KAAO,GACXA,CACT,CAEA,OAAO,EAAEF,EAAkBC,EAA2B,CACpD,MAAMC,EAAa,IAAIJ,EAAWE,EAAQC,CAAI,EAC9C,OAAAC,EAAW,KAAO,GACXA,CACT,CAEA,OAAO,GAAGF,EAAkBC,EAA2B,CACrD,MAAMC,EAAa,IAAIJ,EAAWE,EAAQC,CAAI,EAC9C,OAAAC,EAAW,KAAO,GAClBA,EAAW,KAAO,GACXA,CACT,CAEA,MAAMC,EAAoB,GAAe,CACvC,OAAIA,EAAiB,KAAK,WAAA,EAEtB,KAAK,OAAO,SAAW,EAClB,KAAK,WAAWC,EAAAA,eAAe,WAAW,IAAK,EAAI,EAGrD,KAAK,WAAWA,iBAAe,WAAW,IAAK,EAAK,EAAI,KAAK,WAAA,CACtE,CAEQ,YAAqB,CAC3B,IAAIC,EAAW,IAEf,UAAWC,KAAS,KAAK,OACvBD,GAAYC,EAAM,MAAM,EAAI,EAAI,IAGlC,OAAAD,EAAWA,EAAS,MAAM,EAAG,EAAE,EAC/BA,GAAY,IAELA,CACT,CAEA,MAAME,EAAyC,CAC7C,MAAMC,EAAM,IAAIC,EAAAA,aAAa,KAAK,YAAY,EAE9CD,EAAI,UAAU,CAAC,EACf,KAAK,aAAaA,EAAKJ,EAAAA,eAAe,WAAW,IAAKG,CAAa,EACnEC,EAAI,cAAc,KAAK,OAAO,MAAM,EAEpC,UAAWE,KAAK,KAAK,OACnBF,EAAI,YAAYE,EAAE,MAAMH,EAAe,EAAI,CAAC,EAG9C,OAAOC,EAAI,MACb,CAEA,OAAOG,EAAuB,IAAIC,EAAAA,MAAM,EAAG,EAAG,EAAG,CAAC,EAAGT,EAAoB,GAAe,CACtF,MAAMU,EAAO,IAAIJ,eAAa,EAAG,EAAI,EAE/BK,EAAYf,EAAAA,SAAS,iBAAiB,EAAG,EAAG,CAAC,EAC7CgB,EAAU,KAAK,OAAO,SAAW,EAMvC,GAJKZ,GACH,KAAK,gBAAgBU,EAAMT,EAAAA,eAAe,WAAW,IAAKU,EAAWC,CAAO,EAG1E,KAAK,OAAO,OAAS,EAAG,CAC1BF,EAAK,YAAY,KAAK,OAAO,MAAM,EAEnC,UAAWH,KAAK,KAAK,OACnBG,EAAK,YAAYH,EAAE,OAAOC,EAAe,EAAI,CAAC,CAElD,CAEA,OAAOE,EAAK,MACd,CAEA,YAAqB,CACnB,IAAIG,EAAiB,GAErB,OAAI,KAAK,OACPA,GAAkB,GAEhB,KAAK,OACPA,GAAkB,GAGb,EAAY,KAAK,OAAO,OAASA,CAC1C,CAIA,UAAUb,EAAoB,GAA2D,CACvF,MAAMc,EAA8C,CAAA,EACpD,UAAWP,KAAK,KAAK,OACnBO,EAAY,KAAKP,EAAE,UAAU,EAAI,CAAC,EAGpC,OAAIP,EAAiBc,EAEd,CACL,KAAMb,EAAAA,eAAe,WAAW,QAChC,YAAAa,CAAA,CAEJ,CACF"}