1#ifndef OSMSCOUT_DATABASE_H
2#define OSMSCOUT_DATABASE_H
27#include <unordered_map>
85 unsigned long areaAreaIndexCacheSize=5000;
87 unsigned long nodeDataCacheSize=5'000;
88 unsigned long wayDataCacheSize=40'000;
89 unsigned long areaDataCacheSize=5'000;
90 unsigned long routeDataCacheSize=1'500;
92 bool routerDataMMap=
true;
93 bool nodesDataMMap=
true;
94 bool areasDataMMap=
true;
95 bool waysDataMMap=
true;
96 bool routesDataMMap=
true;
97 bool optimizeLowZoomMMap=
true;
101 std::string srtmDirectory;
123 this->srtmDirectory=directory;
143 return srtmDirectory;
156 explicit NodeRegionSearchResultEntry(
const NodeRef& node,
157 const Distance &distance);
176 std::list<NodeRegionSearchResultEntry> nodeResults;
193 GeoCoord closestPoint;
196 explicit WayRegionSearchResultEntry(
const WayRef &way,
197 const Distance &distance,
198 const GeoCoord &closestPoint);
222 std::list<WayRegionSearchResultEntry> wayResults;
238 GeoCoord closestPoint;
242 explicit AreaRegionSearchResultEntry(
const AreaRef &area,
243 const Distance &distance,
244 const GeoCoord &closestPoint,
274 std::list<AreaRegionSearchResultEntry> areaResults;
299 DatabaseParameter parameter;
304 TypeConfigRef typeConfig;
306 mutable BoundingBoxDataFileRef boundingBoxDataFile;
307 mutable std::mutex boundingBoxDataFileMutex;
309 mutable NodeDataFileRef nodeDataFile;
310 mutable std::mutex nodeDataFileMutex;
312 mutable AreaDataFileRef areaDataFile;
313 mutable std::mutex areaDataFileMutex;
315 mutable WayDataFileRef wayDataFile;
316 mutable std::mutex wayDataFileMutex;
318 mutable RouteDataFileRef routeDataFile;
319 mutable std::mutex routeDataFileMutex;
321 mutable AreaNodeIndexRef areaNodeIndex;
322 mutable std::mutex areaNodeIndexMutex;
324 mutable AreaWayIndexRef areaWayIndex;
325 mutable std::mutex areaWayIndexMutex;
327 mutable AreaRouteIndexRef areaRouteIndex;
328 mutable std::mutex areaRouteIndexMutex;
330 mutable AreaAreaIndexRef areaAreaIndex;
331 mutable std::mutex areaAreaIndexMutex;
333 mutable LocationIndexRef locationIndex;
334 mutable std::mutex locationIndexMutex;
336 mutable WaterIndexRef waterIndex;
337 mutable std::mutex waterIndexMutex;
339 mutable OptimizeAreasLowZoomRef optimizeAreasLowZoom;
340 mutable std::mutex optimizeAreasMutex;
342 mutable OptimizeWaysLowZoomRef optimizeWaysLowZoom;
343 mutable std::mutex optimizeWaysMutex;
345 mutable SRTMRef srtmIndex;
346 mutable std::mutex srtmIndexMutex;
349 template<
typename DataFile,
typename OffsetsCol,
typename DataCol>
350 bool GetObjectsByOffset(DataFile dataFile,
351 const OffsetsCol& offsets,
353 const std::string_view &typeName)
const
359 StopClock runningTime;
361 bool result=dataFile->GetByOffset(offsets.begin(), offsets.end(), offsets.size(), objects);
363 if (runningTime.GetMilliseconds()>100) {
364 log.
Warn() <<
"Retrieving " << objects.size() <<
" " << typeName <<
" by offset took " << runningTime.ResultString();
374 bool Open(
const std::string& path);
412 std::vector<NodeRef>&
nodes)
const;
414 const GeoBox& boundingBox,
415 std::vector<NodeRef>&
nodes)
const;
417 std::vector<NodeRef>&
nodes)
const;
419 std::vector<NodeRef>&
nodes)
const;
421 std::unordered_map<FileOffset,NodeRef>& dataMap)
const;
426 template<
typename OffsetsCol,
typename DataCol>
428 DataCol&
areas)
const
430 using namespace std::string_view_literals;
435 std::vector<AreaRef>& area)
const;
437 std::vector<AreaRef>&
areas)
const;
443 template<
typename OffsetsCol,
typename DataCol>
447 using namespace std::string_view_literals;
448 return GetObjectsByOffset(
GetWayDataFile(), offsets, ways,
"ways"sv);
451 template<
typename OffsetsCol,
typename DataCol>
455 using namespace std::string_view_literals;
473 Distance maxDistance=Distance::Of<Meter>(100))
const;
489 Distance maxDistance=Distance::Of<Meter>(100))
const;
505 Distance maxDistance=Distance::Of<Meter>(100))
const;
519 const GeoBox& boundingBox)
const;
533 const GeoBox& boundingBox)
const;
547 const GeoBox& boundingBox)
const;
#define CLASS_FINAL
Definition Compiler.h:26
#define OSMSCOUT_API
Definition CoreImportExport.h:45
Distance GetDistance() const
Definition Database.h:255
bool IsInArea() const
Definition Database.h:265
friend Database
Definition Database.h:248
GeoCoord GetClosestPoint() const
Definition Database.h:260
AreaRef GetArea() const
Definition Database.h:250
Definition Database.h:272
std::list< AreaRegionSearchResultEntry > GetAreaResults() const
Definition Database.h:279
friend Database
Definition Database.h:277
WayDataFileRef GetWayDataFile() const
AreaAreaIndexRef GetAreaAreaIndex() const
SRTMRef GetSRTMIndex() const
bool GetAreasByOffset(const OffsetsCol &offsets, DataCol &areas) const
Definition Database.h:427
TypeConfigRef GetTypeConfig() const
bool GetNodeByOffset(const FileOffset &offset, NodeRef &node) const
void SetNodeDataCacheSize(unsigned long size)
OptimizeAreasLowZoomRef GetOptimizeAreasLowZoom() const
bool GetNodesByOffset(const std::set< FileOffset > &offsets, std::unordered_map< FileOffset, NodeRef > &dataMap) const
void SetIndexMMap(bool mmap)
std::vector< Point > nodes
List of nodes.
Definition Way.h:57
std::vector< RouteRef > routes
Routes as retrieved from db.
Definition MapData.h:51
void SetAreasDataMMap(bool mmap)
void SetWayDataCacheSize(unsigned long size)
bool GetIndexMMap() const
bool GetBoundingBox(GeoBox &boundingBox) const
bool Open(const std::string &path)
void SetAreaAreaIndexCacheSize(unsigned long areaAreaIndexCacheSize)
std::string GetSRTMDirectory() const
Definition Database.h:141
void SetSRTMDirectory(const std::string &directory)
Definition Database.h:121
bool GetAreasByBlockSpan(const DataBlockSpan &span, std::vector< AreaRef > &area) const
NodeRegionSearchResult LoadNodesInRadius(const GeoCoord &location, const TypeInfoSet &types, Distance maxDistance=Distance::Of< Meter >(100)) const
const DatabaseParameter & GetParameter() const
Definition Database.h:381
void SetRoutesDataMMap(bool mmap)
WayRegionSearchResult LoadWaysInArea(const TypeInfoSet &types, const GeoBox &boundingBox) const
bool GetRoutesDataMMap() const
void SetNodesDataMMap(bool mmap)
bool GetNodesDataMMap() const
AreaDataFileRef GetAreaDataFile() const
bool GetWaysDataMMap() const
AreaRegionSearchResult LoadAreasInRadius(const GeoCoord &location, const TypeInfoSet &types, Distance maxDistance=Distance::Of< Meter >(100)) const
void SetRouteDataCacheSize(unsigned long size)
bool GetNodesByOffset(const std::vector< FileOffset > &offsets, std::vector< NodeRef > &nodes) const
bool GetNodesByOffset(const std::list< FileOffset > &offsets, std::vector< NodeRef > &nodes) const
std::vector< AreaRef > areas
Areas as retrieved from db.
Definition MapData.h:49
void SetWaysDataMMap(bool mmap)
WaterIndexRef GetWaterIndex() const
bool GetAreaByOffset(const FileOffset &offset, AreaRef &area) const
unsigned long GetRouteDataCacheSize() const
BoundingBoxDataFileRef GetBoundingBoxDataFile() const
bool GetWayByOffset(const FileOffset &offset, WayRef &way) const
NodeDataFileRef GetNodeDataFile() const
unsigned long GetWayDataCacheSize() const
AreaWayIndexRef GetAreaWayIndex() const
unsigned long GetNodeDataCacheSize() const
void DumpStatistics() const
bool GetRoutesByOffset(const OffsetsCol &offsets, DataCol &routes) const
Definition Database.h:452
void SetAreaDataCacheSize(unsigned long size)
bool GetAreasDataMMap() const
std::string GetPath() const
AreaRegionSearchResult LoadAreasInArea(const TypeInfoSet &types, const GeoBox &boundingBox) const
OptimizeWaysLowZoomRef GetOptimizeWaysLowZoom() const
void SetRouterDataMMap(bool mmap)
Database(const DatabaseParameter ¶meter)
LocationIndexRef GetLocationIndex() const
WayRegionSearchResult LoadWaysInRadius(const GeoCoord &location, const TypeInfoSet &types, Distance maxDistance=Distance::Of< Meter >(100)) const
AreaRouteIndexRef GetAreaRouteIndex() const
unsigned long GetAreaDataCacheSize() const
bool GetOptimizeLowZoomMMap() const
bool GetNodesByOffset(const std::vector< FileOffset > &offsets, const GeoBox &boundingBox, std::vector< NodeRef > &nodes) const
DatabaseParameter()=default
RouteDataFileRef GetRouteDataFile() const
void SetOptimizeLowZoomMMap(bool mmap)
unsigned long GetAreaAreaIndexCacheSize() const
AreaNodeIndexRef GetAreaNodeIndex() const
NodeRegionSearchResult LoadNodesInArea(const TypeInfoSet &types, const GeoBox &boundingBox) const
bool GetRouterDataMMap() const
bool GetNodesByOffset(const std::set< FileOffset > &offsets, std::vector< NodeRef > &nodes) const
bool GetWaysByOffset(const OffsetsCol &offsets, DataCol &ways) const
Definition Database.h:444
bool GetAreasByBlockSpans(const std::vector< DataBlockSpan > &spans, std::vector< AreaRef > &areas) const
Log & Warn(bool state)
Definition Logger.h:407
NodeRef GetNode() const
Definition Database.h:162
friend Database
Definition Database.h:160
Distance GetDistance() const
Definition Database.h:167
Definition Database.h:174
friend Database
Definition Database.h:179
std::list< NodeRegionSearchResultEntry > GetNodeResults() const
Definition Database.h:181
friend Database
Definition Database.h:201
WayRef GetWay() const
Definition Database.h:203
GeoCoord GetClosestPoint() const
Definition Database.h:213
Distance GetDistance() const
Definition Database.h:208
Definition Database.h:220
std::list< WayRegionSearchResultEntry > GetWayResults() const
Definition Database.h:227
friend Database
Definition Database.h:225
OSMSCOUT_API Log log
Definition LoggerImpl.h:95
uint64_t FileOffset
Definition OSMScoutTypes.h:46
std::shared_ptr< TypeConfig > TypeConfigRef
Definition TypeConfig.h:1396
std::shared_ptr< AreaDataFile > AreaDataFileRef
Definition AreaDataFile.h:52
std::shared_ptr< Way > WayRef
Definition Way.h:213
std::shared_ptr< WaterIndex > WaterIndexRef
Definition WaterIndex.h:107
std::shared_ptr< Area > AreaRef
Definition Area.h:360
std::shared_ptr< RouteDataFile > RouteDataFileRef
Definition RouteDataFile.h:51
std::shared_ptr< OptimizeWaysLowZoom > OptimizeWaysLowZoomRef
Definition OptimizeWaysLowZoom.h:112
std::shared_ptr< AreaWayIndex > AreaWayIndexRef
Definition AreaWayIndex.h:68
std::shared_ptr< AreaRouteIndex > AreaRouteIndexRef
Definition AreaRouteIndex.h:69
std::shared_ptr< SRTM > SRTMRef
Definition SRTM.h:95
std::shared_ptr< Database > DatabaseRef
Reference counted reference to an Database instance.
Definition Database.h:555
std::shared_ptr< BoundingBoxDataFile > BoundingBoxDataFileRef
Definition BoundingBoxDataFile.h:68
std::shared_ptr< AreaAreaIndex > AreaAreaIndexRef
Definition AreaAreaIndex.h:159
std::shared_ptr< Node > NodeRef
Definition Node.h:125
std::shared_ptr< WayDataFile > WayDataFileRef
Definition WayDataFile.h:52
std::shared_ptr< OptimizeAreasLowZoom > OptimizeAreasLowZoomRef
Definition OptimizeAreasLowZoom.h:116
std::shared_ptr< AreaNodeIndex > AreaNodeIndexRef
Definition AreaNodeIndex.h:121
std::shared_ptr< LocationIndex > LocationIndexRef
Definition LocationIndex.h:273
std::shared_ptr< NodeDataFile > NodeDataFileRef
Definition NodeDataFile.h:52