A Java implementation of an R*-tree spatial index for efficient querying of OpenStreetMap (OSM) data, supporting range queries, k-nearest neighbor searches, and skyline queries with comprehensive performance analysis.
github.com/pompos02/R-treeQueriesThis project implements an R*-tree spatial index in Java for efficient spatial querying of OpenStreetMap data (Malta). The system processes OSM XML files through a three-stage pipeline, builds spatial indexes, and supports multiple query types with comprehensive performance benchmarking against sequential scans.
The application follows a structured three-stage pipeline for processing OSM data into an efficient spatial index:
Record
objects with coordinates and metadatadatafile.dat
- Binary file containing serialized spatial recordsRStarTree
or BulkLoadingRStarTree
indexfile.dat
- Binary file containing R*-tree nodesBoundingBoxRangeQuery
)Finds all points within a rectangular bounding box. Efficient for spatial range selections.
NearestNeighboursQuery
)Finds the k closest points to a given coordinate. Optimized for proximity-based searches.
SkylineQuery
)Identifies non-dominated points within a bounding box region. Useful for multi-criteria optimization.
Comprehensive benchmarking comparing R*-tree performance against sequential scan for range and KNN queries with variable parameters.
Range query performance comparison between R*-tree and sequential scan
Speedup analysis for range queries showing when R*-tree outperforms sequential scan
KNN query performance comparison showing R*-tree efficiency
Speedup analysis for KNN queries demonstrating spatial indexing benefits