Files
Projekt-Visualisierung/node_modules/@maplibre/geojson-vt/dist/geojson-vt.mjs.map
2026-04-15 17:08:39 +02:00

1 line
148 KiB
Plaintext

{"version":3,"file":"geojson-vt.mjs","sources":["../src/simplify.ts","../src/feature.ts","../src/convert.ts","../src/deconvert.ts","../src/clip.ts","../src/wrap.ts","../src/difference.ts","../src/cluster-tile-index.ts","../src/tile.ts","../src/transform.ts","../src/tile-index.ts","../src/geojsonvt.ts","../src/geojson-to-tile.ts"],"sourcesContent":["/**\n * calculate simplification data using optimized Douglas-Peucker algorithm\n * @param coords - flat array of coordinates\n * @param first - index of the first coordinate in the segment\n * @param last - index of the last coordinate in the segment\n * @param sqTolerance - square tolerance value\n */\nexport function simplify(coords: number[], first: number, last: number, sqTolerance: number) {\n let maxSqDist = sqTolerance;\n const mid = first + ((last - first) >> 1);\n let minPosToMid = last - first;\n let index;\n\n const ax = coords[first];\n const ay = coords[first + 1];\n const bx = coords[last];\n const by = coords[last + 1];\n\n for (let i = first + 3; i < last; i += 3) {\n const d = getSqSegDist(coords[i], coords[i + 1], ax, ay, bx, by);\n\n if (d > maxSqDist) {\n index = i;\n maxSqDist = d;\n continue;\n }\n\n if (d === maxSqDist) {\n // a workaround to ensure we choose a pivot close to the middle of the list,\n // reducing recursion depth, for certain degenerate inputs\n // https://github.com/mapbox/geojson-vt/issues/104\n const posToMid = Math.abs(i - mid);\n if (posToMid < minPosToMid) {\n index = i;\n minPosToMid = posToMid;\n }\n }\n }\n\n if (maxSqDist > sqTolerance) {\n if (index - first > 3) simplify(coords, first, index, sqTolerance);\n coords[index + 2] = maxSqDist;\n if (last - index > 3) simplify(coords, index, last, sqTolerance);\n }\n}\n\n/**\n * Claculates the square distance from a point to a segment\n * @param px - x coordinate of the point\n * @param py - y coordinate of the point\n * @param x - x coordinate of the first segment endpoint\n * @param y - y coordinate of the first segment endpoint\n * @param bx - x coordinate of the second segment endpoint\n * @param by - y coordinate of the second segment endpoint\n * @returns square distance from a point to a segment\n */\nfunction getSqSegDist(px: number, py: number, x: number, y: number, bx: number, by: number): number {\n let dx = bx - x;\n let dy = by - y;\n\n if (dx !== 0 || dy !== 0) {\n const t = ((px - x) * dx + (py - y) * dy) / (dx * dx + dy * dy);\n\n if (t > 1) {\n x = bx;\n y = by;\n\n } else if (t > 0) {\n x += dx * t;\n y += dy * t;\n }\n }\n\n dx = px - x;\n dy = py - y;\n\n return dx * dx + dy * dy;\n}\n","import type { GeoJSONVTInternalFeature, GeoJSONVTInternalLineStringFeature, GeoJSONVTInternalMultiLineStringFeature, GeoJSONVTInternalMultiPointFeature, GeoJSONVTInternalMultiPolygonFeature, GeoJSONVTInternalPointFeature, GeoJSONVTInternalPolygonFeature } from \"./definitions\";\n\ntype FeatureTypeMap = {\n Point: GeoJSONVTInternalPointFeature[\"geometry\"];\n MultiPoint: GeoJSONVTInternalMultiPointFeature[\"geometry\"];\n LineString: GeoJSONVTInternalLineStringFeature[\"geometry\"];\n MultiLineString: GeoJSONVTInternalMultiLineStringFeature[\"geometry\"];\n Polygon: GeoJSONVTInternalPolygonFeature[\"geometry\"];\n MultiPolygon: GeoJSONVTInternalMultiPolygonFeature[\"geometry\"];\n};\n\n/**\n * \n * @param id - the feature's ID\n * @param type - the feature's type\n * @param geom - the feature's geometry\n * @param tags - the feature's properties\n * @returns the created feature\n */\nexport function createFeature<T extends GeoJSONVTInternalFeature[\"type\"]>(id: number | string | undefined, type: T, geom: FeatureTypeMap[T], tags: GeoJSON.GeoJsonProperties): GeoJSONVTInternalFeature {\n // This is mostly for TypeScript type narrowing\n const data = { type, geom } as { [K in GeoJSONVTInternalFeature[\"type\"]]: { type: K, geom: FeatureTypeMap[K] } }[GeoJSONVTInternalFeature[\"type\"]];\n\n const feature = {\n id: id == null ? null : id,\n type: data.type,\n geometry: data.geom,\n tags,\n minX: Infinity,\n minY: Infinity,\n maxX: -Infinity,\n maxY: -Infinity\n } as GeoJSONVTInternalFeature;\n\n switch (data.type) {\n case 'Point':\n case 'MultiPoint':\n case 'LineString':\n calcLineBBox(feature, data.geom);\n break;\n\n case 'Polygon':\n // the outer ring (ie [0]) contains all inner rings\n calcLineBBox(feature, data.geom[0]);\n break;\n\n case 'MultiLineString':\n for (const line of data.geom) {\n calcLineBBox(feature, line);\n }\n break;\n\n case 'MultiPolygon':\n for (const polygon of data.geom) {\n // the outer ring (ie [0]) contains all inner rings\n calcLineBBox(feature, polygon[0]);\n }\n break;\n }\n\n return feature;\n}\n\nfunction calcLineBBox(feature: GeoJSONVTInternalFeature, geom: number[]) {\n for (let i = 0; i < geom.length; i += 3) {\n feature.minX = Math.min(feature.minX, geom[i]);\n feature.minY = Math.min(feature.minY, geom[i + 1]);\n feature.maxX = Math.max(feature.maxX, geom[i]);\n feature.maxY = Math.max(feature.maxY, geom[i + 1]);\n }\n}\n","\nimport {simplify} from './simplify';\nimport {createFeature} from './feature';\nimport type {GeoJSONVTInternalFeature, GeoJSONVTOptions, StartEndSizeArray} from './definitions';\n\n/**\n * converts GeoJSON to internal source features (an intermediate projected JSON vector format with simplification data)\n * @param data\n * @param options\n * @returns\n */\nexport function convertToInternal(data: GeoJSON.GeoJSON, options: GeoJSONVTOptions): GeoJSONVTInternalFeature[] {\n const features: GeoJSONVTInternalFeature[] = [];\n\n switch (data.type) {\n case 'FeatureCollection':\n for (let i = 0; i < data.features.length; i++) {\n featureToInternal(features, data.features[i], options, i);\n }\n break;\n case 'Feature':\n featureToInternal(features, data, options);\n break;\n default:\n featureToInternal(features, {type: \"Feature\" as const, geometry: data, properties: undefined}, options);\n }\n\n return features;\n}\n\nfunction featureToInternal(features: GeoJSONVTInternalFeature[], geojson: GeoJSON.Feature, options: GeoJSONVTOptions, index?: number) {\n if (!geojson.geometry) return;\n\n if (geojson.geometry.type === 'GeometryCollection') {\n convertGeometryCollection(features, geojson, geojson.geometry, options, index);\n return;\n }\n\n const coords = geojson.geometry.coordinates;\n if (!coords?.length) return;\n\n const id = getFeatureId(geojson, options, index);\n const tolerance = Math.pow(options.tolerance / ((1 << options.maxZoom) * options.extent), 2);\n\n switch (geojson.geometry.type) {\n case 'Point':\n convertPointFeature(features, id, geojson.geometry, geojson.properties);\n return;\n\n case 'MultiPoint':\n convertMultiPointFeature(features, id, geojson.geometry, geojson.properties);\n return;\n\n case 'LineString':\n convertLineStringFeature(features, id, geojson.geometry, tolerance, geojson.properties);\n return;\n\n case 'MultiLineString':\n convertMultiLineStringFeature(features, id, geojson.geometry, tolerance, options, geojson.properties);\n return;\n\n case 'Polygon':\n convertPolygonFeature(features, id, geojson.geometry, tolerance, geojson.properties);\n return;\n\n case 'MultiPolygon':\n convertMultiPolygonFeature(features, id, geojson.geometry, tolerance, geojson.properties);\n return;\n\n default:\n throw new Error('Input data is not a valid GeoJSON object.');\n }\n}\n\nfunction getFeatureId(geojson: GeoJSON.Feature, options: GeoJSONVTOptions, index?: number): number | string | undefined {\n if (options.promoteId) {\n return geojson.properties?.[options.promoteId];\n }\n if (options.generateId) {\n return index || 0;\n }\n return geojson.id;\n}\n\nfunction convertGeometryCollection(features: GeoJSONVTInternalFeature[], geojson: GeoJSON.Feature, geometry: GeoJSON.GeometryCollection, options: GeoJSONVTOptions, index?: number) {\n for (const geom of geometry.geometries) {\n featureToInternal(features, {\n id: geojson.id,\n type: 'Feature',\n geometry: geom,\n properties: geojson.properties\n }, options, index);\n }\n}\n\nfunction convertPointFeature(features: GeoJSONVTInternalFeature[], id: number | string | undefined, geom: GeoJSON.Point, properties: GeoJSON.GeoJsonProperties) {\n const out: number[] = [];\n out.push(projectX(geom.coordinates[0]), projectY(geom.coordinates[1]), 0);\n features.push(createFeature(id, 'Point', out, properties));\n}\n\nfunction convertMultiPointFeature(features: GeoJSONVTInternalFeature[], id: number | string | undefined, geom: GeoJSON.MultiPoint, properties: GeoJSON.GeoJsonProperties) {\n const out: number[] = [];\n for (const coords of geom.coordinates) {\n out.push(projectX(coords[0]), projectY(coords[1]), 0);\n }\n features.push(createFeature(id, 'MultiPoint', out, properties));\n}\n\nfunction convertLineStringFeature(features: GeoJSONVTInternalFeature[], id: number | string | undefined, geom: GeoJSON.LineString, tolerance: number, properties: GeoJSON.GeoJsonProperties) {\n const out: StartEndSizeArray = [];\n convertLine(geom.coordinates, out, tolerance, false);\n features.push(createFeature(id, 'LineString', out, properties));\n}\n\nfunction convertMultiLineStringFeature(features: GeoJSONVTInternalFeature[], id: number | string | undefined, geom: GeoJSON.MultiLineString, tolerance: number, options: GeoJSONVTOptions, properties: GeoJSON.GeoJsonProperties) {\n if (options.lineMetrics) {\n // explode into linestrings to be able to track metrics\n for (const line of geom.coordinates) {\n const out: StartEndSizeArray = [];\n convertLine(line, out, tolerance, false);\n features.push(createFeature(id, 'LineString', out, properties));\n }\n } else {\n const out: StartEndSizeArray[] = [];\n convertLines(geom.coordinates, out, tolerance, false);\n features.push(createFeature(id, 'MultiLineString', out, properties));\n }\n}\n\nfunction convertPolygonFeature(features: GeoJSONVTInternalFeature[], id: number | string | undefined, geom: GeoJSON.Polygon, tolerance: number, properties: GeoJSON.GeoJsonProperties) {\n const out: StartEndSizeArray[] = [];\n convertLines(geom.coordinates, out, tolerance, true);\n features.push(createFeature(id, 'Polygon', out, properties));\n}\n\nfunction convertMultiPolygonFeature(features: GeoJSONVTInternalFeature[], id: number | string | undefined, geom: GeoJSON.MultiPolygon, tolerance: number, properties: GeoJSON.GeoJsonProperties) {\n const out: StartEndSizeArray[][] = [];\n for (const polygon of geom.coordinates) {\n const polygonOut: StartEndSizeArray[] = [];\n convertLines(polygon, polygonOut, tolerance, true);\n out.push(polygonOut);\n }\n features.push(createFeature(id, 'MultiPolygon', out, properties));\n}\n\nfunction convertLine(ring: GeoJSON.Position[], out: StartEndSizeArray, tolerance: number, isPolygon: boolean) {\n let x0, y0;\n let size = 0;\n\n for (let j = 0; j < ring.length; j++) {\n const x = projectX(ring[j][0]);\n const y = projectY(ring[j][1]);\n\n out.push(x, y, 0);\n\n if (j > 0) {\n if (isPolygon) {\n size += (x0 * y - x * y0) / 2; // area\n } else {\n size += Math.sqrt(Math.pow(x - x0, 2) + Math.pow(y - y0, 2)); // length\n }\n }\n x0 = x;\n y0 = y;\n }\n\n const last = out.length - 3;\n out[2] = 1;\n if (tolerance > 0) simplify(out, 0, last, tolerance);\n out[last + 2] = 1;\n\n out.size = Math.abs(size);\n out.start = 0;\n out.end = out.size;\n}\n\nfunction convertLines(rings: GeoJSON.Position[][], out: StartEndSizeArray[], tolerance: number, isPolygon: boolean) {\n for (let i = 0; i < rings.length; i++) {\n const geom: StartEndSizeArray = [];\n convertLine(rings[i], geom, tolerance, isPolygon);\n out.push(geom);\n }\n}\n\n/**\n * Convert longitude to spherical mercator in [0..1] range\n */\nexport function projectX(x: number) {\n return x / 360 + 0.5;\n}\n\n/**\n * Convert latitude to spherical mercator in [0..1] range\n */\nexport function projectY(y: number) {\n const sin = Math.sin(y * Math.PI / 180);\n const y2 = 0.5 - 0.25 * Math.log((1 + sin) / (1 - sin)) / Math.PI;\n return y2 < 0 ? 0 : y2 > 1 ? 1 : y2;\n}\n","import type {GeoJSONVTInternalFeature} from './definitions';\n\n/**\n * Converts internal source features back to GeoJSON format.\n */\nexport function convertToGeoJSON(source: GeoJSONVTInternalFeature[]): GeoJSON.GeoJSON {\n const geojson: GeoJSON.GeoJSON = {\n type: 'FeatureCollection',\n features: source.map(feature => featureToGeoJSON(feature))\n };\n\n return geojson;\n}\n\n/**\n * Converts a single internal feature to GeoJSON format.\n */\nexport function featureToGeoJSON(feature: GeoJSONVTInternalFeature): GeoJSON.Feature {\n const geojsonFeature: GeoJSON.Feature = {\n type: 'Feature',\n geometry: geometryToGeoJSON(feature),\n properties: feature.tags\n };\n if (feature.id != null) {\n geojsonFeature.id = feature.id;\n }\n\n return geojsonFeature;\n}\n\n/**\n * Converts a single internal feature geometry to GeoJSON format.\n */\nfunction geometryToGeoJSON(feature: GeoJSONVTInternalFeature): GeoJSON.Geometry {\n const {type, geometry} = feature;\n\n switch (type) {\n case 'Point':\n return {\n type: type,\n coordinates: unprojectPoint(geometry[0], geometry[1])\n };\n case 'MultiPoint':\n case 'LineString':\n return {\n type: type,\n coordinates: unprojectPoints(geometry)\n };\n case 'MultiLineString':\n case 'Polygon':\n return {\n type: type,\n coordinates: geometry.map(ring => unprojectPoints(ring))\n };\n case 'MultiPolygon':\n return {\n type: type,\n coordinates: geometry.map(polygon =>\n polygon.map(ring => unprojectPoints(ring))\n )\n };\n }\n}\n\nexport function unprojectPoints(coords: number[]): GeoJSON.Position[] {\n const result: GeoJSON.Position[] = [];\n\n for (let i = 0; i < coords.length; i += 3) {\n result.push(unprojectPoint(coords[i], coords[i + 1]));\n }\n\n return result;\n}\n\nfunction unprojectPoint(x: number, y: number): GeoJSON.Position {\n return [unprojectX(x), unprojectY(y)];\n}\n\n/**\n * Convert spherical mercator in [0..1] range to longitude\n */\nexport function unprojectX(x: number): number {\n return (x - 0.5) * 360;\n}\n\n/**\n * Convert spherical mercator in [0..1] range to latitude\n */\nexport function unprojectY(y: number): number {\n const y2 = (180 - y * 360) * Math.PI / 180;\n return 360 * Math.atan(Math.exp(y2)) / Math.PI - 90;\n}\n","\nimport {createFeature} from './feature';\nimport type { GeoJSONVTInternalFeature, GeoJSONVTInternalLineStringFeature, GeoJSONVTInternalMultiLineStringFeature, GeoJSONVTInternalMultiPointFeature, GeoJSONVTInternalMultiPolygonFeature, GeoJSONVTInternalPointFeature, GeoJSONVTInternalPolygonFeature, GeoJSONVTOptions, StartEndSizeArray } from './definitions';\n\nexport const enum AxisType {\n X = 0,\n Y = 1\n}\n\n/** \n * clip features between two vertical or horizontal axis-parallel lines:\n * | |\n * ___|___ | /\n * / | \\____|____/\n * | |\n *\n * @param features - the features to clip\n * @param scale - the scale to divide start and end inputs\n * @param start - the start of the clip range\n * @param end - the end of the clip range\n * @param axis - which axis to clip against\n * @param minAll - the minimum for all features in the relevant axis\n * @param maxAll - the maximum for all features in the relevant axis\n */\nexport function clip(features: GeoJSONVTInternalFeature[], scale: number, start: number, end: number, axis: AxisType, minAll: number, maxAll: number, options: GeoJSONVTOptions): GeoJSONVTInternalFeature[] | null {\n start /= scale;\n end /= scale;\n\n if (minAll >= start && maxAll < end) { // trivial accept\n return features;\n }\n\n if (maxAll < start || minAll >= end) { // trivial reject\n return null;\n }\n\n const clipped: GeoJSONVTInternalFeature[] = [];\n\n for (const feature of features) {\n const min = axis === AxisType.X ? feature.minX : feature.minY;\n const max = axis === AxisType.X ? feature.maxX : feature.maxY;\n\n if (min >= start && max < end) { // trivial accept\n clipped.push(feature);\n continue;\n }\n\n if (max < start || min >= end) { // trivial reject\n continue;\n }\n\n switch (feature.type) {\n case 'Point':\n case 'MultiPoint': {\n clipPointFeature(feature, clipped, start, end, axis);\n continue;\n }\n\n case 'LineString': {\n clipLineStringFeature(feature, clipped, start, end, axis, options);\n continue;\n }\n\n case 'MultiLineString': {\n clipMultiLineStringFeature(feature, clipped, start, end, axis);\n continue;\n }\n\n case 'Polygon': {\n clipPolygonFeature(feature, clipped, start, end, axis);\n continue;\n }\n\n case 'MultiPolygon': {\n clipMultiPolygonFeature(feature, clipped, start, end, axis);\n continue;\n }\n }\n }\n\n if (!clipped.length) return null;\n\n return clipped;\n}\n\nfunction clipPointFeature(feature: GeoJSONVTInternalPointFeature | GeoJSONVTInternalMultiPointFeature, clipped: GeoJSONVTInternalFeature[], start: number, end: number, axis: AxisType) {\n const geom: number[] = [];\n\n clipPoints(feature.geometry, geom, start, end, axis);\n if (!geom.length) return;\n\n const type = geom.length === 3 ? 'Point' : 'MultiPoint';\n clipped.push(createFeature(feature.id, type, geom, feature.tags));\n}\n\nfunction clipLineStringFeature(feature: GeoJSONVTInternalLineStringFeature, clipped: GeoJSONVTInternalFeature[], start: number, end: number, axis: AxisType, options: GeoJSONVTOptions) {\n const geom: StartEndSizeArray[] = [];\n\n clipLine(feature.geometry, geom, start, end, axis, false, options.lineMetrics);\n if (!geom.length) return;\n\n if (options.lineMetrics) {\n for (const line of geom) {\n clipped.push(createFeature(feature.id, 'LineString', line, feature.tags));\n }\n return;\n }\n\n if (geom.length > 1) {\n clipped.push(createFeature(feature.id, 'MultiLineString', geom, feature.tags));\n return;\n }\n\n clipped.push(createFeature(feature.id, 'LineString', geom[0], feature.tags));\n}\n\nfunction clipMultiLineStringFeature(feature: GeoJSONVTInternalMultiLineStringFeature, clipped: GeoJSONVTInternalFeature[], start: number, end: number, axis: AxisType) {\n const geom: StartEndSizeArray[] = [];\n\n clipLines(feature.geometry, geom, start, end, axis, false);\n if (!geom.length) return;\n\n if (geom.length === 1) {\n clipped.push(createFeature(feature.id, 'LineString', geom[0], feature.tags));\n return;\n }\n\n clipped.push(createFeature(feature.id,'MultiLineString', geom, feature.tags));\n}\n\nfunction clipPolygonFeature(feature: GeoJSONVTInternalPolygonFeature, clipped: GeoJSONVTInternalFeature[], start: number, end: number, axis: AxisType) {\n const geom: StartEndSizeArray[] = [];\n\n clipLines(feature.geometry, geom, start, end, axis, true);\n if (!geom.length) return;\n\n clipped.push(createFeature(feature.id, 'Polygon', geom, feature.tags));\n}\n\nfunction clipMultiPolygonFeature(feature: GeoJSONVTInternalMultiPolygonFeature, clipped: GeoJSONVTInternalFeature[], start: number, end: number, axis: AxisType) {\n const geom: StartEndSizeArray[][] = [];\n\n for (const polygon of feature.geometry) {\n const newPolygon: StartEndSizeArray[] = [];\n\n clipLines(polygon, newPolygon, start, end, axis, true);\n if (!newPolygon.length) continue;\n\n geom.push(newPolygon);\n }\n if (!geom.length) return;\n\n clipped.push(createFeature(feature.id, 'MultiPolygon', geom, feature.tags));\n}\n\nfunction clipPoints(geom: number[], newGeom: number[], start: number, end: number, axis: AxisType) {\n for (let i = 0; i < geom.length; i += 3) {\n const a = geom[i + axis];\n\n if (a >= start && a <= end) {\n addPoint(newGeom, geom[i], geom[i + 1], geom[i + 2]);\n }\n }\n}\n\nfunction clipLine(geom: StartEndSizeArray, newGeom: StartEndSizeArray[], start: number, end: number, axis: AxisType, isPolygon: boolean, trackMetrics: boolean) {\n\n let slice = newSlice(geom);\n const intersect = axis === AxisType.X ? intersectX : intersectY;\n let len = geom.start;\n let segLen, t;\n\n for (let i = 0; i < geom.length - 3; i += 3) {\n const ax = geom[i];\n const ay = geom[i + 1];\n const az = geom[i + 2];\n const bx = geom[i + 3];\n const by = geom[i + 4];\n const a = axis === AxisType.X ? ax : ay;\n const b = axis === AxisType.X ? bx : by;\n let exited = false;\n\n if (trackMetrics) segLen = Math.sqrt(Math.pow(ax - bx, 2) + Math.pow(ay - by, 2));\n\n if (a < start) {\n // ---|--> | (line enters the clip region from the left)\n if (b > start) {\n t = intersect(slice, ax, ay, bx, by, start);\n if (trackMetrics) slice.start = len + segLen * t;\n }\n } else if (a > end) {\n // | <--|--- (line enters the clip region from the right)\n if (b < end) {\n t = intersect(slice, ax, ay, bx, by, end);\n if (trackMetrics) slice.start = len + segLen * t;\n }\n } else {\n addPoint(slice, ax, ay, az);\n }\n\n if (b < start && a >= start) {\n // <--|--- | or <--|-----|--- (line exits the clip region on the left)\n t = intersect(slice, ax, ay, bx, by, start);\n exited = true;\n }\n\n if (b > end && a <= end) {\n // | ---|--> or ---|-----|--> (line exits the clip region on the right)\n t = intersect(slice, ax, ay, bx, by, end);\n exited = true;\n }\n\n if (!isPolygon && exited) {\n if (trackMetrics) slice.end = len + segLen * t;\n newGeom.push(slice);\n slice = newSlice(geom);\n }\n\n if (trackMetrics) len += segLen;\n }\n\n // add the last point\n let last = geom.length - 3;\n const ax = geom[last];\n const ay = geom[last + 1];\n const az = geom[last + 2];\n const a = axis === AxisType.X ? ax : ay;\n if (a >= start && a <= end) addPoint(slice, ax, ay, az);\n\n // close the polygon if its endpoints are not the same after clipping\n last = slice.length - 3;\n if (isPolygon && last >= 3 && (slice[last] !== slice[0] || slice[last + 1] !== slice[1])) {\n addPoint(slice, slice[0], slice[1], slice[2]);\n }\n\n // add the final slice\n if (slice.length) {\n newGeom.push(slice);\n }\n}\n\nfunction newSlice(line: StartEndSizeArray): StartEndSizeArray {\n const slice: StartEndSizeArray = [];\n slice.size = line.size;\n slice.start = line.start;\n slice.end = line.end;\n return slice;\n}\n\nfunction clipLines(geom: StartEndSizeArray[], newGeom: StartEndSizeArray[], start: number, end: number, axis: AxisType, isPolygon: boolean) {\n for (const line of geom) {\n clipLine(line, newGeom, start, end, axis, isPolygon, false);\n }\n}\n\nfunction addPoint(out: number[], x: number, y: number, z: number) {\n out.push(x, y, z);\n}\n\nfunction intersectX(out: StartEndSizeArray, ax: number, ay: number, bx: number, by: number, x: number) {\n const t = (x - ax) / (bx - ax);\n addPoint(out, x, ay + (by - ay) * t, 1);\n return t;\n}\n\nfunction intersectY(out: StartEndSizeArray, ax: number, ay: number, bx: number, by: number, y: number) {\n const t = (y - ay) / (by - ay);\n addPoint(out, ax + (bx - ax) * t, y, 1);\n return t;\n}\n","\nimport {AxisType, clip} from './clip';\nimport type { GeoJSONVTInternalFeature, GeoJSONVTOptions, StartEndSizeArray } from './definitions';\nimport {createFeature} from './feature';\n\nexport function wrap(features: GeoJSONVTInternalFeature[], options: GeoJSONVTOptions): GeoJSONVTInternalFeature[] {\n const buffer = options.buffer / options.extent;\n let merged = features;\n\n const left = clip(features, 1, -1 - buffer, buffer, AxisType.X, -1, 2, options); // left world copy\n const right = clip(features, 1, 1 - buffer, 2 + buffer, AxisType.X, -1, 2, options); // right world copy\n\n if (!left && !right) return merged;\n\n merged = clip(features, 1, -buffer, 1 + buffer, AxisType.X, -1, 2, options) || []; // center world copy\n\n if (left) merged = shiftFeatureCoords(left, 1).concat(merged); // merge left into center\n if (right) merged = merged.concat(shiftFeatureCoords(right, -1)); // merge right into center\n\n return merged;\n}\n\nfunction shiftFeatureCoords(features: GeoJSONVTInternalFeature[], offset: number): GeoJSONVTInternalFeature[] {\n const newFeatures = [];\n\n for (const feature of features) {\n switch (feature.type) {\n case 'Point':\n case 'MultiPoint':\n case 'LineString': {\n const newGeometry = shiftCoords(feature.geometry, offset);\n\n newFeatures.push(createFeature(feature.id, feature.type, newGeometry, feature.tags));\n continue;\n }\n\n case 'MultiLineString':\n case 'Polygon': {\n const newGeometry = [];\n for (const line of feature.geometry) {\n newGeometry.push(shiftCoords(line, offset));\n }\n\n newFeatures.push(createFeature(feature.id, feature.type, newGeometry, feature.tags));\n continue;\n }\n\n case 'MultiPolygon': {\n const newGeometry = [];\n for (const polygon of feature.geometry) {\n const newPolygon = [];\n for (const line of polygon) {\n newPolygon.push(shiftCoords(line, offset));\n }\n newGeometry.push(newPolygon);\n }\n\n newFeatures.push(createFeature(feature.id, feature.type, newGeometry, feature.tags));\n continue;\n }\n }\n }\n\n return newFeatures;\n}\n\nfunction shiftCoords(points: StartEndSizeArray, offset: number): number[] | StartEndSizeArray {\n const newPoints: StartEndSizeArray = [];\n newPoints.size = points.size;\n\n if (points.start !== undefined) {\n newPoints.start = points.start;\n newPoints.end = points.end;\n }\n\n for (let i = 0; i < points.length; i += 3) {\n newPoints.push(points[i] + offset, points[i + 1], points[i + 2]);\n }\n\n return newPoints;\n}\n","import {convertToInternal} from './convert';\nimport {wrap} from './wrap';\nimport type { GeoJSONVTInternalFeature, GeoJSONVTOptions } from './definitions';\n\nexport type GeoJSONVTSourceDiff = {\n /**\n * If true, clear all existing features\n */\n removeAll?: boolean;\n /**\n * Array of feature IDs to remove\n */\n remove?: (string | number)[];\n /**\n * Array of GeoJSON features to add\n */\n add?: GeoJSON.Feature[];\n /**\n * Array of per-feature updates\n */\n update?: GeoJSONVTFeatureDiff[];\n};\n\nexport type GeoJSONVTFeatureDiff = {\n /**\n * ID of the feature being updated\n */\n id: string | number;\n /**\n * Optional new geometry\n */\n newGeometry?: GeoJSON.Geometry;\n /**\n * Remove all properties if true\n */\n removeAllProperties?: boolean;\n /**\n * Specific properties to delete\n */\n removeProperties?: string[];\n /**\n * Properties to add or update\n */\n addOrUpdateProperties?: {\n key: string;\n value: unknown;\n }[];\n};\n\nexport type ApplySourceDiffResult = {\n /**\n * The features affected by this update, which should be used to invalidate tiles\n */\n affected: GeoJSONVTInternalFeature[];\n /**\n * The updated source data, which should replace the existing source data in the index\n */\n source: GeoJSONVTInternalFeature[];\n};\n\ntype HashedGeoJSONVTSourceDiff = {\n removeAll?: boolean | undefined;\n remove: Set<string | number>;\n add: Map<string | number | undefined, GeoJSON.Feature>;\n update: Map<string | number, GeoJSONVTFeatureDiff>;\n};\n\n/**\n * Applies a GeoJSON Source Diff to an existing set of simplified features\n * @param source \n * @param dataDiff \n * @param options \n * @returns \n */\nexport function applySourceDiff(source: GeoJSONVTInternalFeature[], dataDiff: GeoJSONVTSourceDiff, options: GeoJSONVTOptions): ApplySourceDiffResult {\n // convert diff to sets/maps for o(1) lookups\n const diff = diffToHashed(dataDiff);\n\n // collection for features that will be affected by this update and used to invalidate tiles\n let affected: GeoJSONVTInternalFeature[] = [];\n\n if (diff.removeAll) {\n affected = source;\n source = [];\n }\n\n if (diff.remove.size || diff.add.size) {\n const removeFeatures = [];\n\n // Collect features to remove (explicit removals + replacements via add)\n for (const feature of source) {\n if (diff.remove.has(feature.id) || diff.add.has(feature.id)) {\n removeFeatures.push(feature);\n }\n }\n\n if (removeFeatures.length) {\n affected.push(...removeFeatures);\n const removeIds = new Set(removeFeatures.map(f => f.id));\n source = source.filter(f => !removeIds.has(f.id));\n }\n\n if (diff.add.size) {\n let addFeatures = convertToInternal({type: 'FeatureCollection', features: Array.from(diff.add.values())}, options);\n addFeatures = wrap(addFeatures, options);\n affected.push(...addFeatures);\n source.push(...addFeatures);\n }\n }\n\n if (diff.update.size) {\n // Features can be duplicated across the antimeridian (wrap) in a single tile, so must update all instances with the same id\n for (const [id, update] of diff.update) {\n const oldFeatures = [];\n const keepFeatures = [];\n\n for (const feature of source) {\n if (feature.id === id) {\n oldFeatures.push(feature);\n } else {\n keepFeatures.push(feature);\n }\n }\n if (!oldFeatures.length) continue;\n\n const updatedFeatures = getUpdatedFeatures(oldFeatures, update, options);\n if (!updatedFeatures.length) continue;\n\n affected.push(...oldFeatures, ...updatedFeatures);\n keepFeatures.push(...updatedFeatures);\n source = keepFeatures;\n }\n }\n\n return {affected, source};\n}\n\n/**\n * Gets updated simplified feature(s) based on a diff update object.\n * @param vtFeatures - the original features\n * @param update - the update object to apply\n * @param options - the options to use for the wrap method\n * @returns Updated features. If geometry is updated, returns new feature(s) converted from geojson and wrapped. If only properties are updated, returns feature(s) with tags updated.\n */\nfunction getUpdatedFeatures(vtFeatures: GeoJSONVTInternalFeature[], update: GeoJSONVTFeatureDiff, options: GeoJSONVTOptions): GeoJSONVTInternalFeature[] {\n const changeGeometry = !!update.newGeometry;\n const changeProps =\n update.removeAllProperties ||\n update.removeProperties?.length > 0 ||\n update.addOrUpdateProperties?.length > 0;\n\n // if geometry changed, need to create a new geojson feature and convert to internal format\n if (changeGeometry) {\n const vtFeature = vtFeatures[0];\n const geojsonFeature = {\n type: 'Feature' as const,\n id: vtFeature.id,\n geometry: update.newGeometry,\n properties: changeProps ? applyPropertyUpdates(vtFeature.tags, update) : vtFeature.tags\n };\n\n let features = convertToInternal({type: 'FeatureCollection', features: [geojsonFeature]}, options);\n features = wrap(features, options);\n return features;\n }\n\n if (changeProps) {\n const updated = [];\n for (const vtFeature of vtFeatures) {\n const feature = {...vtFeature};\n feature.tags = applyPropertyUpdates(feature.tags, update);\n updated.push(feature);\n }\n return updated;\n }\n\n return [];\n}\n\n/**\n * helper to apply property updates from a diff update object to a properties object\n */\nfunction applyPropertyUpdates(tags: GeoJSON.GeoJsonProperties, update: GeoJSONVTFeatureDiff): GeoJSON.GeoJsonProperties {\n if (update.removeAllProperties) {\n return {};\n }\n\n const properties = {...tags || {}};\n\n if (update.removeProperties) {\n for (const key of update.removeProperties) {\n delete properties[key];\n }\n }\n\n if (update.addOrUpdateProperties) {\n for (const {key, value} of update.addOrUpdateProperties) {\n properties[key] = value;\n }\n }\n\n return properties;\n}\n\n/**\n * Convert a GeoJSON Source Diff to an idempotent hashed representation using Sets and Maps\n */\nexport function diffToHashed(diff: GeoJSONVTSourceDiff): HashedGeoJSONVTSourceDiff {\n if (!diff) return {\n remove: new Set(),\n add: new Map(),\n update: new Map()\n };\n\n const hashed: HashedGeoJSONVTSourceDiff = {\n removeAll: diff.removeAll,\n remove: new Set(diff.remove || []),\n add: new Map(diff.add?.map(feature => [feature.id, feature])),\n update: new Map(diff.update?.map(update => [update.id, update]))\n };\n\n return hashed;\n}\n","import KDBush from 'kdbush';\nimport {projectX, projectY} from './convert';\nimport {unprojectX, unprojectY, featureToGeoJSON} from './deconvert';\nimport type {ClusterFeature, ClusterOrPointFeature, ClusterProperties, GeoJSONVTTileIndex, GeoJSONVTFeature, GeoJSONVTInternalFeature, GeoJSONVTInternalPointFeature, GeoJSONVTOptions, GeoJSONVTTile, SuperclusterOptions} from './definitions';\n\ntype ClusterFeatureInternal = GeoJSONVTInternalPointFeature & {\n tags: ClusterProperties;\n};\n\ntype ClusterOrPointFeatureInternal = ClusterFeatureInternal | GeoJSONVTInternalPointFeature;\n\n/** @internal */\nexport type KDBushWithData = KDBush & {\n flatData: number[];\n};\n\nexport const defaultClusterOptions: Required<SuperclusterOptions> = {\n minZoom: 0,\n maxZoom: 16,\n minPoints: 2,\n radius: 40,\n extent: 512,\n nodeSize: 64,\n log: false,\n generateId: false,\n reduce: null,\n map: (props) => props as Record<string, unknown>\n};\n\nconst OFFSET_ZOOM = 2;\nconst OFFSET_ID = 3;\nconst OFFSET_PARENT = 4;\nconst OFFSET_NUM = 5;\nconst OFFSET_PROP = 6;\n\n/**\n * This class allow clustering of geojson points.\n */\nexport class ClusterTileIndex implements GeoJSONVTTileIndex {\n options: Required<SuperclusterOptions>;\n trees: KDBushWithData[];\n stride: number;\n clusterProps: Record<string, unknown>[];\n points: GeoJSONVTInternalPointFeature[];\n\n constructor(options?: SuperclusterOptions) {\n this.options = Object.assign(Object.create(defaultClusterOptions), options) as Required<SuperclusterOptions>;\n this.trees = new Array(this.options.maxZoom + 1);\n this.stride = this.options.reduce ? 7 : 6;\n this.clusterProps = [];\n this.points = [];\n }\n\n /**\n * Loads GeoJSON point features and builds the internal clustering index.\n * @param points - GeoJSON point features to cluster.\n */\n load(points: GeoJSON.Feature<GeoJSON.Point>[]): void {\n const features: GeoJSONVTInternalPointFeature[] = [];\n \n // Convert GeoJSON point features to GeoJSONVT internal point features\n for (const point of points) {\n if (!point.geometry) {\n continue;\n }\n\n const [lng, lat] = point.geometry.coordinates;\n const [x, y] = [projectX(lng), projectY(lat)];\n \n const feature: GeoJSONVTInternalPointFeature = {\n id: point.id,\n type: 'Point',\n geometry: [x, y],\n tags: point.properties\n };\n \n features.push(feature);\n }\n \n this.createIndex(features);\n }\n\n /**\n * @internal\n * Loads internal GeoJSONVT point features from a data source and builds the clustering index.\n * @param features - {@link GeoJSONVTInternalFeature} data source features to filter and cluster.\n */\n initialize(features: GeoJSONVTInternalFeature[]): void {\n const points: GeoJSONVTInternalPointFeature[] = [];\n\n for (const feature of features) {\n if (feature.type !== 'Point') continue;\n points.push(feature);\n }\n\n this.createIndex(points);\n }\n\n /**\n * @internal\n * Updates the cluster data by rebuilding.\n * @param features \n */\n updateIndex(features: GeoJSONVTInternalFeature[], _affected: GeoJSONVTInternalFeature[], options: GeoJSONVTOptions) {\n this.options = Object.assign(Object.create(defaultClusterOptions), options.clusterOptions) as Required<SuperclusterOptions>;\n this.initialize(features);\n }\n\n private createIndex(points: GeoJSONVTInternalPointFeature[]): void {\n const {log, minZoom, maxZoom} = this.options;\n\n if (log) console.time('total time');\n\n const timerId = `prepare ${points.length} points`;\n if (log) console.time(timerId);\n\n this.points = points;\n\n // generate a cluster object for each point and index input points into a KD-tree\n const data: number[] = [];\n\n for (let i = 0; i < points.length; i++) {\n const p = points[i];\n if (!p?.geometry) continue;\n\n let [x, y] = p.geometry;\n x = Math.fround(x);\n y = Math.fround(y);\n\n // store internal point/cluster data in flat numeric arrays for performance\n data.push(\n x, y, // projected point coordinates\n Infinity, // the last zoom the point was processed at\n i, // index of the source feature in the original input array\n -1, // parent cluster id\n 1 // number of points in a cluster\n );\n if (this.options.reduce) data.push(0); // noop\n }\n let tree = this.trees[maxZoom + 1] = this.createTree(data);\n\n if (log) console.timeEnd(timerId);\n\n // cluster points on max zoom, then cluster the results on previous zoom, etc.;\n // results in a cluster hierarchy across zoom levels\n for (let z = maxZoom; z >= minZoom; z--) {\n const now = Date.now();\n\n // create a new set of clusters for the zoom and index them with a KD-tree\n tree = this.trees[z] = this.createTree(this.cluster(tree, z));\n\n if (log) console.log('z%d: %d clusters in %dms', z, tree.numItems, Date.now() - now);\n }\n\n if (log) console.timeEnd('total time');\n }\n\n /**\n * Returns clusters and/or points within a bounding box at a given zoom level.\n * @param bbox - Bounding box in `[westLng, southLat, eastLng, northLat]` order.\n * @param zoom - Zoom level to query.\n */\n public getClusters(bbox: [number, number, number, number], zoom: number): ClusterOrPointFeature[] {\n const clusterInternal = this.getClustersInternal(bbox, zoom);\n return clusterInternal.map((f) => featureToGeoJSON(f) as ClusterOrPointFeature);\n }\n\n private getClustersInternal(bbox: [number, number, number, number], zoom: number): ClusterOrPointFeatureInternal[] {\n let minLng = ((bbox[0] + 180) % 360 + 360) % 360 - 180;\n const minLat = Math.max(-90, Math.min(90, bbox[1]));\n let maxLng = bbox[2] === 180 ? 180 : ((bbox[2] + 180) % 360 + 360) % 360 - 180;\n const maxLat = Math.max(-90, Math.min(90, bbox[3]));\n\n if (bbox[2] - bbox[0] >= 360) {\n minLng = -180;\n maxLng = 180;\n } else if (minLng > maxLng) {\n const easternHem = this.getClustersInternal([minLng, minLat, 180, maxLat], zoom);\n const westernHem = this.getClustersInternal([-180, minLat, maxLng, maxLat], zoom);\n return easternHem.concat(westernHem);\n }\n\n const tree = this.trees[this.limitZoom(zoom)];\n const ids = tree.range(projectX(minLng), projectY(maxLat), projectX(maxLng), projectY(minLat));\n const data = tree.flatData;\n const clusters: ClusterOrPointFeatureInternal[] = [];\n for (const id of ids) {\n const k = this.stride * id;\n clusters.push(data[k + OFFSET_NUM] > 1 ? getClusterFeature(data, k, this.clusterProps) : this.points[data[k + OFFSET_ID]]);\n }\n return clusters;\n }\n\n /**\n * Returns the immediate children (clusters or points) of a cluster as GeoJSON.\n * @param clusterId - The target cluster id.\n */\n getChildren(clusterId: number): ClusterOrPointFeature[] {\n const originId = this.getOriginId(clusterId);\n const originZoom = this.getOriginZoom(clusterId);\n const clusterError = new Error('No cluster with the specified id: ' + clusterId);\n\n const tree = this.trees[originZoom];\n if (!tree) throw clusterError;\n\n const data = tree.flatData;\n if (originId * this.stride >= data.length) throw clusterError;\n\n const r = this.options.radius / (this.options.extent * Math.pow(2, originZoom - 1));\n const x = data[originId * this.stride];\n const y = data[originId * this.stride + 1];\n const ids = tree.within(x, y, r);\n const children: ClusterOrPointFeature[] = [];\n for (const id of ids) {\n const k = id * this.stride;\n if (data[k + OFFSET_PARENT] === clusterId) {\n children.push(data[k + OFFSET_NUM] > 1 ? getClusterGeoJSON(data, k, this.clusterProps) : featureToGeoJSON(this.points[data[k + OFFSET_ID]]) as GeoJSON.Feature<GeoJSON.Point>);\n }\n }\n\n if (children.length === 0) throw clusterError;\n\n return children;\n }\n\n /**\n * Returns leaf point features under a cluster, paginated by `limit` and `offset`.\n * @param clusterId - The target cluster id.\n * @param limit - Maximum number of points to return (defaults to `10`).\n * @param offset - Number of points to skip before collecting results (defaults to `0`).\n */\n getLeaves(clusterId: number, limit?: number, offset?: number): GeoJSON.Feature<GeoJSON.Point>[] {\n limit = limit || 10;\n offset = offset || 0;\n\n const leaves: GeoJSON.Feature<GeoJSON.Point>[] = [];\n this.appendLeaves(leaves, clusterId, limit, offset, 0);\n\n return leaves;\n }\n\n /**\n * Generates a vector-tile-like representation of a single tile.\n * @param z - Tile zoom.\n * @param x - Tile x coordinate.\n * @param y - Tile y coordinate.\n */\n getTile(z: number, x: number, y: number): GeoJSONVTTile | null {\n const tree = this.trees[this.limitZoom(z)];\n if (!tree) {\n return null;\n }\n const z2 = Math.pow(2, z);\n const {extent, radius} = this.options;\n const p = radius / extent;\n const top = (y - p) / z2;\n const bottom = (y + 1 + p) / z2;\n\n const tile: GeoJSONVTTile = {\n transformed: true,\n features: [],\n source: null,\n x: x,\n y: y,\n z: z\n };\n\n this.addTileFeatures(\n tree.range((x - p) / z2, top, (x + 1 + p) / z2, bottom),\n tree.flatData, x, y, z2, tile);\n\n if (x === 0) {\n this.addTileFeatures(\n tree.range(1 - p / z2, top, 1, bottom),\n tree.flatData, z2, y, z2, tile);\n }\n if (x === z2 - 1) {\n this.addTileFeatures(\n tree.range(0, top, p / z2, bottom),\n tree.flatData, -1, y, z2, tile);\n }\n\n return tile;\n }\n\n /**\n * Returns the zoom level at which a cluster expands into multiple children.\n * @param clusterId - The target cluster id.\n */\n getClusterExpansionZoom(clusterId: number): number {\n return this.getOriginZoom(clusterId);\n }\n\n private appendLeaves(result: GeoJSON.Feature<GeoJSON.Point>[], clusterId: number, limit: number, offset: number, skipped: number): number {\n const children = this.getChildren(clusterId);\n\n for (const child of children) {\n const props = child.properties as ClusterProperties | null;\n\n if (props?.cluster) {\n if (skipped + props.point_count <= offset) {\n // skip the whole cluster\n skipped += props.point_count;\n } else {\n // enter the cluster\n skipped = this.appendLeaves(result, props.cluster_id, limit, offset, skipped);\n // exit the cluster\n }\n } else if (skipped < offset) {\n // skip a single point\n skipped++;\n } else {\n // add a single point\n result.push(child as GeoJSON.Feature<GeoJSON.Point>);\n }\n if (result.length === limit) break;\n }\n\n return skipped;\n }\n\n private createTree(data: number[]): KDBushWithData {\n const tree = new KDBush(data.length / this.stride | 0, this.options.nodeSize, Float32Array) as unknown as KDBushWithData;\n for (let i = 0; i < data.length; i += this.stride) tree.add(data[i], data[i + 1]);\n tree.finish();\n tree.flatData = data;\n tree.data = null; // clear original data to free memory as it isn't used later on.\n return tree;\n }\n\n private addTileFeatures(ids: number[], data: number[], x: number, y: number, z2: number, tile: GeoJSONVTTile): void {\n for (const i of ids) {\n const k = i * this.stride;\n const isCluster = data[k + OFFSET_NUM] > 1;\n\n let tags: GeoJSON.GeoJsonProperties | ClusterProperties;\n let px: number;\n let py: number;\n if (isCluster) {\n tags = getClusterProperties(data, k, this.clusterProps);\n px = data[k];\n py = data[k + 1];\n } else {\n const p = this.points[data[k + OFFSET_ID]];\n tags = p.tags;\n [px, py] = p.geometry;\n }\n\n const f: GeoJSONVTFeature = {\n type: 1,\n geometry: [[\n Math.round(this.options.extent * (px * z2 - x)),\n Math.round(this.options.extent * (py * z2 - y))\n ]],\n tags\n };\n\n // assign id\n let id: number | string | undefined;\n if (isCluster || this.options.generateId) {\n // optionally generate id for points\n id = data[k + OFFSET_ID];\n } else {\n // keep id if already assigned\n id = this.points[data[k + OFFSET_ID]].id as number | string | undefined;\n }\n\n if (id !== undefined) f.id = id;\n\n tile.features.push(f);\n }\n }\n\n private limitZoom(z: number): number {\n return Math.max(this.options.minZoom, Math.min(Math.floor(+z), this.options.maxZoom + 1));\n }\n\n private cluster(tree: KDBushWithData, zoom: number): number[] {\n const {radius, extent, reduce, minPoints} = this.options;\n const r = radius / (extent * Math.pow(2, zoom));\n const data = tree.flatData;\n const nextData: number[] = [];\n const stride = this.stride;\n\n // loop through each point\n for (let i = 0; i < data.length; i += stride) {\n // if we've already visited the point at this zoom level, skip it\n if (data[i + OFFSET_ZOOM] <= zoom) continue;\n data[i + OFFSET_ZOOM] = zoom;\n\n // find all nearby points\n const x = data[i];\n const y = data[i + 1];\n const neighborIds = tree.within(data[i], data[i + 1], r);\n\n const numPointsOrigin = data[i + OFFSET_NUM];\n let numPoints = numPointsOrigin;\n\n // count the number of points in a potential cluster\n for (const neighborId of neighborIds) {\n const k = neighborId * stride;\n // filter out neighbors that are already processed\n if (data[k + OFFSET_ZOOM] > zoom) numPoints += data[k + OFFSET_NUM];\n }\n\n // if there were neighbors to merge, and there are enough points to form a cluster\n if (numPoints > numPointsOrigin && numPoints >= minPoints) {\n let wx = x * numPointsOrigin;\n let wy = y * numPointsOrigin;\n\n let clusterProperties: Record<string, unknown> | undefined;\n let clusterPropIndex = -1;\n\n // encode both zoom and point index on which the cluster originated -- offset by total length of features\n const id = ((i / stride | 0) << 5) + (zoom + 1) + this.points.length;\n\n for (const neighborId of neighborIds) {\n const k = neighborId * stride;\n\n if (data[k + OFFSET_ZOOM] <= zoom) continue;\n data[k + OFFSET_ZOOM] = zoom; // save the zoom (so it doesn't get processed twice)\n\n const numPoints2 = data[k + OFFSET_NUM];\n wx += data[k] * numPoints2; // accumulate coordinates for calculating weighted center\n wy += data[k + 1] * numPoints2;\n\n data[k + OFFSET_PARENT] = id;\n\n if (reduce) {\n if (!clusterProperties) {\n clusterProperties = this.map(data, i, true);\n clusterPropIndex = this.clusterProps.length;\n this.clusterProps.push(clusterProperties);\n }\n reduce(clusterProperties, this.map(data, k));\n }\n }\n\n data[i + OFFSET_PARENT] = id;\n nextData.push(wx / numPoints, wy / numPoints, Infinity, id, -1, numPoints);\n if (reduce) nextData.push(clusterPropIndex);\n\n } else { // left points as unclustered\n for (let j = 0; j < stride; j++) nextData.push(data[i + j]);\n\n if (numPoints > 1) {\n for (const neighborId of neighborIds) {\n const k = neighborId * stride;\n if (data[k + OFFSET_ZOOM] <= zoom) continue;\n data[k + OFFSET_ZOOM] = zoom;\n for (let j = 0; j < stride; j++) nextData.push(data[k + j]);\n }\n }\n }\n }\n\n return nextData;\n }\n\n // get index of the point from which the cluster originated\n private getOriginId(clusterId: number): number {\n return (clusterId - this.points.length) >> 5;\n }\n\n // get zoom of the point from which the cluster originated\n private getOriginZoom(clusterId: number): number {\n return (clusterId - this.points.length) % 32;\n }\n\n private map(data: number[], i: number, clone?: boolean): Record<string, unknown> {\n if (data[i + OFFSET_NUM] > 1) {\n const props = this.clusterProps[data[i + OFFSET_PROP]];\n return clone ? Object.assign({}, props) : props;\n }\n const original = this.points[data[i + OFFSET_ID]].tags;\n const result = this.options.map(original);\n return clone && result === original ? Object.assign({}, result) : result;\n }\n}\n\nfunction getClusterFeature(data: number[], i: number, clusterProps: Record<string, unknown>[]): ClusterFeatureInternal {\n return {\n id: data[i + OFFSET_ID],\n type: 'Point',\n tags: getClusterProperties(data, i, clusterProps),\n geometry: [data[i], data[i + 1]]\n };\n}\n\nfunction getClusterGeoJSON(data: number[], i: number, clusterProps: Record<string, unknown>[]): ClusterFeature {\n return {\n type: 'Feature',\n id: data[i + OFFSET_ID],\n properties: getClusterProperties(data, i, clusterProps),\n geometry: {\n type: 'Point',\n coordinates: [unprojectX(data[i]), unprojectY(data[i + 1])]\n }\n };\n}\n\nfunction getClusterProperties(data: number[], i: number, clusterProps: Record<string, unknown>[]): ClusterProperties {\n const count = data[i + OFFSET_NUM];\n const abbrev =\n count >= 10000 ? `${Math.round(count / 1000) }k` :\n count >= 1000 ? `${Math.round(count / 100) / 10 }k` : count;\n const propIndex = data[i + OFFSET_PROP];\n const properties = propIndex === -1 ? {} : Object.assign({}, clusterProps[propIndex]);\n\n return Object.assign(properties, {\n cluster: true as const,\n cluster_id: data[i + OFFSET_ID],\n point_count: count,\n point_count_abbreviated: abbrev\n });\n}\n","import type { GeoJSONVTInternalFeature, GeoJSONVTInternalLineStringFeature, GeoJSONVTInternalMultiLineStringFeature, GeoJSONVTInternalMultiPointFeature, GeoJSONVTInternalMultiPolygonFeature, GeoJSONVTInternalPointFeature, GeoJSONVTInternalPolygonFeature, GeoJSONVTInternalTile, GeoJSONVTInternalTileFeature, GeoJSONVTOptions, StartEndSizeArray } from \"./definitions\";\n\nexport const GEOJSONVT_CLIP_START = 'geojsonvt_clip_start';\nexport const GEOJSONVT_CLIP_END = 'geojsonvt_clip_end';\n\n/**\n * Creates a tile object from the given features\n * @param features - the features to include in the tile\n * @param z\n * @param tx\n * @param ty\n * @param options - the options object\n * @returns the created tile\n */\nexport function createTile(features: GeoJSONVTInternalFeature[], z: number, tx: number, ty: number, options: GeoJSONVTOptions): GeoJSONVTInternalTile {\n const tolerance = z === options.maxZoom ? 0 : options.tolerance / ((1 << z) * options.extent);\n\n const tile = {\n transformed: false,\n features: [] as GeoJSONVTInternalTileFeature[],\n source: null as GeoJSONVTInternalFeature[],\n x: tx,\n y: ty,\n z: z,\n minX: 2,\n minY: 1,\n maxX: -1,\n maxY: 0,\n numPoints: 0,\n numSimplified: 0,\n numFeatures: features.length\n };\n\n for (const feature of features) {\n addFeature(tile, feature, tolerance, options);\n }\n\n return tile;\n}\n\nfunction addFeature(tile: GeoJSONVTInternalTile, feature: GeoJSONVTInternalFeature, tolerance: number, options: GeoJSONVTOptions) {\n tile.minX = Math.min(tile.minX, feature.minX);\n tile.minY = Math.min(tile.minY, feature.minY);\n tile.maxX = Math.max(tile.maxX, feature.maxX);\n tile.maxY = Math.max(tile.maxY, feature.maxY);\n\n switch (feature.type) {\n case 'Point':\n case 'MultiPoint': \n addPointsTileFeature(tile, feature);\n return;\n case 'LineString':\n addLineTileFeautre(tile, feature, tolerance, options);\n return;\n case 'MultiLineString':\n case 'Polygon':\n addLinesTileFeature(tile, feature, tolerance);\n return;\n case 'MultiPolygon': \n addMultiPolygonTileFeature(tile, feature, tolerance);\n return;\n }\n}\n\nfunction addPointsTileFeature(tile: GeoJSONVTInternalTile, feature: GeoJSONVTInternalPointFeature | GeoJSONVTInternalMultiPointFeature) {\n const geometry: number[] = [];\n for (let i = 0; i < feature.geometry.length; i += 3) {\n geometry.push(feature.geometry[i] , feature.geometry[i + 1]);\n tile.numPoints++;\n tile.numSimplified++;\n }\n if (!geometry.length) return;\n const tileFeature: GeoJSONVTInternalTileFeature = {\n type: 1,\n tags: feature.tags || null,\n geometry: geometry\n };\n if (feature.id !== null) {\n tileFeature.id = feature.id;\n }\n tile.features.push(tileFeature);\n}\n\nfunction addLineTileFeautre(tile: GeoJSONVTInternalTile, feature: GeoJSONVTInternalLineStringFeature, tolerance: number, options: GeoJSONVTOptions) {\n const geometry: number[][] = [];\n addLine(geometry, feature.geometry, tile, tolerance, false, false);\n if (!geometry.length) return;\n let tags = feature.tags || null;\n if (options.lineMetrics) {\n tags = {};\n for (const key in feature.tags) tags[key] = feature.tags[key];\n tags[GEOJSONVT_CLIP_START] = feature.geometry.start / feature.geometry.size;\n tags[GEOJSONVT_CLIP_END] = feature.geometry.end / feature.geometry.size;\n }\n const tileFeature: GeoJSONVTInternalTileFeature = {\n type: 2,\n tags: tags,\n geometry: geometry\n }\n if (feature.id !== null) {\n tileFeature.id = feature.id;\n }\n tile.features.push(tileFeature);\n}\n\nfunction addLinesTileFeature(tile: GeoJSONVTInternalTile, feature: GeoJSONVTInternalPolygonFeature | GeoJSONVTInternalMultiLineStringFeature, tolerance: number) {\n const geometry: number[][] = [];\n for (let i = 0; i < feature.geometry.length; i++) {\n addLine(geometry, feature.geometry[i], tile, tolerance, feature.type === 'Polygon', i === 0);\n }\n if (!geometry.length) return;\n const tileFeature: GeoJSONVTInternalTileFeature = {\n type: feature.type === 'Polygon' ? 3 : 2,\n tags: feature.tags || null,\n geometry: geometry\n }\n if (feature.id !== null) {\n tileFeature.id = feature.id;\n }\n tile.features.push(tileFeature);\n}\n\nfunction addMultiPolygonTileFeature(tile: GeoJSONVTInternalTile, feature: GeoJSONVTInternalMultiPolygonFeature, tolerance: number) {\n const geometry: number[][] = [];\n for (let k = 0; k < feature.geometry.length; k++) {\n const polygon = feature.geometry[k];\n for (let i = 0; i < polygon.length; i++) {\n addLine(geometry, polygon[i], tile, tolerance, true, i === 0);\n }\n }\n if (!geometry.length) return;\n const tileFeature: GeoJSONVTInternalTileFeature = {\n type: 3,\n tags: feature.tags || null,\n geometry: geometry\n }\n if (feature.id !== null) {\n tileFeature.id = feature.id;\n }\n tile.features.push(tileFeature);\n}\n\nfunction addLine(result: number[][], geom: StartEndSizeArray, tile: GeoJSONVTInternalTile, tolerance: number, isPolygon: boolean, isOuter: boolean) {\n const sqTolerance = tolerance * tolerance;\n\n if (tolerance > 0 && (geom.size < (isPolygon ? sqTolerance : tolerance))) {\n tile.numPoints += geom.length / 3;\n return;\n }\n\n const ring = [];\n\n for (let i = 0; i < geom.length; i += 3) {\n if (tolerance === 0 || geom[i + 2] > sqTolerance) {\n tile.numSimplified++;\n ring.push(geom[i], geom[i + 1]);\n }\n tile.numPoints++;\n }\n\n if (isPolygon) rewind(ring, isOuter);\n\n result.push(ring);\n}\n\nfunction rewind(ring: number[], clockwise: boolean) {\n let area = 0;\n\n for (let i = 0, len = ring.length, j = len - 2; i < len; j = i, i += 2) {\n area += (ring[i] - ring[j]) * (ring[i + 1] + ring[j + 1]);\n }\n\n if (area > 0 !== clockwise) return;\n\n for (let i = 0, len = ring.length; i < len / 2; i += 2) {\n const x = ring[i];\n const y = ring[i + 1];\n\n ring[i] = ring[len - 2 - i];\n ring[i + 1] = ring[len - 1 - i];\n ring[len - 2 - i] = x;\n ring[len - 1 - i] = y;\n }\n}\n","import type { GeoJSONVTFeatureNonPoint, GeoJSONVTFeaturePoint, GeoJSONVTInternalTile, GeoJSONVTInternalTileFeatureNonPoint, GeoJSONVTInternalTileFeaturePoint, GeoJSONVTTile } from \"./definitions\";\n\n/**\n * Transforms the coordinates of each feature in the given tile from\n * mercator-projected space into (extent x extent) tile space.\n * @param tile - the tile to transform, this gets modified in place\n * @param extent - the tile extent (usually 4096)\n * @returns the transformed tile\n */\nexport function transformTile(tile: GeoJSONVTInternalTile, extent: number): GeoJSONVTTile {\n if (tile.transformed) {\n return tile as GeoJSONVTTile;\n }\n\n const z2 = 1 << tile.z;\n const tx = tile.x;\n const ty = tile.y;\n\n for (const feature of tile.features) {\n if (feature.type === 1) {\n transformPointFeature(feature, extent, z2, tx, ty);\n } else {\n transformNonPointFeature(feature, extent, z2, tx, ty);\n } \n }\n tile.transformed = true;\n\n return tile as GeoJSONVTTile;\n}\n\n/**\n * Transforms a single point feature from mercator-projected space into (extent x extent) tile space.\n */\nfunction transformPointFeature(feature: GeoJSONVTInternalTileFeaturePoint, extent: number, z2: number, tx: number, ty: number): GeoJSONVTFeaturePoint {\n const transformed = feature as unknown as GeoJSONVTFeaturePoint;\n\n const geometry = feature.geometry;\n const point: GeoJSONVTFeaturePoint[\"geometry\"] = [];\n for (let i = 0; i < geometry.length; i += 2) {\n point.push(transformPoint(geometry[i], geometry[i + 1], extent, z2, tx, ty));\n }\n transformed.geometry = point;\n\n return transformed;\n}\n\n/**\n * Transforms a single non-point feature from mercator-projected space into (extent x extent) tile space.\n */\nfunction transformNonPointFeature(feature: GeoJSONVTInternalTileFeatureNonPoint, extent: number, z2: number, tx: number, ty: number): GeoJSONVTFeatureNonPoint {\n const transformed = feature as unknown as GeoJSONVTFeatureNonPoint;\n\n const geometry = feature.geometry;\n const nonPoint: GeoJSONVTFeatureNonPoint[\"geometry\"] = [];\n for (const geom of geometry) {\n const ring: GeoJSONVTFeaturePoint[\"geometry\"] = [];\n for (let i = 0; i < geom.length; i += 2) {\n ring.push(transformPoint(geom[i], geom[i + 1], extent, z2, tx, ty));\n }\n nonPoint.push(ring);\n }\n transformed.geometry = nonPoint;\n\n return transformed;\n}\n\nfunction transformPoint(x: number, y: number, extent: number, z2: number, tx: number, ty: number): [number, number] {\n return [\n Math.round(extent * (x * z2 - tx)),\n Math.round(extent * (y * z2 - ty))\n ];\n}\n","import { AxisType, clip } from \"./clip\";\nimport { createTile } from \"./tile\";\nimport { transformTile } from \"./transform\";\nimport type { GeoJSONVTInternalFeature, GeoJSONVTOptions, ClusterOrPointFeature, GeoJSONVTTileIndex, GeoJSONVTInternalTile, GeoJSONVTTile } from \"./definitions\";\n\nexport class TileIndex implements GeoJSONVTTileIndex {\n\n private tileCoords: {z: number, x: number, y: number, id: number}[];\n\n /** @internal */\n public tiles: {[key: string]: GeoJSONVTInternalTile};\n /** @internal */\n public stats: {[key: string]: number} = {};\n /** @internal */\n public total: number = 0;\n\n constructor(private options: GeoJSONVTOptions) {\n this.tiles = {};\n this.tileCoords = [];\n this.stats = {};\n this.total = 0;\n }\n\n initialize(features: GeoJSONVTInternalFeature[]): void {\n // start slicing from the top tile down\n this.splitTile(features, 0, 0, 0);\n\n if (this.options.debug) {\n if (features.length) console.log('features: %d, points: %d', this.tiles[0].numFeatures, this.tiles[0].numPoints);\n console.timeEnd('generate tiles');\n console.log('tiles generated:', this.total, JSON.stringify(this.stats));\n }\n }\n\n /** {@inheritdoc} */\n updateIndex(source: GeoJSONVTInternalFeature[], affected: GeoJSONVTInternalFeature[], options: GeoJSONVTOptions): void {\n if (options.debug > 1) {\n console.log('invalidating tiles');\n console.time('invalidating');\n }\n\n this.invalidateTiles(affected);\n\n if (options.debug > 1) console.timeEnd('invalidating');\n\n // re-generate root tile with updated feature set\n const [z, x, y] = [0, 0, 0];\n const rootTile = createTile(source, z, x, y, options);\n rootTile.source = source;\n\n // update tile index with new root tile - ready for getTile calls\n const id = toID(z, x, y);\n this.tiles[id] = rootTile;\n this.tileCoords.push({z, x, y, id});\n\n if (options.debug) {\n const key = `z${ z}`;\n this.stats[key] = (this.stats[key] || 0) + 1;\n this.total++;\n }\n }\n\n /** {@inheritdoc} */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n getClusterExpansionZoom(_clusterId: number): number | null {\n return null;\n }\n\n /** {@inheritdoc} */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n getChildren(_clusterId: number): ClusterOrPointFeature[] | null {\n return null;\n }\n\n /** {@inheritdoc} */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n getLeaves(_clusterId: number, _limit?: number, _offset?: number): GeoJSON.Feature<GeoJSON.Point>[] | null {\n return null;\n }\n\n /** {@inheritdoc} */\n getTile(z: number, x: number, y: number): GeoJSONVTTile | null {\n const {extent, debug} = this.options;\n \n const z2 = 1 << z;\n x = (x + z2) & (z2 - 1); // wrap tile x coordinate\n\n const id = toID(z, x, y);\n if (this.tiles[id]) {\n return transformTile(this.tiles[id], extent);\n }\n\n if (debug > 1) console.log('drilling down to z%d-%d-%d', z, x, y);\n\n let z0 = z;\n let x0 = x;\n let y0 = y;\n let parent;\n\n while (!parent && z0 > 0) {\n z0--;\n x0 = x0 >> 1;\n y0 = y0 >> 1;\n parent = this.tiles[toID(z0, x0, y0)];\n }\n\n if (!parent?.source) return null;\n\n // if we found a parent tile containing the original geometry, we can drill down from it\n if (debug > 1) {\n console.log('found parent tile z%d-%d-%d', z0, x0, y0);\n console.time('drilling down');\n }\n this.splitTile(parent.source, z0, x0, y0, z, x, y);\n if (debug > 1) console.timeEnd('drilling down');\n\n if (!this.tiles[id]) return null;\n\n return transformTile(this.tiles[id], extent);\n }\n\n /**\n * splits features from a parent tile to sub-tiles.\n * z, x, and y are the coordinates of the parent tile\n * cz, cx, and cy are the coordinates of the target tile\n * \n * If no target tile is specified, splitting stops when we reach the maximum\n * zoom or the number of points is low as specified in the options.\n * @internal\n * @param features - features to split\n * @param z - tile zoom level\n * @param x - tile x coordinate\n * @param y - tile y coordinate\n * @param cz - target tile zoom level\n * @param cx - target tile x coordinate\n * @param cy - target tile y coordinate\n */\n private splitTile(features: GeoJSONVTInternalFeature[], z: number, x: number, y: number, cz?: number, cx?: number, cy?: number) {\n\n const stack = [features, z, x, y];\n const options = this.options;\n const debug = options.debug;\n\n // avoid recursion by using a processing queue\n while (stack.length) {\n y = stack.pop() as number;\n x = stack.pop() as number;\n z = stack.pop() as number;\n features = stack.pop() as GeoJSONVTInternalFeature[];\n\n const z2 = 1 << z;\n const id = toID(z, x, y);\n let tile = this.tiles[id];\n\n if (!tile) {\n if (debug > 1) console.time('creation');\n\n tile = this.tiles[id] = createTile(features, z, x, y, options);\n this.tileCoords.push({z, x, y, id});\n\n if (debug) {\n if (debug > 1) {\n console.log('tile z%d-%d-%d (features: %d, points: %d, simplified: %d)',\n z, x, y, tile.numFeatures, tile.numPoints, tile.numSimplified);\n console.timeEnd('creation');\n }\n const key = `z${ z}`;\n this.stats[key] = (this.stats[key] || 0) + 1;\n this.total++;\n }\n }\n\n // save reference to original geometry in tile so that we can drill down later if we stop now\n tile.source = features;\n\n // if it's the first-pass tiling\n if (cz == null) {\n // stop tiling if we reached max zoom, or if the tile is too simple\n if (z === options.indexMaxZoom || tile.numPoints <= options.indexMaxPoints) continue;\n // if a drilldown to a specific tile\n } else if (z === options.maxZoom || z === cz) {\n // stop tiling if we reached base zoom or our target tile zoom\n continue;\n } else if (cz != null) {\n // stop tiling if it's not an ancestor of the target tile\n const zoomSteps = cz - z;\n if (x !== cx >> zoomSteps || y !== cy >> zoomSteps) continue;\n }\n\n // if we slice further down, no need to keep source geometry\n tile.source = null;\n\n if (!features.length) continue;\n\n if (debug > 1) console.time('clipping');\n\n // values we'll use for clipping\n const k1 = 0.5 * options.buffer / options.extent;\n const k2 = 0.5 - k1;\n const k3 = 0.5 + k1;\n const k4 = 1 + k1;\n\n let tl = null;\n let bl = null;\n let tr = null;\n let br = null;\n\n const left = clip(features, z2, x - k1, x + k3, AxisType.X, tile.minX, tile.maxX, options);\n const right = clip(features, z2, x + k2, x + k4, AxisType.X, tile.minX, tile.maxX, options);\n\n if (left) {\n tl = clip(left, z2, y - k1, y + k3, AxisType.Y, tile.minY, tile.maxY, options);\n bl = clip(left, z2, y + k2, y + k4, AxisType.Y, tile.minY, tile.maxY, options);\n }\n\n if (right) {\n tr = clip(right, z2, y - k1, y + k3, AxisType.Y, tile.minY, tile.maxY, options);\n br = clip(right, z2, y + k2, y + k4, AxisType.Y, tile.minY, tile.maxY, options);\n }\n\n if (debug > 1) console.timeEnd('clipping');\n\n stack.push(tl || [], z + 1, x * 2, y * 2);\n stack.push(bl || [], z + 1, x * 2, y * 2 + 1);\n stack.push(tr || [], z + 1, x * 2 + 1, y * 2);\n stack.push(br || [], z + 1, x * 2 + 1, y * 2 + 1);\n }\n }\n\n /**\n * Invalidates (removes) tiles affected by the provided features\n * @internal\n * @param features \n */\n private invalidateTiles(features: GeoJSONVTInternalFeature[]) {\n if (!features.length) return;\n const options = this.options;\n const {debug} = options;\n\n // calculate bounding box of all features for trivial reject\n let minX = Infinity;\n let maxX = -Infinity;\n let minY = Infinity;\n let maxY = -Infinity;\n\n for (const feature of features) {\n minX = Math.min(minX, feature.minX);\n maxX = Math.max(maxX, feature.maxX);\n minY = Math.min(minY, feature.minY);\n maxY = Math.max(maxY, feature.maxY);\n }\n\n // tile buffer clipping value - not halved as in splitTile above because checking against tile's own extent\n const k1 = options.buffer / options.extent;\n\n // track removed tile ids for o(1) lookup\n const removedLookup = new Set();\n\n // iterate through existing tiles and remove ones that are affected by features\n for (const id in this.tiles) {\n const tile = this.tiles[id];\n\n // calculate tile bounds including buffer\n const z2 = 1 << tile.z;\n const tileMinX = (tile.x - k1) / z2;\n const tileMaxX = (tile.x + 1 + k1) / z2;\n const tileMinY = (tile.y - k1) / z2;\n const tileMaxY = (tile.y + 1 + k1) / z2;\n\n // trivial reject if feature bounds don't intersect tile\n if (maxX < tileMinX || minX >= tileMaxX ||\n maxY < tileMinY || minY >= tileMaxY) {\n continue;\n }\n\n // check if any feature intersects with the tile\n let intersects = false;\n for (const feature of features) {\n if (feature.maxX >= tileMinX && feature.minX < tileMaxX &&\n feature.maxY >= tileMinY && feature.minY < tileMaxY) {\n intersects = true;\n break;\n }\n }\n if (!intersects) continue;\n\n if (debug) {\n if (debug > 1) {\n console.log('invalidate tile z%d-%d-%d (features: %d, points: %d, simplified: %d)',\n tile.z, tile.x, tile.y, tile.numFeatures, tile.numPoints, tile.numSimplified);\n }\n const key = `z${ tile.z}`;\n this.stats[key] = (this.stats[key] || 0) - 1;\n this.total--;\n }\n\n delete this.tiles[id];\n removedLookup.add(id);\n }\n\n // remove tile coords that are no longer in the index\n if (removedLookup.size) {\n this.tileCoords = this.tileCoords.filter(c => !removedLookup.has(c.id));\n }\n }\n}\n\nfunction toID(z: number, x: number, y: number): number {\n return (((1 << z) * y + x) * 32) + z;\n}","import {convertToInternal} from './convert';\nimport {convertToGeoJSON, featureToGeoJSON} from './deconvert';\nimport {wrap} from './wrap';\nimport {applySourceDiff, type GeoJSONVTSourceDiff} from './difference';\nimport {ClusterTileIndex, defaultClusterOptions} from './cluster-tile-index';\nimport {TileIndex} from './tile-index';\nimport type {ClusterOrPointFeature, GeoJSONVTTileIndex, GeoJSONVTInternalFeature, GeoJSONVTOptions, GeoJSONVTTile, SuperclusterOptions} from './definitions';\n\nexport const defaultOptions: GeoJSONVTOptions = {\n maxZoom: 14,\n indexMaxZoom: 5,\n indexMaxPoints: 100000,\n tolerance: 3,\n extent: 4096,\n buffer: 64,\n lineMetrics: false,\n promoteId: null,\n generateId: false,\n updateable: false,\n cluster: false,\n clusterOptions: defaultClusterOptions,\n debug: 0\n};\n\n/**\n * Main class for creating and managing a vector tile index from GeoJSON data.\n */\nexport class GeoJSONVT {\n\n /** \n * @internal\n * This is for the tests\n */\n public get tiles() {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (this.tileIndex as any)?.tiles ?? {};\n }\n /** \n * @internal\n * This is for the tests\n */\n public get stats() {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (this.tileIndex as any).stats;\n }\n /** \n * @internal\n * This is for the tests\n */\n public get total() {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (this.tileIndex as any).total;\n }\n\n private options: GeoJSONVTOptions;\n \n private source?: GeoJSONVTInternalFeature[];\n private tileIndex: GeoJSONVTTileIndex;\n\n constructor(data: GeoJSON.GeoJSON, options?: GeoJSONVTOptions) {\n options = this.options = Object.assign({}, defaultOptions, options);\n\n const debug = options.debug;\n\n if (debug) console.time('preprocess data');\n\n if (options.maxZoom < 0 || options.maxZoom > 24) throw new Error('maxZoom should be in the 0-24 range');\n if (options.promoteId && options.generateId) throw new Error('promoteId and generateId cannot be used together.');\n\n // projects and adds simplification info\n let features = convertToInternal(data, options);\n\n if (debug) {\n console.timeEnd('preprocess data');\n console.log('index: maxZoom: %d, maxPoints: %d', options.indexMaxZoom, options.indexMaxPoints);\n console.time('generate tiles');\n }\n\n // wraps features (ie extreme west and extreme east)\n features = wrap(features, options);\n\n // for updateable indexes, store a copy of the original simplified features\n if (options.updateable) {\n this.source = features;\n }\n\n this.initializeIndex(features, options);\n }\n\n private initializeIndex(features: GeoJSONVTInternalFeature[], options: GeoJSONVTOptions) {\n this.tileIndex = options.cluster ? new ClusterTileIndex(options.clusterOptions) : new TileIndex(options);\n if (!features.length) return;\n this.tileIndex.initialize(features);\n }\n\n /**\n * Given z, x, and y tile coordinates, returns the corresponding tile with geometries in tile coordinates, much like MVT data is stored.\n * @param z - tile zoom level\n * @param x - tile x coordinate\n * @param y - tile y coordinate\n * @returns the transformed tile or null if not found\n */\n getTile(z: number | string, x: number | string, y: number | string): GeoJSONVTTile | null {\n z = +z;\n x = +x;\n y = +y;\n\n if (z < 0 || z > 24) return null;\n\n return this.tileIndex.getTile(z, x, y);\n }\n\n /**\n * Updates the source data feature set using a {@link GeoJSONVTSourceDiff}\n * @param diff - the source diff object\n */\n updateData(diff: GeoJSONVTSourceDiff, filter?: (feature: GeoJSON.Feature) => boolean) {\n const options = this.options;\n\n if (!options.updateable) throw new Error('to update tile geojson `updateable` option must be set to true');\n\n // apply diff and collect affected features and updated source that will be used to invalidate tiles\n let {affected, source} = applySourceDiff(this.source, diff, options);\n\n if (filter) {\n ({affected, source} = this.filterUpdate(source, affected, filter));\n }\n\n // nothing has changed\n if (!affected.length) return;\n\n // update source with new simplified feature set\n this.source = source;\n\n this.tileIndex.updateIndex(source, affected, options);\n }\n\n /**\n * Filter an update using a predicate function. Returns the affected and updated source features.\n */\n private filterUpdate(source: GeoJSONVTInternalFeature[], affected: GeoJSONVTInternalFeature[], predicate: (feature: GeoJSON.Feature) => boolean) {\n const removeIds = new Set();\n\n for (const feature of source) {\n if (feature.id == undefined) continue;\n if (predicate(featureToGeoJSON(feature))) continue;\n affected.push(feature);\n removeIds.add(feature.id);\n }\n source = source.filter(feature => !removeIds.has(feature.id));\n\n return {affected, source};\n }\n\n /**\n * Returns source data as GeoJSON - only available when `updateable` option is set to true.\n */\n getData(): GeoJSON.GeoJSON {\n if (!this.options.updateable) throw new Error('to retrieve data the `updateable` option must be set to true');\n return convertToGeoJSON(this.source);\n }\n \n /**\n * Update supercluster options and regenerate the index.\n * @param cluster - whether to enable clustering\n * @param clusterOptions - {@link SuperclusterOptions}\n */\n updateClusterOptions(cluster: boolean, clusterOptions: SuperclusterOptions) {\n const wasCluster = this.options.cluster;\n this.options.cluster = cluster;\n this.options.clusterOptions = clusterOptions;\n\n if (wasCluster == cluster) {\n this.tileIndex.updateIndex(this.source, [], this.options);\n return; \n }\n\n this.initializeIndex(this.source, this.options);\n }\n\n /**\n * Returns the zoom level at which a cluster expands into multiple children.\n * @param clusterId - The target cluster id.\n * @returns the expansion zoom or null in case of non-clustered source\n */\n getClusterExpansionZoom(clusterId: number): number | null {\n return this.tileIndex.getClusterExpansionZoom(clusterId);\n }\n\n /**\n * Returns the immediate children (clusters or points) of a cluster as GeoJSON.\n * @param clusterId - The target cluster id.\n * @returns the immediate children or null in case of non-clustered source\n */\n getClusterChildren(clusterId: number): ClusterOrPointFeature[] | null {\n return this.tileIndex.getChildren(clusterId);\n }\n\n /**\n * Returns leaf point features under a cluster, paginated by `limit` and `offset`.\n * @param clusterId - The target cluster id.\n * @param limit - Maximum number of points to return (defaults to `10`).\n * @param offset - Number of points to skip before collecting results (defaults to `0`).\n * @returns leaf point features under a cluster or null in case of non-clustered source\n */\n getClusterLeaves(clusterId: number, limit: number, offset: number): GeoJSON.Feature<GeoJSON.Point>[] | null {\n return this.tileIndex.getLeaves(clusterId, limit, offset);\n }\n}\n","import {AxisType, clip} from './clip';\nimport {convertToInternal} from './convert';\nimport {defaultOptions} from './geojsonvt';\nimport {createTile} from './tile';\nimport {transformTile} from './transform';\nimport {wrap} from './wrap';\nimport type {GeoJSONToTileOptions, GeoJSONVTTile} from './definitions';\n\n/**\n * Converts GeoJSON data directly to a single vector tile without building a tile index.\n *\n * Unlike the {@link GeoJSONVT} class which builds a hierarchical tile index for efficient\n * repeated tile access, this function generates a single tile on-demand. This is useful when:\n * - You only need one specific tile and don't need to query multiple tiles\n * - The source data is already spatially filtered to the tile's bounding box\n * - You want to avoid the overhead of building a full tile index\n *\n * @example\n * ```ts\n * import {geoJSONToTile} from '@maplibre/geojson-vt';\n *\n * const geojson = {\n * type: 'FeatureCollection',\n * features: [{\n * type: 'Feature',\n * geometry: { type: 'Point', coordinates: [-77.03, 38.90] },\n * properties: { name: 'Washington, D.C.' }\n * }]\n * };\n *\n * const tile = geoJSONToTile(geojson, 10, 292, 391, { extent: 4096 });\n * ```\n *\n * @param data - GeoJSON data (Feature, FeatureCollection, or Geometry)\n * @param z - Tile zoom level\n * @param x - Tile x coordinate\n * @param y - Tile y coordinate\n * @param options - Optional configuration for tile generation\n * @returns The generated tile with geometries in tile coordinates, or null if no features\n */\n\nexport function geoJSONToTile(data: GeoJSON.GeoJSON, z: number, x: number, y: number, options: GeoJSONToTileOptions = {}): GeoJSONVTTile {\n options = {...defaultOptions, ...options};\n const {wrap: shouldWrap = false, clip: shouldClip = false} = options;\n\n let features = convertToInternal(data, options);\n if (shouldWrap) {\n features = wrap(features, options);\n }\n if (shouldClip || options.lineMetrics) {\n const pow2 = 1 << z;\n const buffer = options.buffer / options.extent;\n const left = clip(features, pow2, (x - buffer), (x + 1 + buffer), AxisType.X, -1, 2, options);\n features = clip(left || [], pow2, (y - buffer), (y + 1 + buffer), AxisType.Y, -1, 2, options);\n }\n\n return transformTile(createTile(features ?? [], z, x, y, options), options.extent);\n}\n"],"names":[],"mappings":"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"}