quad-hexer
Version:
A library for converting between quad and hex representations of geocodes.
1 lines • 13.2 kB
Source Map (JSON)
{"version":3,"file":"quad-hexer.cjs","sources":["../src/quadkey.ts","../src/s2-hilbert-quadkey.ts","../src/spatial-id-tilehash.ts","../src/index.ts"],"sourcesContent":["export const encodeQuadkey = (quadkey: string): string => {\n if (typeof quadkey !== 'string') {\n throw new Error('Invalid quadkey type: ' + typeof quadkey);\n }\n const quadkeyPattern = /^[0-3]{1,32}$/;\n if (!quadkeyPattern.test(quadkey)) {\n throw new Error('Invalid quadkey format: ' + quadkey);\n }\n const binaryString = quadkey\n .split('')\n .map((c) => parseInt(c, 4).toString(2).padStart(2, '0'))\n .join('');\n\n const hexStringArray = ['x'];\n const hexDigits = Math.floor(binaryString.length / 4);\n if (binaryString.length % 4 === 0) {\n hexStringArray.push(\n BigInt('0b' + binaryString)\n .toString(16)\n .padStart(hexDigits, '0')\n );\n } else {\n if (binaryString.length >= 4) {\n hexStringArray.push(\n BigInt('0b' + binaryString.slice(0, -2))\n .toString(16)\n .padStart(hexDigits, '0')\n );\n }\n hexStringArray.push('#');\n hexStringArray.push(BigInt('0b' + binaryString.slice(-2)).toString(4));\n }\n return hexStringArray.join('');\n};\n\nexport const decodeHexQuadkey = (hexQuadkey: string): string => {\n if (!hexQuadkey || typeof hexQuadkey !== 'string') {\n throw new Error('Invalid hex quadkey type: ' + typeof hexQuadkey);\n }\n const hexQuadkeyPattern = /^x([0-9a-f]{0,16})(?:#([0-3]))?$/;\n if (!hexQuadkeyPattern.test(hexQuadkey)) {\n throw new Error('Invalid hex quadkey format: ' + hexQuadkey);\n }\n const matches = hexQuadkey.match(hexQuadkeyPattern)!;\n if (!matches[1] && !matches[2]) {\n throw new Error('Invalid hex quadkey format: ' + hexQuadkey);\n }\n const quadStringArray = [];\n if (matches[1]) {\n const quadDigits = matches[1].length * 2;\n quadStringArray.push(\n BigInt('0x' + matches[1])\n .toString(4)\n .padStart(quadDigits, '0')\n );\n }\n if (matches[2]) {\n quadStringArray.push(matches[2]);\n }\n return quadStringArray.join('');\n};\n","import { encodeQuadkey, decodeHexQuadkey } from './quadkey';\n\nexport const encodeS2HilbertQuadkey = (s2HilbertQuadkey: string): string => {\n if (typeof s2HilbertQuadkey !== 'string') {\n throw new Error('Invalid S2 hilbert quadkey type: ' + typeof s2HilbertQuadkey);\n }\n const s2HilbertQuadkeyPattern = /^([0-5]{1})\\/([0-3]{1,30})$/;\n if (!s2HilbertQuadkeyPattern.test(s2HilbertQuadkey)) {\n throw new Error('Invalid S2 hilbert quadkey format: ' + s2HilbertQuadkey);\n }\n const matches = s2HilbertQuadkey.match(s2HilbertQuadkeyPattern)!;\n const hexStringArray = [];\n hexStringArray.push(matches[1]);\n hexStringArray.push(encodeQuadkey(matches[2]));\n return hexStringArray.join('');\n};\n\nexport const decodeHexS2HilbertQuadkey = (hexS2HilbertQuadkey: string): string => {\n if (typeof hexS2HilbertQuadkey !== 'string') {\n throw new Error('Invalid hex S2 hilbert quadkey type: ' + typeof hexS2HilbertQuadkey);\n }\n const hexS2HilbertQuadkeyPattern = /^([0-5]{1})(x[0-9a-f]{0,15}(?:#[0-3])?)$/;\n if (!hexS2HilbertQuadkeyPattern.test(hexS2HilbertQuadkey)) {\n throw new Error('Invalid hex S2 hilbert quadkey format: ' + hexS2HilbertQuadkey);\n }\n const matches = hexS2HilbertQuadkey.match(hexS2HilbertQuadkeyPattern)!;\n const quadStringArray = [];\n quadStringArray.push(matches[1]);\n quadStringArray.push('/');\n if (matches[2]) {\n try {\n quadStringArray.push(decodeHexQuadkey(matches[2]));\n } catch (error) {\n if (\n error instanceof Error &&\n error.message &&\n error.message.includes('Invalid hex quadkey format')\n ) {\n throw new Error('Invalid hex S2 hilbert quadkey format: ' + hexS2HilbertQuadkey);\n } else {\n throw error;\n }\n }\n }\n return quadStringArray.join('');\n};\n","import { encodeQuadkey, decodeHexQuadkey } from './quadkey';\n\nexport const encodeSpatialIdTilehash = (spatialIdTilehash: string): string => {\n if (typeof spatialIdTilehash !== 'string') {\n throw new Error('Invalid spatial id tilehash type: ' + typeof spatialIdTilehash);\n }\n const spatialIdTilehashPattern = /^(-?)([1-8]{1,30})$/;\n if (!spatialIdTilehashPattern.test(spatialIdTilehash)) {\n throw new Error('Invalid spatial id tilehash format: ' + spatialIdTilehash);\n }\n const matches = spatialIdTilehash.match(spatialIdTilehashPattern)!;\n const isNegative = matches[1] === '-';\n const tilehash = matches[2];\n const octalString = tilehash\n .split('')\n .map((c) => (parseInt(c) - 1).toString())\n .join('');\n const octalDigits = octalString.length;\n const tilehashNumber = BigInt('0o' + octalString);\n const binaryString = tilehashNumber.toString(2).padStart(octalDigits * 3, '0');\n const fBinaryArray = [];\n const yxBinaryArray = [];\n for (let i = 0; i < octalDigits * 3; i += 3) {\n fBinaryArray.push(binaryString.slice(i, i + 1));\n yxBinaryArray.push(binaryString.slice(i + 1, i + 3));\n }\n const fBinaryString = fBinaryArray.join('');\n const yxBinaryString = yxBinaryArray.join('');\n const floorNumber = parseInt(fBinaryString, 2);\n const yxNumber = BigInt('0b' + yxBinaryString);\n const quadkey = yxNumber.toString(4).padStart(octalDigits, '0');\n const hexStringArray = [];\n hexStringArray.push(encodeQuadkey(quadkey));\n if (floorNumber !== 0) {\n hexStringArray.push(isNegative ? '-' : '+');\n hexStringArray.push(floorNumber.toString(16));\n }\n return hexStringArray.join('');\n};\n\nexport const decodeHexSpatialIdTilehash = (hexSpatialIdTilehash: string): string => {\n if (typeof hexSpatialIdTilehash !== 'string') {\n throw new Error('Invalid hex spatial id tilehash type: ' + typeof hexSpatialIdTilehash);\n }\n const hexSpatialIdTilehashPattern = /^(x[0-9a-f]{0,15}(?:#[0-3])?)(?:([+-][0-9a-f]+))?$/;\n if (!hexSpatialIdTilehashPattern.test(hexSpatialIdTilehash)) {\n throw new Error('Invalid hex spatial id tilehash format: ' + hexSpatialIdTilehash);\n }\n const matches = hexSpatialIdTilehash.match(hexSpatialIdTilehashPattern)!;\n let quadString;\n try {\n quadString = decodeHexQuadkey(matches[1]);\n } catch (error) {\n if (\n error instanceof Error &&\n error.message &&\n error.message.includes('Invalid hex quadkey format')\n ) {\n throw new Error('Invalid hex spatial id tilehash format: ' + hexSpatialIdTilehash);\n } else {\n throw error;\n }\n }\n const floorNumber = matches[2] ? parseInt(matches[2], 16) : 0;\n const quadDigits = quadString.length;\n const fBinaryString = Math.abs(floorNumber).toString(2).padStart(quadDigits, '0');\n const binaryStringArray = [];\n for (let i = 0; i < quadDigits; i++) {\n binaryStringArray.push(fBinaryString.slice(i, i + 1));\n binaryStringArray.push(parseInt(quadString[i], 4).toString(2).padStart(2, '0'));\n }\n const binaryString = binaryStringArray.join('');\n const octalString = BigInt('0b' + binaryString)\n .toString(8)\n .padStart(quadDigits, '0');\n const incrementedOctalString = octalString\n .split('')\n .map((c) => (parseInt(c) + 1).toString())\n .join('');\n const isNegative = floorNumber < 0;\n const tilehashStringArray = [];\n if (isNegative) {\n tilehashStringArray.push('-');\n }\n tilehashStringArray.push(incrementedOctalString);\n return tilehashStringArray.join('');\n};\n","export { encodeQuadkey, decodeHexQuadkey } from './quadkey';\nexport { encodeS2HilbertQuadkey, decodeHexS2HilbertQuadkey } from './s2-hilbert-quadkey';\nexport { encodeSpatialIdTilehash, decodeHexSpatialIdTilehash } from './spatial-id-tilehash';\n\nimport { encodeQuadkey, decodeHexQuadkey } from './quadkey';\nimport { encodeS2HilbertQuadkey, decodeHexS2HilbertQuadkey } from './s2-hilbert-quadkey';\nimport { encodeSpatialIdTilehash, decodeHexSpatialIdTilehash } from './spatial-id-tilehash';\n\nexport const quadHexer = {\n encodeQuadkey: encodeQuadkey,\n decodeHexQuadkey: decodeHexQuadkey,\n encodeS2HilbertQuadkey: encodeS2HilbertQuadkey,\n decodeHexS2HilbertQuadkey: decodeHexS2HilbertQuadkey,\n encodeSpatialIdTilehash: encodeSpatialIdTilehash,\n decodeHexSpatialIdTilehash: decodeHexSpatialIdTilehash\n} as const;\n"],"names":["encodeQuadkey","quadkey","binaryString","c","hexStringArray","hexDigits","decodeHexQuadkey","hexQuadkey","hexQuadkeyPattern","matches","quadStringArray","quadDigits","encodeS2HilbertQuadkey","s2HilbertQuadkey","s2HilbertQuadkeyPattern","decodeHexS2HilbertQuadkey","hexS2HilbertQuadkey","hexS2HilbertQuadkeyPattern","error","encodeSpatialIdTilehash","spatialIdTilehash","spatialIdTilehashPattern","isNegative","octalString","octalDigits","fBinaryArray","yxBinaryArray","i","fBinaryString","yxBinaryString","floorNumber","decodeHexSpatialIdTilehash","hexSpatialIdTilehash","hexSpatialIdTilehashPattern","quadString","binaryStringArray","incrementedOctalString","tilehashStringArray","quadHexer"],"mappings":"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"}