well-known-parser
Version:
A WKT/WKB/EWKT/EWKB/TWKB/GeoJSON parser and serializer
1 lines • 6.77 kB
Source Map (JSON)
{"version":3,"file":"well-known-parser21.cjs","sources":["../src/parsers/multipolygon.ts"],"sourcesContent":["import type { BinaryReader } from '../binaryreader';\nimport type { WktParser } from '../wktparser';\nimport type { GeometryOptions } from '../types';\nimport { MultiPolygon } from '../multipolygon';\nimport { Polygon } from '../polygon';\nimport { Point } from '../point';\nimport { parsePolygonGeoJSON } from './polygon';\nimport { parseRelativePointTwkb } from './point';\nimport { parseWkb } from './index';\nimport type { MultiPolygon as GeoJSONMultiPoint } from 'geojson';\n\nexport function parseMultiPolygonWkt(value: WktParser, options: GeometryOptions): MultiPolygon {\n const multiPolygon = new MultiPolygon();\n multiPolygon.srid = options.srid;\n multiPolygon.hasZ = options.hasZ ?? false;\n multiPolygon.hasM = options.hasM ?? false;\n\n if (value.isMatch(['EMPTY'])) {\n return multiPolygon;\n }\n\n value.expectGroupStart();\n\n do {\n value.expectGroupStart();\n\n const exteriorRing: Point[] = [];\n const interiorRings: Point[][] = [];\n\n value.expectGroupStart();\n const exteriorCoords = value.matchCoordinates(options);\n for (const coord of exteriorCoords) {\n exteriorRing.push(coord);\n }\n value.expectGroupEnd();\n\n while (value.isMatch([','])) {\n value.expectGroupStart();\n const interiorCoords = value.matchCoordinates(options);\n const ring = [];\n for (const coord of interiorCoords) {\n ring.push(coord);\n }\n interiorRings.push(ring);\n value.expectGroupEnd();\n }\n\n multiPolygon.polygons.push(new Polygon(exteriorRing, interiorRings));\n\n value.expectGroupEnd();\n } while (value.isMatch([',']));\n\n value.expectGroupEnd();\n\n return multiPolygon;\n}\n\nexport function parseMultiPolygonWkb(value: BinaryReader, options: GeometryOptions): MultiPolygon {\n const multiPolygon = new MultiPolygon();\n multiPolygon.srid = options.srid;\n multiPolygon.hasZ = options.hasZ ?? false;\n multiPolygon.hasM = options.hasM ?? false;\n\n const polygonCount = value.readUInt32();\n\n for (let i = 0; i < polygonCount; i++) {\n // This can only return a Polygon, but we need to call parseWkb in order to make sure wkb headers are read\n multiPolygon.polygons.push(parseWkb(value, options) as Polygon);\n }\n\n return multiPolygon;\n}\n\nexport function parseMultiPolygonTwkb(value: BinaryReader, options: GeometryOptions): MultiPolygon {\n const multiPolygon = new MultiPolygon();\n multiPolygon.hasZ = options.hasZ ?? false;\n multiPolygon.hasM = options.hasM ?? false;\n\n if (options.isEmpty) {\n return multiPolygon;\n }\n\n const previousPoint = new Point(0, 0, options.hasZ ? 0 : undefined, options.hasM ? 0 : undefined);\n\n const polygonCount = value.readVarInt();\n\n for (let i = 0; i < polygonCount; i++) {\n const polygon = new Polygon();\n polygon.hasZ = options.hasZ ?? false;\n polygon.hasM = options.hasM ?? false;\n\n const ringCount = value.readVarInt();\n const exteriorRingCount = value.readVarInt();\n\n for (let j = 0; j < exteriorRingCount; j++) {\n polygon.exteriorRing.push(parseRelativePointTwkb(value, options, previousPoint));\n }\n\n for (let j = 1; j < ringCount; j++) {\n const interiorRing: Point[] = [];\n const interiorRingCount = value.readVarInt();\n\n for (let k = 0; k < interiorRingCount; k++) {\n interiorRing.push(parseRelativePointTwkb(value, options, previousPoint));\n }\n\n polygon.interiorRings.push(interiorRing);\n }\n\n multiPolygon.polygons.push(polygon);\n }\n\n return multiPolygon;\n}\n\nexport function parseMultiPolygonGeoJSON(\n value: Pick<GeoJSONMultiPoint, 'coordinates'>\n): MultiPolygon {\n const multiPolygon = new MultiPolygon();\n\n if (\n value.coordinates.length > 0 &&\n value.coordinates[0].length > 0 &&\n value.coordinates[0][0].length > 0\n ) {\n multiPolygon.hasZ = value.coordinates[0][0][0].length > 2;\n }\n\n for (let i = 0; i < value.coordinates.length; i++) {\n multiPolygon.polygons.push(parsePolygonGeoJSON({ coordinates: value.coordinates[i] }));\n }\n\n return multiPolygon;\n}\n"],"names":["parseMultiPolygonWkt","value","options","multiPolygon","MultiPolygon","exteriorRing","interiorRings","exteriorCoords","coord","interiorCoords","ring","Polygon","parseMultiPolygonWkb","polygonCount","i","parseWkb","parseMultiPolygonTwkb","previousPoint","Point","polygon","ringCount","exteriorRingCount","j","parseRelativePointTwkb","interiorRing","interiorRingCount","k","parseMultiPolygonGeoJSON","parsePolygonGeoJSON"],"mappings":"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"}