-
Notifications
You must be signed in to change notification settings - Fork 458
feat: Feature Store #2156
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
feat: Feature Store #2156
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR implements a feature store system that enables dynamic routing data updates without requiring graph rebuilds. The feature introduces matching capabilities for geographic features (points, lines, polygons) to graph edges, database-backed feature storage, and dynamic data synchronization.
Key Changes
- Added feature matching service that maps geographic features (borders, bridges, roads) to graph edges with type-specific filtering
- Implemented PostgreSQL-backed feature store with scheduled synchronization for dynamic routing data updates
- Enhanced status API to expose dynamic data statistics and feature store metrics
Reviewed Changes
Copilot reviewed 24 out of 24 changed files in this pull request and generated 32 comments.
Show a summary per file
| File | Description |
|---|---|
EdgeFilterSequence.java |
Made add() method chainable by returning this |
RoutingProfile.java |
Added dynamic data management methods and statistics tracking |
MatchingRequest.java |
Refactored matching logic with feature-type-specific edge filtering (borders, bridges) |
DynamicDataProperties.java |
Split into global configuration with database connection settings |
DynamicDataProfileProperties.java |
New profile-specific dynamic data configuration |
EncodedValuesProperties.java |
Added road_environment encoded value support |
LogieRoads.java, LogieBorders.java |
Extended enums with additional states (UNSPECIFIED, UNCLEAR, ALTERNATIVE_ROUTE) |
HashMapSparseEncodedValue.java |
Added statistics tracking with count and last-updated timestamp |
MatchingService.java |
Enhanced to parse GeoJSON features with user data properties |
DynamicDataService.java |
Refactored with incremental updates, timestamp tracking, and feature store statistics |
StatusAPI.java |
Refactored to expose dynamic data and feature store statistics |
Utils.java |
Added utility method to detect JUnit test context |
AbstractContainerBaseTest.java |
Moved container setup to shared base class with feature store schema |
ParamsTest.java |
Added feature-specific matching tests and timestamp validation |
| Configuration files | Added maximum_search_radius and road_environment settings |
Comments suppressed due to low confidence (1)
ors-api/src/test/java/org/heigit/ors/apitests/dynamicrouting/ResultTest.java:51
- Type ResultTest implements constant class AbstractContainerBaseTest.
class ResultTest extends AbstractContainerBaseTest {
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
ors-api/src/test/java/org/heigit/ors/apitests/common/AbstractContainerBaseTest.java
Show resolved
Hide resolved
ors-engine/src/main/java/com/graphhopper/routing/ev/HashMapSparseEncodedValue.java
Show resolved
Hide resolved
ors-api/src/main/java/org/heigit/ors/api/services/DynamicDataService.java
Show resolved
Hide resolved
ors-api/src/main/java/org/heigit/ors/api/services/DynamicDataService.java
Show resolved
Hide resolved
ors-api/src/main/java/org/heigit/ors/api/services/DynamicDataService.java
Show resolved
Hide resolved
ors-api/src/main/java/org/heigit/ors/api/services/DynamicDataService.java
Outdated
Show resolved
Hide resolved
ors-api/src/main/java/org/heigit/ors/api/services/MatchingService.java
Outdated
Show resolved
Hide resolved
ors-api/src/main/java/org/heigit/ors/api/services/DynamicDataService.java
Outdated
Show resolved
Hide resolved
ors-api/src/test/java/org/heigit/ors/apitests/status/ResultTest.java
Outdated
Show resolved
Hide resolved
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
ors-api/src/test/java/org/heigit/ors/apitests/status/ResultTest.java
Outdated
Show resolved
Hide resolved
For the sake of code readability and maintainability.
…yml and ors-config.env
Co-authored-by: copilot-swe-agent[bot] <[email protected]> Co-authored-by: aoles <[email protected]>
Co-authored-by: Copilot <[email protected]>
- expect an `INVALID_PARAMETER_FORMAT` rather than an `INVALID_PARAMETER_VALUE` error in case of a malformed GeoJSON - add test for `INVALID_PARAMETER_VALUE` in case an invalid profile name is provided - add test for an unknown parameter - add tests for points and lines that are expected to produce no matching edges
7ae0ecd to
dc953d3
Compare
|
|
Still TODO: list all the individual additions & changes from this PR in the changelog. |



Pull Request Checklist
have been resolved.
[Unreleased] heading.
along with a short description of what it is for, and documented this in the Pull Request (below).
(at least Germany), and the graphs build without problems (i.e. no out-of-memory errors).
importer etc.), I have generated longer distance routes for the affected profiles with different options
(avoid features, max weight etc.) and compared these with the routes of the same parameters and start/end
points generated from the current live ORS.
If there are differences then the reasoning for these MUST be documented in the pull request.
and why the change was needed.
Fixes #2169 .
Information about the changes