在 GeoPackage 中建表、导入矢量要素、创建空间索引并执行空间查询。Create tables, import vector features, build spatial indexes and run spatial queries in a GeoPackage.
编程
geoskill-spatial-index-builder
试用构建 R-tree / Quadtree / GeoHash 空间索引并统计查询性能,结果与暴力搜索对齐。Build R-tree / Quadtree / GeoHash spatial indexes, benchmark query performance and align results with brute-force search.
它能做什么
构建 R-tree / Quadtree / GeoHash 空间索引并统计查询性能,结果与暴力搜索对齐。Build R-tree / Quadtree / GeoHash spatial indexes, benchmark query performance and align results with brute-force search.
技能文档
空间索引构建 | Spatial Index Builder
Builds three kinds of spatial indexes and benchmarks their query performance against a batch of query windows; results from every index are strictly validated against brute-force scanning:
- R-tree: built on shapely's
STRtree, performs exact intersection queries withpredicate="intersects"; the most widely used spatial index in production environments. - Quadtree: a self-implemented quadtree — recursively splits the bounding box into four quadrants, subdividing on capacity overflow; queries only traverse nodes intersecting the window, and features spanning child nodes are kept at the parent node to guarantee no misses.
- GeoHash: a self-implemented GeoHash encoder/decoder (base32) that builds an inverted index over all cells covered by each geometry's bounding box (avoiding misses caused by centroids falling outside the window); queries enumerate the cells covered by the window in grid alignment and then filter precisely.
The benchmark times each index and compares result consistency against brute-force scanning, reporting average latency, hit counts and speed-up ratio. --synthetic mode generates 300 random points.
Dependencies / 依赖
pip install numpy rasterio geopandas shapely fiona pyproj
Usage / 使用方法
Basic Usage
python geoskill-spatial-index-builder.py --bbox 116.0 39.0 117.0 40.0 --synthetic --output-dir ./out
Example 1 (synthetic data, 300 points, 15 queries, offline)
python geoskill-spatial-index-builder.py --bbox 116.0 39.0 117.0 40.0 --synthetic --features 300 --queries 15 --output-dir ./bench
Example 2: build and benchmark indexes on POI data
python geoskill-spatial-index-builder.py --input pois.shp --queries 30 --output-dir ./poi_bench
Example 3: high-precision GeoHash (precision 7)
python geoskill-spatial-index-builder.py --bbox 121.0 31.0 122.0 32.0 --synthetic --precision 7 --output-dir ./gh7 --quiet
Example 4: stress test with a large dataset
python geoskill-spatial-index-builder.py --bbox 116.0 39.0 117.0 40.0 --synthetic --features 2000 --queries 50 --output-dir ./stress
Example 5: low-precision GeoHash comparison
python geoskill-spatial-index-builder.py --bbox 116.0 39.0 117.0 40.0 --synthetic --precision 4 --features 500 --output-dir ./gh4
Output / 输出
| File | Format | Description |
|---|---|---|
spatial_index_report.json | JSON | Per-index performance, hit counts, consistency |
output-manifest.json | JSON | Run manifest |
Data Source / 数据源 / Source
--input: local vector file--synthetic: locally generated random point set
Privacy / 隐私声明 / Privacy
- Runs offline by default;
--syntheticmode requires no network at all. - All processing is done locally; user data is never uploaded.
License / License
MIT
name: geoskill-spatial-index-builder description: '构建 R-tree / Quadtree / GeoHash 空间索引并统计查询性能,结果与暴力搜索对齐。Build R-tree / Quadtree / GeoHash spatial indexes, benchmark query performance and align results with brute-force search.'
空间索引构建 | Spatial Index Builder
构建三种空间索引并对一批查询窗口做性能基准测试,所有索引结果与暴力 扫描严格对齐:
- R-tree:基于 shapely
STRtree,用predicate="intersects"做精确 相交查询,是生产环境最常用的空间索引。 - Quadtree:自实现四叉树——按外包矩形递归四分,容量溢出时细分,查询 只遍历与窗口相交的节点;跨子节点的要素留在父节点保证不漏检。
- GeoHash:自实现 GeoHash 编解码(base32),按几何外包矩形覆盖的所有 cell 建倒排表(避免质心在窗口外导致的漏检),查询时网格对齐枚举窗口 覆盖的 cell 再精确过滤。
基准测试对每个索引计时并与暴力扫描比对结果一致性,输出平均耗时、命中
数与加速比。--synthetic 模式生成 300 个随机点。
依赖
pip install numpy rasterio geopandas shapely fiona pyproj
使用方法
基本用法
python geoskill-spatial-index-builder.py --bbox 116.0 39.0 117.0 40.0 --synthetic --output-dir ./out
示例 1(合成数据,300 点 15 次查询,离线)
python geoskill-spatial-index-builder.py --bbox 116.0 39.0 117.0 40.0 --synthetic --features 300 --queries 15 --output-dir ./bench
示例 2:对 POI 数据建索引基准测试
python geoskill-spatial-index-builder.py --input pois.shp --queries 30 --output-dir ./poi_bench
示例 3:高精度 GeoHash(precision 7)
python geoskill-spatial-index-builder.py --bbox 121.0 31.0 122.0 32.0 --synthetic --precision 7 --output-dir ./gh7 --quiet
示例 4:大数据量压测
python geoskill-spatial-index-builder.py --bbox 116.0 39.0 117.0 40.0 --synthetic --features 2000 --queries 50 --output-dir ./stress
示例 5:低精度 GeoHash 对比
python geoskill-spatial-index-builder.py --bbox 116.0 39.0 117.0 40.0 --synthetic --precision 4 --features 500 --output-dir ./gh4
输出
| 文件 | 格式 | 说明 |
|---|---|---|
spatial_index_report.json | JSON | 各索引性能、命中数、一致性 |
output-manifest.json | JSON | 运行清单 |
数据源 / Source
--input:本地矢量文件--synthetic:本地生成随机点集
隐私声明 / Privacy
- 默认离线运行,
--synthetic模式完全无网络。 - 所有处理在本地完成,不上传用户数据。
License
MIT
相关技能
Build spatial dashboards combining map layers and statistical charts into HTML
Spatial scan statistics, kernel density, environment association and accessibility for public health spatial analysis
对矢量数据做变更检测、版本快照与差异比较,支持 commit / diff / log 操作。Change detection, version snapshots and diff comparison for vector data with commit / diff / log operations.
Map slums and shanty areas using a multi-indicator index of texture, building density, night light and population density.
Estimate building footprint density and floor area ratio (FAR) from building footprints and heights using kernel density estimation.