UNPKG

well-known-parser

Version:

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

1 lines 5.79 kB
{"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"}