@turf/geojson-rbush
Version:
GeoJSON implementation of RBush
1 lines • 11.8 kB
Source Map (JSON)
{"version":3,"sources":["/home/runner/work/turf/turf/packages/turf-geojson-rbush/dist/cjs/index.cjs","../../index.ts"],"names":[],"mappings":"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","file":"/home/runner/work/turf/turf/packages/turf-geojson-rbush/dist/cjs/index.cjs","sourcesContent":[null,"import rbush from \"rbush\";\nimport { featureCollection } from \"@turf/helpers\";\nimport { featureEach } from \"@turf/meta\";\nimport { bbox as turfBBox } from \"@turf/bbox\";\nimport {\n BBox,\n Feature,\n FeatureCollection,\n GeoJsonProperties,\n Geometry,\n} from \"geojson\";\n\n/**\n * @module rbush\n */\n\n/**\n * Converts GeoJSON to {minX, minY, maxX, maxY} schema\n *\n * @memberof rbush\n * @private\n * @param {BBox|FeatureCollection|Feature} geojson feature(s) to retrieve BBox from\n * @returns {Object} converted to {minX, minY, maxX, maxY}\n */\nfunction toBBox(geojson: BBox | FeatureCollection | Feature) {\n var bbox;\n if ((geojson as any).bbox) bbox = (geojson as any).bbox;\n else if (Array.isArray(geojson) && geojson.length === 4) bbox = geojson;\n else if (Array.isArray(geojson) && geojson.length === 6)\n bbox = [geojson[0], geojson[1], geojson[3], geojson[4]];\n else if (geojson.type === \"Feature\") bbox = turfBBox(geojson);\n else if (geojson.type === \"FeatureCollection\") bbox = turfBBox(geojson);\n else throw new Error(\"invalid geojson\");\n\n return {\n minX: bbox[0],\n minY: bbox[1],\n maxX: bbox[2],\n maxY: bbox[3],\n };\n}\n\nclass RBush<G extends Geometry, P extends GeoJsonProperties> {\n private tree: rbush<Feature<G, P>>;\n\n constructor(maxEntries = 9) {\n this.tree = new rbush<Feature<G, P>>(maxEntries);\n // When we load features into the underlying rbush instance, it has to be able to correctly\n // handle GeoJSON bbox values while inserting into the data structure. The rest of the API\n // can just be a passthrough wrapping class.\n this.tree.toBBox = toBBox;\n }\n\n /**\n * [insert](https://github.com/mourner/rbush#data-format)\n *\n * @memberof rbush\n * @param {Feature} feature insert single GeoJSON Feature\n * @returns {RBush} GeoJSON RBush\n * @example\n * var poly = turf.polygon([[[-78, 41], [-67, 41], [-67, 48], [-78, 48], [-78, 41]]]);\n * tree.insert(poly)\n */\n insert(feature: Feature<G, P>): RBush<G, P> {\n if (feature.type !== \"Feature\") throw new Error(\"invalid feature\");\n feature.bbox = feature.bbox ? feature.bbox : turfBBox(feature);\n this.tree.insert(feature);\n return this;\n }\n\n /**\n * [load](https://github.com/mourner/rbush#bulk-inserting-data)\n *\n * @memberof rbush\n * @param {FeatureCollection|Array<Feature>} features load entire GeoJSON FeatureCollection\n * @returns {RBush} GeoJSON RBush\n * @example\n * var polys = turf.polygons([\n * [[[-78, 41], [-67, 41], [-67, 48], [-78, 48], [-78, 41]]],\n * [[[-93, 32], [-83, 32], [-83, 39], [-93, 39], [-93, 32]]]\n * ]);\n * tree.load(polys);\n */\n load(features: FeatureCollection<G, P> | Feature<G, P>[]): RBush<G, P> {\n var load: Feature<G, P>[] = [];\n // Load an Array of Features\n if (Array.isArray(features)) {\n features.forEach(function (feature) {\n if (feature.type !== \"Feature\") throw new Error(\"invalid features\");\n feature.bbox = feature.bbox ? feature.bbox : turfBBox(feature);\n load.push(feature);\n });\n } else {\n // Load a FeatureCollection\n featureEach(features, function (feature) {\n if (feature.type !== \"Feature\") throw new Error(\"invalid features\");\n feature.bbox = feature.bbox ? feature.bbox : turfBBox(feature);\n load.push(feature);\n });\n }\n this.tree.load(load);\n return this;\n }\n\n /**\n * [remove](https://github.com/mourner/rbush#removing-data)\n *\n * @memberof rbush\n * @param {Feature} feature remove single GeoJSON Feature\n * @param {Function} equals Pass a custom equals function to compare by value for removal.\n * @returns {RBush} GeoJSON RBush\n * @example\n * var poly = turf.polygon([[[-78, 41], [-67, 41], [-67, 48], [-78, 48], [-78, 41]]]);\n *\n * tree.remove(poly);\n */\n remove(\n feature: Feature<G, P>,\n equals?: (a: Feature<G, P>, b: Feature<G, P>) => boolean\n ) {\n if (feature.type !== \"Feature\") throw new Error(\"invalid feature\");\n feature.bbox = feature.bbox ? feature.bbox : turfBBox(feature);\n this.tree.remove(feature, equals);\n return this;\n }\n\n /**\n * [clear](https://github.com/mourner/rbush#removing-data)\n *\n * @memberof rbush\n * @returns {RBush} GeoJSON Rbush\n * @example\n * tree.clear()\n */\n clear() {\n this.tree.clear();\n return this;\n }\n\n /**\n * [search](https://github.com/mourner/rbush#search)\n *\n * @memberof rbush\n * @param {BBox|FeatureCollection|Feature} geojson search with GeoJSON\n * @returns {FeatureCollection} all features that intersects with the given GeoJSON.\n * @example\n * var poly = turf.polygon([[[-78, 41], [-67, 41], [-67, 48], [-78, 48], [-78, 41]]]);\n *\n * tree.search(poly);\n */\n search(geojson: Feature | FeatureCollection | BBox): FeatureCollection<G, P> {\n var features = this.tree.search(toBBox(geojson));\n return featureCollection(features);\n }\n\n /**\n * [collides](https://github.com/mourner/rbush#collisions)\n *\n * @memberof rbush\n * @param {BBox|FeatureCollection|Feature} geojson collides with GeoJSON\n * @returns {boolean} true if there are any items intersecting the given GeoJSON, otherwise false.\n * @example\n * var poly = turf.polygon([[[-78, 41], [-67, 41], [-67, 48], [-78, 48], [-78, 41]]]);\n *\n * tree.collides(poly);\n */\n collides(geojson: Feature | FeatureCollection | BBox): boolean {\n return this.tree.collides(toBBox(geojson));\n }\n\n /**\n * [all](https://github.com/mourner/rbush#search)\n *\n * @memberof rbush\n * @returns {FeatureCollection} all the features in RBush\n * @example\n * tree.all()\n */\n all() {\n const features = this.tree.all();\n return featureCollection(features);\n }\n\n /**\n * [toJSON](https://github.com/mourner/rbush#export-and-import)\n *\n * @memberof rbush\n * @returns {any} export data as JSON object\n * @example\n * var exported = tree.toJSON()\n */\n toJSON() {\n return this.tree.toJSON();\n }\n\n /**\n * [fromJSON](https://github.com/mourner/rbush#export-and-import)\n *\n * @memberof rbush\n * @param {any} json import previously exported data\n * @returns {RBush} GeoJSON RBush\n * @example\n * var exported = {\n * \"children\": [\n * {\n * \"type\": \"Feature\",\n * \"geometry\": {\n * \"type\": \"Point\",\n * \"coordinates\": [110, 50]\n * },\n * \"properties\": {},\n * \"bbox\": [110, 50, 110, 50]\n * }\n * ],\n * \"height\": 1,\n * \"leaf\": true,\n * \"minX\": 110,\n * \"minY\": 50,\n * \"maxX\": 110,\n * \"maxY\": 50\n * }\n * tree.fromJSON(exported)\n */\n fromJSON(json: any): RBush<G, P> {\n this.tree.fromJSON(json);\n return this;\n }\n}\n\n/**\n * GeoJSON implementation of [RBush](https://github.com/mourner/rbush#rbush) spatial index.\n *\n * @function rbush\n * @param {number} [maxEntries=9] defines the maximum number of entries in a tree node. 9 (used by default) is a\n * reasonable choice for most applications. Higher value means faster insertion and slower search, and vice versa.\n * @returns {RBush} GeoJSON RBush\n * @example\n * var geojsonRbush = require('geojson-rbush').default;\n * var tree = geojsonRbush();\n */\nfunction geojsonRbush<\n G extends Geometry,\n P extends GeoJsonProperties = GeoJsonProperties,\n>(maxEntries?: number) {\n return new RBush<G, P>(maxEntries);\n}\n\nexport { geojsonRbush };\nexport default geojsonRbush;\n"]}