{"version":3,"file":"well-known-parser3.cjs","sources":["../src/geometry.ts"],"sourcesContent":["import { BinaryWriter } from './binarywriter';\nimport * as ZigZag from './zigzag';\nimport type { GeoJSONGeometry, GeometryOptions, TwkbPrecision } from './types';\n\nexport class Geometry {\n  srid?: number;\n  hasZ: boolean;\n  hasM: boolean;\n\n  constructor() {\n    this.srid = undefined;\n    this.hasZ = false;\n    this.hasM = false;\n  }\n\n  toEwkt(): string {\n    return `SRID=${this.srid};${this.toWkt()}`;\n  }\n\n  toEwkb(): Buffer {\n    const ewkb = new BinaryWriter(this.getWkbSize() + 4, false);\n    const wkb = this.toWkb();\n\n    ewkb.writeInt8(1);\n    ewkb.writeUInt32LE((wkb.subarray(1, 5).readUInt32LE(0) | 0x20000000) >>> 0);\n    ewkb.writeUInt32LE(this.srid!);\n    ewkb.writeBuffer(wkb.subarray(5));\n\n    return ewkb.buffer;\n  }\n\n  protected getWktType(wktType: string, isEmpty: boolean): string {\n    let wkt = wktType;\n\n    if (this.hasZ && this.hasM) {\n      wkt += ' ZM ';\n    } else if (this.hasZ) {\n      wkt += ' Z ';\n    } else if (this.hasM) {\n      wkt += ' M ';\n    }\n\n    if (isEmpty && !this.hasZ && !this.hasM) {\n      wkt += ' ';\n    }\n\n    if (isEmpty) {\n      wkt += 'EMPTY';\n    }\n\n    return wkt;\n  }\n\n  protected writeWkbType(\n    wkb: BinaryWriter,\n    geometryType: number,\n    parentOptions?: GeometryOptions\n  ): void {\n    let dimensionType = 0;\n\n    if (\n      typeof this.srid === 'undefined' &&\n      (!parentOptions || typeof parentOptions.srid === 'undefined')\n    ) {\n      if (this.hasZ && this.hasM) {\n        dimensionType += 3000;\n      } else if (this.hasZ) {\n        dimensionType += 1000;\n      } else if (this.hasM) {\n        dimensionType += 2000;\n      }\n    } else {\n      if (this.hasZ) {\n        dimensionType |= 0x80000000;\n      }\n      if (this.hasM) {\n        dimensionType |= 0x40000000;\n      }\n    }\n\n    wkb.writeUInt32LE((dimensionType + geometryType) >>> 0);\n  }\n\n  static getTwkbPrecision(\n    xyPrecision: number,\n    zPrecision: number,\n    mPrecision: number\n  ): TwkbPrecision {\n    return {\n      xy: xyPrecision,\n      z: zPrecision,\n      m: mPrecision,\n      xyFactor: Math.pow(10, xyPrecision),\n      zFactor: Math.pow(10, zPrecision),\n      mFactor: Math.pow(10, mPrecision),\n    };\n  }\n\n  protected writeTwkbHeader(\n    twkb: BinaryWriter,\n    geometryType: number,\n    precision: TwkbPrecision,\n    isEmpty: boolean\n  ): void {\n    const type = (ZigZag.encode(precision.xy) << 4) + geometryType;\n    let metadataHeader = (this.hasZ || this.hasM ? 1 : 0) << 3;\n    metadataHeader += isEmpty ? 1 << 4 : 0;\n\n    twkb.writeUInt8(type);\n    twkb.writeUInt8(metadataHeader);\n\n    if (this.hasZ || this.hasM) {\n      let extendedPrecision = 0;\n      if (this.hasZ) {\n        extendedPrecision |= 0x1;\n      }\n      if (this.hasM) {\n        extendedPrecision |= 0x2;\n      }\n\n      // Add Z and M precision information\n      if (this.hasZ) {\n        extendedPrecision |= ZigZag.encode(precision.z) << 2;\n      }\n      if (this.hasM) {\n        extendedPrecision |= ZigZag.encode(precision.m) << 5;\n      }\n\n      twkb.writeUInt8(extendedPrecision);\n    }\n  }\n\n  toGeoJSON(): GeoJSONGeometry {\n    throw new Error('Method not implemented.');\n  }\n\n  // Methods to be implemented by subclasses\n  toWkt(): string {\n    throw new Error('Method not implemented.');\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  toWkb(_parentOptions?: GeometryOptions): Buffer {\n    throw new Error('Method not implemented.');\n  }\n\n  toTwkb(): Buffer {\n    throw new Error('Method not implemented.');\n  }\n\n  getWkbSize(): number {\n    throw new Error('Method not implemented.');\n  }\n}\n"],"names":["Geometry","ewkb","BinaryWriter","wkb","wktType","isEmpty","wkt","geometryType","parentOptions","dimensionType","xyPrecision","zPrecision","mPrecision","twkb","precision","type","ZigZag.encode","metadataHeader","extendedPrecision","_parentOptions"],"mappings":"oKAIO,MAAMA,CAAS,CAKpB,aAAc,CACZ,KAAK,KAAO,OACZ,KAAK,KAAO,GACZ,KAAK,KAAO,EACd,CAEA,QAAiB,CACf,MAAO,QAAQ,KAAK,IAAI,IAAI,KAAK,OAAO,EAC1C,CAEA,QAAiB,CACf,MAAMC,EAAO,IAAIC,eAAa,KAAK,WAAA,EAAe,EAAG,EAAK,EACpDC,EAAM,KAAK,MAAA,EAEjB,OAAAF,EAAK,UAAU,CAAC,EAChBA,EAAK,eAAeE,EAAI,SAAS,EAAG,CAAC,EAAE,aAAa,CAAC,EAAI,aAAgB,CAAC,EAC1EF,EAAK,cAAc,KAAK,IAAK,EAC7BA,EAAK,YAAYE,EAAI,SAAS,CAAC,CAAC,EAEzBF,EAAK,MACd,CAEU,WAAWG,EAAiBC,EAA0B,CAC9D,IAAIC,EAAMF,EAEV,OAAI,KAAK,MAAQ,KAAK,KACpBE,GAAO,OACE,KAAK,KACdA,GAAO,MACE,KAAK,OACdA,GAAO,OAGLD,GAAW,CAAC,KAAK,MAAQ,CAAC,KAAK,OACjCC,GAAO,KAGLD,IACFC,GAAO,SAGFA,CACT,CAEU,aACRH,EACAI,EACAC,EACM,CACN,IAAIC,EAAgB,EAGlB,OAAO,KAAK,KAAS,MACpB,CAACD,GAAiB,OAAOA,EAAc,KAAS,KAE7C,KAAK,MAAQ,KAAK,KACpBC,GAAiB,IACR,KAAK,KACdA,GAAiB,IACR,KAAK,OACdA,GAAiB,MAGf,KAAK,OACPA,GAAiB,YAEf,KAAK,OACPA,GAAiB,aAIrBN,EAAI,cAAeM,EAAgBF,IAAkB,CAAC,CACxD,CAEA,OAAO,iBACLG,EACAC,EACAC,EACe,CACf,MAAO,CACL,GAAIF,EACJ,EAAGC,EACH,EAAGC,EACH,SAAU,KAAK,IAAI,GAAIF,CAAW,EAClC,QAAS,KAAK,IAAI,GAAIC,CAAU,EAChC,QAAS,KAAK,IAAI,GAAIC,CAAU,CAAA,CAEpC,CAEU,gBACRC,EACAN,EACAO,EACAT,EACM,CACN,MAAMU,GAAQC,EAAAA,OAAcF,EAAU,EAAE,GAAK,GAAKP,EAClD,IAAIU,GAAkB,KAAK,MAAQ,KAAK,KAAO,EAAI,IAAM,EAMzD,GALAA,GAAkBZ,EAAU,GAAS,EAErCQ,EAAK,WAAWE,CAAI,EACpBF,EAAK,WAAWI,CAAc,EAE1B,KAAK,MAAQ,KAAK,KAAM,CAC1B,IAAIC,EAAoB,EACpB,KAAK,OACPA,GAAqB,GAEnB,KAAK,OACPA,GAAqB,GAInB,KAAK,OACPA,GAAqBF,EAAAA,OAAcF,EAAU,CAAC,GAAK,GAEjD,KAAK,OACPI,GAAqBF,EAAAA,OAAcF,EAAU,CAAC,GAAK,GAGrDD,EAAK,WAAWK,CAAiB,CACnC,CACF,CAEA,WAA6B,CAC3B,MAAM,IAAI,MAAM,yBAAyB,CAC3C,CAGA,OAAgB,CACd,MAAM,IAAI,MAAM,yBAAyB,CAC3C,CAGA,MAAMC,EAA0C,CAC9C,MAAM,IAAI,MAAM,yBAAyB,CAC3C,CAEA,QAAiB,CACf,MAAM,IAAI,MAAM,yBAAyB,CAC3C,CAEA,YAAqB,CACnB,MAAM,IAAI,MAAM,yBAAyB,CAC3C,CACF"}