{"id":27405937,"url":"https://github.com/maptalks/maptalks.query","last_synced_at":"2025-06-22T08:34:20.479Z","repository":{"id":253381892,"uuid":"833966164","full_name":"maptalks/maptalks.query","owner":"maptalks","description":"maptalks layers data query tool","archived":false,"fork":false,"pushed_at":"2025-03-14T02:34:44.000Z","size":3343,"stargazers_count":6,"open_issues_count":0,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-05-21T13:25:41.408Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/maptalks.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-07-26T06:23:56.000Z","updated_at":"2025-04-23T00:39:29.000Z","dependencies_parsed_at":"2025-04-14T06:08:42.522Z","dependency_job_id":null,"html_url":"https://github.com/maptalks/maptalks.query","commit_stats":null,"previous_names":["deyihu/maptalks.query","fuzhenn/maptalks.query","maptalks/maptalks.query"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/maptalks/maptalks.query","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maptalks%2Fmaptalks.query","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maptalks%2Fmaptalks.query/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maptalks%2Fmaptalks.query/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maptalks%2Fmaptalks.query/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/maptalks","download_url":"https://codeload.github.com/maptalks/maptalks.query/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maptalks%2Fmaptalks.query/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261262727,"owners_count":23132502,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-04-14T06:08:37.137Z","updated_at":"2025-06-22T08:34:15.465Z","avatar_url":"https://github.com/maptalks.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# maptalks.query\n\n[maptalks](https://github.com/maptalks/maptalks.js) layers data query tool\n*  Request [maptalks-gl](https://github.com/maptalks/maptalks-gl-layers) version\u003e0.98.0, current version 0.98.0 has a bug  [vt _convertGeometry](https://github.com/maptalks/issues/issues/717) when transform vt point to geojson(polygon)\n*  Spatial Query rely on [jsts](https://github.com/bjornharrtell/jsts)\n    \n\n## Features\n\n* support simple data filter. such as keyword query \n* support spatial query\n* support layers:\n  + VectorLayer\n  + PointLayer\n  + LineStringLayer\n  + PolygonLayer\n  + VectorTileLayer\n  + GeoJSONVectorTileLayer\n  + ...\n\n* Time slicing to solve the problem of large data volume lag\n\n## Examples\n\n* [simple data filter](https://maptalks.org/maptalks.query/demo/base.html)\n* [simple spatial query](https://maptalks.org/maptalks.query/demo/base-spatial.html)\n* [vt data filter](https://maptalks.org/maptalks.query/demo/vt.html)\n* [vt spatial query](https://maptalks.org/maptalks.query/demo/vt-spatial.html)\n* [spatial query operator](https://maptalks.org/maptalks.query/demo/spatial-op.html)\n* [buffer query](https://maptalks.org/maptalks.query/demo/buffer.html)\n* [multi layers query](https://maptalks.org/maptalks.query/demo/mutl-layer.html)\n* [mock map identify](https://maptalks.org/maptalks.query/demo/mock-identify.html)\n* [tileclusterlayer query](https://maptalks.org/maptalks.query/demo/tileclusterlayer.html)\n\n## Install\n\n### NPM\n\n```sh\nnpm i maptalks-gl\nnpm i maptalks.query\n```\n\n## CDN\n\n```html\n\u003cscript type=\"text/javascript\" src=\"https://cdn.jsdelivr.net/npm/maptalks-gl/dist/maptalks-gl.min.js\"\u003e\u003c/script\u003e\n\u003cscript src=\"https://cdn.jsdelivr.net/npm/maptalks.query/dist/maptalks.query.js\"\u003e\u003c/script\u003e\n\u003c!-- if need spatial query --\u003e\n\u003cscript src=\"https://cdn.jsdelivr.net/npm/jsts@2.11.3/dist/jsts.min.js\"\u003e\u003c/script\u003e\n```\n\n## API\n\n### `injectJSTS(jsts)`\n\nInject jsts namespace. If you need spatial query, this is necessary\n\n```js\nimport * as jsts from 'jsts';\nimport {\n    injectJSTS\n} from 'maptalks.query';\n\ninjectJSTS(jsts);\n```\n\n### `Query` class\n\nlayers query tool Class\n\n#### `constructor(map, options)`\n\n```js\n new Query(map, options)\n```\n\n* `map`: maptalks Map\n* `options`:config object\n  + `options.log`: Whether to output logs when calculation errors occur\n\n```js\n const query = new Query(map, {\n     log: true\n })\n```\n\n```js\nimport {\n    Map,\n    TileLayer,\n    Polygon\n} from 'maptalks-gl';\nimport {\n    Query,\n    injectJSTS\n} from 'maptalk.query';\nimport * as jsts from 'jsts';\n\ninjectJSTS(jsts);\n\nconst mapView = {\n    'center': [120.54069005, 31.14989446],\n    'zoom': 9.49995108663881,\n    'pitch': 0,\n    'bearing': 0\n};\n// create map\nconst map = new Map('map1', {\n    ...mapView,\n    baseLayer: new TileLayer('base', {\n        urlTemplate: 'https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png',\n        subdomains: ['a', 'b', 'c', 'd'],\n        attribution: '\u0026copy; \u003ca href=\"http://osm.org\"\u003eOpenStreetMap\u003c/a\u003e contributors, \u0026copy; \u003ca href=\"https://carto.com/\"\u003eCARTO\u003c/a\u003e'\n    })\n});\n//create query instance \nconst query = new Query(map, {\n    log: true\n});\n```\n\n#### methods\n\n* `query(options)` simple data filter query. Keyword search, etc, return `Promise`\n  + `options.filter`:data filter function\n  + `options.layers`: The layer to be queried, if empty, will query all layers on the map\n\n```js\nfunction getPropties(geo) {\n    let properties = geo.getPropties ? geo.getPropties() : geo.properties;\n    properties = properties || {};\n    if (properties.__original_properties) {\n        return properties.__original_properties;\n    }\n    return properties;\n}\n\nquery.query({\n    filter: (geo, layer) =\u003e {\n        const properties = getPropties(geo);\n        const name = properties.name;\n        //mock simple keyword query\n        return name \u0026\u0026 name.includes('hello world');\n    },\n    layers: [layer, layer1, ...otherlayers]\n}).then(result =\u003e {\n    console.log(result);\n    //do some things\n}).catch(error =\u003e {\n    console.error(error);\n});\n```\n\n* `spatialQuery(options)` Geometric spatial query . return `Promise`\n\n  + `options.geometry`: Input query geometry, maptalks. Polygon/maptalks. Circle/maptalks.\n  Rectangle...\n  + `options.filter` data filter function if need\n  + `options.layers`: The layer to be queried, if empty, will query all layers on the map \n  + `options.op` Geometric Shape Relationship Query Operation, default value is ` Query.intersects`  \n    op support list:\n\n    - Query.contains\n    - Query.crosses\n    - Query.disjoint\n    - Query.equals\n    - Query.intersects\n    - Query.contains\n    - Query.overlaps\n    - Query.within\n\n```js\ninjectJSTS(jsts);\n\nconst polygon = new Polygon([...]);\nquery.spatialQuery({\n    geometry: polygon,\n    layers: [layer, layer1, ...otherlayers]\n    op: Query.intersects\n}).then((result) =\u003e {\n    console.log(result);\n    //do some things\n}).catch(error =\u003e {\n    console.error(error);\n});\n```\n\n* `dispose()`\n\n```js\nquery.dispose();\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaptalks%2Fmaptalks.query","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmaptalks%2Fmaptalks.query","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaptalks%2Fmaptalks.query/lists"}