UNPKG

well-known-parser

Version:

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

1 lines 4.02 kB
{"version":3,"file":"well-known-parser17.cjs","sources":["../src/parsers/linestring.ts"],"sourcesContent":["import type { BinaryReader } from '../binaryreader';\nimport type { WktParser } from '../wktparser';\nimport type { GeometryOptions } from '../types';\nimport { LineString } from '../linestring';\nimport { Point } from '../point';\nimport { parsePointGeoJSON, parsePointWkb, parseRelativePointTwkb } from './point';\nimport type { LineString as GeoJSONLineString } from 'geojson';\n\nexport function parseLineStringWkt(value: WktParser, options: GeometryOptions): LineString {\n const lineString = new LineString();\n lineString.srid = options.srid;\n lineString.hasZ = options.hasZ ?? false;\n lineString.hasM = options.hasM ?? false;\n\n if (value.isMatch(['EMPTY'])) {\n return lineString;\n }\n\n value.expectGroupStart();\n const coordinates = value.matchCoordinates(options);\n for (const coord of coordinates) {\n lineString.points.push(coord);\n }\n value.expectGroupEnd();\n\n return lineString;\n}\n\nexport function parseLineStringWkb(value: BinaryReader, options: GeometryOptions): LineString {\n const lineString = new LineString();\n lineString.srid = options.srid;\n lineString.hasZ = options.hasZ ?? false;\n lineString.hasM = options.hasM ?? false;\n\n const pointCount = value.readUInt32();\n const childOptions: GeometryOptions = {\n ...options,\n srid: undefined,\n };\n\n for (let i = 0; i < pointCount; i++) {\n lineString.points.push(parsePointWkb(value, childOptions));\n }\n\n return lineString;\n}\n\nexport function parseLineStringTwkb(value: BinaryReader, options: GeometryOptions): LineString {\n const lineString = new LineString();\n lineString.hasZ = options.hasZ ?? false;\n lineString.hasM = options.hasM ?? false;\n\n if (options.isEmpty) {\n return lineString;\n }\n\n const previousPoint = new Point(0, 0, options.hasZ ? 0 : undefined, options.hasM ? 0 : undefined);\n\n const pointCount = value.readVarInt();\n\n for (let i = 0; i < pointCount; i++) {\n lineString.points.push(parseRelativePointTwkb(value, options, previousPoint));\n }\n\n return lineString;\n}\n\nexport function parseLineStringGeoJSON(value: Pick<GeoJSONLineString, 'coordinates'>): LineString {\n const lineString = new LineString();\n\n if (value.coordinates.length > 0) {\n lineString.hasZ = value.coordinates[0].length > 2;\n }\n\n for (const point of value.coordinates) {\n lineString.points.push(parsePointGeoJSON(point));\n }\n\n return lineString;\n}\n"],"names":["parseLineStringWkt","value","options","lineString","LineString","coordinates","coord","parseLineStringWkb","pointCount","childOptions","i","parsePointWkb","parseLineStringTwkb","previousPoint","Point","parseRelativePointTwkb","parseLineStringGeoJSON","point","parsePointGeoJSON"],"mappings":"yMAQO,SAASA,EAAmBC,EAAkBC,EAAsC,CACzF,MAAMC,EAAa,IAAIC,aAKvB,GAJAD,EAAW,KAAOD,EAAQ,KAC1BC,EAAW,KAAOD,EAAQ,MAAQ,GAClCC,EAAW,KAAOD,EAAQ,MAAQ,GAE9BD,EAAM,QAAQ,CAAC,OAAO,CAAC,EACzB,OAAOE,EAGTF,EAAM,iBAAA,EACN,MAAMI,EAAcJ,EAAM,iBAAiBC,CAAO,EAClD,UAAWI,KAASD,EAClBF,EAAW,OAAO,KAAKG,CAAK,EAE9B,OAAAL,EAAM,eAAA,EAECE,CACT,CAEO,SAASI,EAAmBN,EAAqBC,EAAsC,CAC5F,MAAMC,EAAa,IAAIC,aACvBD,EAAW,KAAOD,EAAQ,KAC1BC,EAAW,KAAOD,EAAQ,MAAQ,GAClCC,EAAW,KAAOD,EAAQ,MAAQ,GAElC,MAAMM,EAAaP,EAAM,WAAA,EACnBQ,EAAgC,CACpC,GAAGP,EACH,KAAM,MAAA,EAGR,QAASQ,EAAI,EAAGA,EAAIF,EAAYE,IAC9BP,EAAW,OAAO,KAAKQ,EAAAA,cAAcV,EAAOQ,CAAY,CAAC,EAG3D,OAAON,CACT,CAEO,SAASS,EAAoBX,EAAqBC,EAAsC,CAC7F,MAAMC,EAAa,IAAIC,aAIvB,GAHAD,EAAW,KAAOD,EAAQ,MAAQ,GAClCC,EAAW,KAAOD,EAAQ,MAAQ,GAE9BA,EAAQ,QACV,OAAOC,EAGT,MAAMU,EAAgB,IAAIC,EAAAA,MAAM,EAAG,EAAGZ,EAAQ,KAAO,EAAI,OAAWA,EAAQ,KAAO,EAAI,MAAS,EAE1FM,EAAaP,EAAM,WAAA,EAEzB,QAASS,EAAI,EAAGA,EAAIF,EAAYE,IAC9BP,EAAW,OAAO,KAAKY,EAAAA,uBAAuBd,EAAOC,EAASW,CAAa,CAAC,EAG9E,OAAOV,CACT,CAEO,SAASa,EAAuBf,EAA2D,CAChG,MAAME,EAAa,IAAIC,aAEnBH,EAAM,YAAY,OAAS,IAC7BE,EAAW,KAAOF,EAAM,YAAY,CAAC,EAAE,OAAS,GAGlD,UAAWgB,KAAShB,EAAM,YACxBE,EAAW,OAAO,KAAKe,EAAAA,kBAAkBD,CAAK,CAAC,EAGjD,OAAOd,CACT"}