UNPKG

well-known-parser

Version:

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

1 lines 5.19 kB
{"version":3,"file":"well-known-parser9.cjs","sources":["../src/multipolygon.ts"],"sourcesContent":["import { Geometry } from './geometry';\nimport type { Coordinates, GeometryOptions } from './types';\nimport { GEOMETRY_TYPES } from './constants';\nimport { Point } from './point';\nimport type { Polygon } from './polygon';\nimport { BinaryWriter } from './binarywriter';\nimport type { MultiPolygon as GeoJSONMultiPolygon } from 'geojson';\n\nexport class MultiPolygon extends Geometry {\n polygons: Polygon[];\n\n constructor(polygons?: Polygon[], srid?: number) {\n super();\n\n this.polygons = polygons || [];\n this.srid = srid;\n\n if (this.polygons.length > 0) {\n this.hasZ = this.polygons[0].hasZ;\n this.hasM = this.polygons[0].hasM;\n }\n }\n\n static Z(polygons?: Polygon[], srid?: number): MultiPolygon {\n const multiPolygon = new MultiPolygon(polygons, srid);\n multiPolygon.hasZ = true;\n return multiPolygon;\n }\n\n static M(polygons?: Polygon[], srid?: number): MultiPolygon {\n const multiPolygon = new MultiPolygon(polygons, srid);\n multiPolygon.hasM = true;\n return multiPolygon;\n }\n\n static ZM(polygons?: Polygon[], srid?: number): MultiPolygon {\n const multiPolygon = new MultiPolygon(polygons, srid);\n multiPolygon.hasZ = true;\n multiPolygon.hasM = true;\n return multiPolygon;\n }\n\n toWkt(): string {\n if (this.polygons.length === 0) {\n return this.getWktType(GEOMETRY_TYPES.MultiPolygon.wkt, true);\n }\n\n let wkt = this.getWktType(GEOMETRY_TYPES.MultiPolygon.wkt, false) + '(';\n\n for (const polygon of this.polygons) {\n wkt += polygon.toWkt(true) + ',';\n }\n\n wkt = wkt.slice(0, -1);\n wkt += ')';\n\n return wkt;\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.MultiPolygon.wkb, parentOptions);\n wkb.writeUInt32LE(this.polygons.length);\n\n for (const polygon of this.polygons) {\n wkb.writeBuffer(polygon.toWkb({ srid: this.srid }));\n }\n\n return wkb.buffer;\n }\n\n toTwkb(): Buffer {\n const twkb = new BinaryWriter(0, true);\n\n const precision = Geometry.getTwkbPrecision(5, 0, 0);\n const isEmpty = this.polygons.length === 0;\n\n this.writeTwkbHeader(twkb, GEOMETRY_TYPES.MultiPolygon.wkb, precision, isEmpty);\n\n if (this.polygons.length > 0) {\n twkb.writeVarInt(this.polygons.length);\n\n const previousPoint = new Point(0, 0, 0, 0);\n for (const polygon of this.polygons) {\n twkb.writeBuffer(polygon.toTwkb(previousPoint, true));\n }\n }\n\n return twkb.buffer;\n }\n\n getWkbSize(): number {\n let size = 1 + 4 + 4;\n\n for (let i = 0; i < this.polygons.length; i++) {\n size += this.polygons[i].getWkbSize();\n }\n\n return size;\n }\n\n toGeoJSON(): GeoJSONMultiPolygon {\n const coordinates: Coordinates<GeoJSONMultiPolygon> = [];\n\n for (const polygon of this.polygons) {\n coordinates.push(polygon.toGeoJSON(true));\n }\n\n return {\n type: GEOMETRY_TYPES.MultiPolygon.geoJSON,\n coordinates,\n };\n }\n}\n"],"names":["MultiPolygon","Geometry","polygons","srid","multiPolygon","GEOMETRY_TYPES","wkt","polygon","parentOptions","wkb","BinaryWriter","twkb","precision","isEmpty","previousPoint","Point","size","i","coordinates"],"mappings":"+OAQO,MAAMA,UAAqBC,EAAAA,QAAS,CAGzC,YAAYC,EAAsBC,EAAe,CAC/C,MAAA,EAEA,KAAK,SAAWD,GAAY,CAAA,EAC5B,KAAK,KAAOC,EAER,KAAK,SAAS,OAAS,IACzB,KAAK,KAAO,KAAK,SAAS,CAAC,EAAE,KAC7B,KAAK,KAAO,KAAK,SAAS,CAAC,EAAE,KAEjC,CAEA,OAAO,EAAED,EAAsBC,EAA6B,CAC1D,MAAMC,EAAe,IAAIJ,EAAaE,EAAUC,CAAI,EACpD,OAAAC,EAAa,KAAO,GACbA,CACT,CAEA,OAAO,EAAEF,EAAsBC,EAA6B,CAC1D,MAAMC,EAAe,IAAIJ,EAAaE,EAAUC,CAAI,EACpD,OAAAC,EAAa,KAAO,GACbA,CACT,CAEA,OAAO,GAAGF,EAAsBC,EAA6B,CAC3D,MAAMC,EAAe,IAAIJ,EAAaE,EAAUC,CAAI,EACpD,OAAAC,EAAa,KAAO,GACpBA,EAAa,KAAO,GACbA,CACT,CAEA,OAAgB,CACd,GAAI,KAAK,SAAS,SAAW,EAC3B,OAAO,KAAK,WAAWC,EAAAA,eAAe,aAAa,IAAK,EAAI,EAG9D,IAAIC,EAAM,KAAK,WAAWD,EAAAA,eAAe,aAAa,IAAK,EAAK,EAAI,IAEpE,UAAWE,KAAW,KAAK,SACzBD,GAAOC,EAAQ,MAAM,EAAI,EAAI,IAG/B,OAAAD,EAAMA,EAAI,MAAM,EAAG,EAAE,EACrBA,GAAO,IAEAA,CACT,CAEA,MAAME,EAAyC,CAC7C,MAAMC,EAAM,IAAIC,EAAAA,aAAa,KAAK,YAAY,EAE9CD,EAAI,UAAU,CAAC,EACf,KAAK,aAAaA,EAAKJ,EAAAA,eAAe,aAAa,IAAKG,CAAa,EACrEC,EAAI,cAAc,KAAK,SAAS,MAAM,EAEtC,UAAWF,KAAW,KAAK,SACzBE,EAAI,YAAYF,EAAQ,MAAM,CAAE,KAAM,KAAK,IAAA,CAAM,CAAC,EAGpD,OAAOE,EAAI,MACb,CAEA,QAAiB,CACf,MAAME,EAAO,IAAID,eAAa,EAAG,EAAI,EAE/BE,EAAYX,EAAAA,SAAS,iBAAiB,EAAG,EAAG,CAAC,EAC7CY,EAAU,KAAK,SAAS,SAAW,EAIzC,GAFA,KAAK,gBAAgBF,EAAMN,EAAAA,eAAe,aAAa,IAAKO,EAAWC,CAAO,EAE1E,KAAK,SAAS,OAAS,EAAG,CAC5BF,EAAK,YAAY,KAAK,SAAS,MAAM,EAErC,MAAMG,EAAgB,IAAIC,EAAAA,MAAM,EAAG,EAAG,EAAG,CAAC,EAC1C,UAAWR,KAAW,KAAK,SACzBI,EAAK,YAAYJ,EAAQ,OAAOO,EAAe,EAAI,CAAC,CAExD,CAEA,OAAOH,EAAK,MACd,CAEA,YAAqB,CACnB,IAAIK,EAAO,EAEX,QAASC,EAAI,EAAGA,EAAI,KAAK,SAAS,OAAQA,IACxCD,GAAQ,KAAK,SAASC,CAAC,EAAE,WAAA,EAG3B,OAAOD,CACT,CAEA,WAAiC,CAC/B,MAAME,EAAgD,CAAA,EAEtD,UAAWX,KAAW,KAAK,SACzBW,EAAY,KAAKX,EAAQ,UAAU,EAAI,CAAC,EAG1C,MAAO,CACL,KAAMF,EAAAA,eAAe,aAAa,QAClC,YAAAa,CAAA,CAEJ,CACF"}