What does this MR do?
This MR implements an embedded geodatabase into CityDoctor2 and reworks the internal data model of CityDoctorModel by connecting it with the database. CityObjects and their geometric data are no longer permanently kept in memory, with a size-limited cache loading Objects from the database on request, evicting entries back to the database once the size limit is reached. This significantly reduces the RAM footprint of larger CityDoctorModels, allowing for bigger CityGml files to be used with CityDoctorGUI.
Additionally, the geodatabase serves as foundation for implementation of the planned topological cheks, and is a requirement for their compatibility with the streaming-mode of the CityDoctor2 CLI.
Furhtermore, this MR implements multithreading in Checker, massively reducing the time needed for a validation run.
Semi-breaking change: This MR introduces breaking changes to the CityDoctorModel and CityObject classes. Usage of the CityDoctorValidation API and CLI remain backwards compatible.
Breaking changes
- CityDoctorModel: The getter functions for accessing Features, e.g. getBuildings(), now return a Stream instead of a List
- CityObject: CityObjects may be evicted from the cache at any time, which will sever the connection of a CityObject reference to the cache and may lead to phantom reads and dropped updates if this is not taken into account.
Related issues
Checklist
-
Commits squashed, following the message-template and containing changelog-trailers -
MR title and description are up to date, accurate, and descriptive. -
MR targeting the appropriate branch. -
Latest Merge Result pipeline is green.