1 #ifndef OSMSCOUT_DATABASE_H 2 #define OSMSCOUT_DATABASE_H 27 #include <unordered_map> 29 #include <string_view> 85 unsigned long areaAreaIndexCacheSize=5000;
87 unsigned long nodeDataCacheSize=5000;
88 unsigned long wayDataCacheSize=40000;
89 unsigned long areaDataCacheSize=5000;
90 unsigned long routeDataCacheSize=1500;
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;
104 DatabaseParameter() =
default;
106 void SetAreaAreaIndexCacheSize(
unsigned long areaAreaIndexCacheSize);
107 void SetNodeDataCacheSize(
unsigned long size);
108 void SetWayDataCacheSize(
unsigned long size);
109 void SetAreaDataCacheSize(
unsigned long size);
110 void SetRouteDataCacheSize(
unsigned long size);
112 void SetRouterDataMMap(
bool mmap);
113 void SetNodesDataMMap(
bool mmap);
114 void SetAreasDataMMap(
bool mmap);
115 void SetWaysDataMMap(
bool mmap);
116 void SetRoutesDataMMap(
bool mmap);
117 void SetOptimizeLowZoomMMap(
bool mmap);
118 void SetIndexMMap(
bool mmap);
123 this->srtmDirectory=directory;
126 unsigned long GetAreaAreaIndexCacheSize()
const;
127 unsigned long GetNodeDataCacheSize()
const;
128 unsigned long GetWayDataCacheSize()
const;
129 unsigned long GetRouteDataCacheSize()
const;
130 unsigned long GetAreaDataCacheSize()
const;
132 bool GetRouterDataMMap()
const;
133 bool GetNodesDataMMap()
const;
134 bool GetAreasDataMMap()
const;
135 bool GetWaysDataMMap()
const;
136 bool GetRoutesDataMMap()
const;
137 bool GetOptimizeLowZoomMMap()
const;
138 bool GetIndexMMap()
const;
143 return srtmDirectory;
157 const Distance &distance);
176 std::list<NodeRegionSearchResultEntry> nodeResults;
193 GeoCoord closestPoint;
197 const Distance &distance,
198 const GeoCoord &closestPoint);
222 std::list<WayRegionSearchResultEntry> wayResults;
238 GeoCoord closestPoint;
243 const Distance &distance,
244 const GeoCoord &closestPoint,
274 std::list<AreaRegionSearchResultEntry> areaResults;
299 DatabaseParameter parameter;
307 mutable std::mutex boundingBoxDataFileMutex;
310 mutable std::mutex nodeDataFileMutex;
313 mutable std::mutex areaDataFileMutex;
316 mutable std::mutex wayDataFileMutex;
319 mutable std::mutex routeDataFileMutex;
322 mutable std::mutex areaNodeIndexMutex;
325 mutable std::mutex areaWayIndexMutex;
328 mutable std::mutex areaRouteIndexMutex;
331 mutable std::mutex areaAreaIndexMutex;
334 mutable std::mutex locationIndexMutex;
337 mutable std::mutex waterIndexMutex;
340 mutable std::mutex optimizeAreasMutex;
343 mutable std::mutex optimizeWaysMutex;
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 361 bool result=dataFile->GetByOffset(offsets.begin(), offsets.end(), offsets.size(), objects);
363 if (time.GetMilliseconds()>100) {
364 log.
Warn() <<
"Retrieving " << objects.size() <<
" " << typeName <<
" by offset took " << time.ResultString();
371 explicit Database(
const DatabaseParameter& parameter);
374 bool Open(
const std::string& path);
378 std::string GetPath()
const;
409 bool GetNodeByOffset(
const FileOffset& offset,
411 bool GetNodesByOffset(
const std::vector<FileOffset>& offsets,
412 std::vector<NodeRef>& nodes)
const;
413 bool GetNodesByOffset(
const std::vector<FileOffset>& offsets,
414 const GeoBox& boundingBox,
415 std::vector<NodeRef>& nodes)
const;
416 bool GetNodesByOffset(
const std::set<FileOffset>& offsets,
417 std::vector<NodeRef>& nodes)
const;
418 bool GetNodesByOffset(
const std::list<FileOffset>& offsets,
419 std::vector<NodeRef>& nodes)
const;
420 bool GetNodesByOffset(
const std::set<FileOffset>& offsets,
421 std::unordered_map<FileOffset,NodeRef>& dataMap)
const;
423 bool GetAreaByOffset(
const FileOffset& offset,
426 template<
typename OffsetsCol,
typename DataCol>
428 DataCol& areas)
const 430 using namespace std::string_view_literals;
431 return GetObjectsByOffset(GetAreaDataFile(), offsets, areas,
"areas"sv);
435 std::vector<AreaRef>& area)
const;
436 bool GetAreasByBlockSpans(
const std::vector<DataBlockSpan>& spans,
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>
453 DataCol& routes)
const 455 using namespace std::string_view_literals;
456 return GetObjectsByOffset(GetRouteDataFile(), offsets, routes,
"routes"sv);
472 const TypeInfoSet& types,
473 Distance maxDistance=Distance::Of<Meter>(100))
const;
488 const TypeInfoSet& types,
489 Distance maxDistance=Distance::Of<Meter>(100))
const;
504 const TypeInfoSet& types,
505 Distance maxDistance=Distance::Of<Meter>(100))
const;
519 const GeoBox& boundingBox)
const;
533 const GeoBox& boundingBox)
const;
547 const GeoBox& boundingBox)
const;
std::shared_ptr< AreaAreaIndex > AreaAreaIndexRef
Definition: AreaAreaIndex.h:159
Definition: Database.h:173
Distance GetDistance() const
Definition: Database.h:208
std::list< AreaRegionSearchResultEntry > GetAreaResults() const
Definition: Database.h:279
std::shared_ptr< Node > NodeRef
Definition: Node.h:124
std::shared_ptr< RouteDataFile > RouteDataFileRef
Definition: RouteDataFile.h:50
bool GetWaysByOffset(const OffsetsCol &offsets, DataCol &ways) const
Definition: Database.h:444
Definition: Database.h:233
std::list< WayRegionSearchResultEntry > GetWayResults() const
Definition: Database.h:227
std::shared_ptr< OptimizeAreasLowZoom > OptimizeAreasLowZoomRef
Definition: OptimizeAreasLowZoom.h:115
Prints details for debugging, if debug flag (performance, data) is set in renderer parameter...
Definition: MapPainter.h:58
friend Database
Definition: Database.h:248
std::shared_ptr< AreaDataFile > AreaDataFileRef
Definition: AreaDataFile.h:51
std::shared_ptr< WayDataFile > WayDataFileRef
Definition: WayDataFile.h:51
std::shared_ptr< Way > WayRef
Definition: Way.h:202
std::shared_ptr< NodeDataFile > NodeDataFileRef
Definition: NodeDataFile.h:51
std::shared_ptr< AreaWayIndex > AreaWayIndexRef
Definition: AreaWayIndex.h:66
void GetBoundingBox(const std::vector< N > &nodes, double &minLon, double &maxLon, double &minLat, double &maxLat)
Definition: Geometry.h:107
std::shared_ptr< Database > DatabaseRef
Reference counted reference to an Database instance.
Definition: Database.h:555
std::shared_ptr< OptimizeWaysLowZoom > OptimizeWaysLowZoomRef
Definition: OptimizeWaysLowZoom.h:111
GeoCoord GetClosestPoint() const
Definition: Database.h:260
NodeRef GetNode() const
Definition: Database.h:162
Definition: Database.h:271
friend Database
Definition: Database.h:160
#define CLASS_FINAL
Definition: Compiler.h:26
std::shared_ptr< Area > AreaRef
Definition: Area.h:358
#define OSMSCOUT_API
Definition: CoreImportExport.h:45
Distance GetDistance() const
Definition: Database.h:255
Definition: Database.h:149
bool GetRoutesByOffset(const OffsetsCol &offsets, DataCol &routes) const
Definition: Database.h:452
std::shared_ptr< AreaRouteIndex > AreaRouteIndexRef
Definition: AreaRouteIndex.h:66
friend Database
Definition: Database.h:277
Definition: Database.h:219
Distance GetDistance() const
Definition: Database.h:167
friend Database
Definition: Database.h:225
GeoCoord GetClosestPoint() const
Definition: Database.h:213
Definition: DataFile.h:44
const DatabaseParameter & GetParameter() const
Definition: Database.h:381
WayRef GetWay() const
Definition: Database.h:203
friend Database
Definition: Database.h:179
uint64_t FileOffset
Definition: OSMScoutTypes.h:47
AreaRef GetArea() const
Definition: Database.h:250
Log & Warn(bool state)
Definition: Logger.h:462
bool IsInArea() const
Definition: Database.h:265
std::shared_ptr< AreaNodeIndex > AreaNodeIndexRef
Definition: AreaNodeIndex.h:120
bool GetAreasByOffset(const OffsetsCol &offsets, DataCol &areas) const
Definition: Database.h:427
std::string GetSRTMDirectory() const
Definition: Database.h:141
std::shared_ptr< TypeConfig > TypeConfigRef
Definition: TypeConfig.h:1227
std::shared_ptr< WaterIndex > WaterIndexRef
Definition: WaterIndex.h:106
Definition: Database.h:188
std::shared_ptr< LocationIndex > LocationIndexRef
Definition: LocationIndex.h:272
std::shared_ptr< BoundingBoxDataFile > BoundingBoxDataFileRef
Definition: BoundingBoxDataFile.h:68
void SetSRTMDirectory(const std::string &directory)
Definition: Database.h:121
friend Database
Definition: Database.h:201
std::list< NodeRegionSearchResultEntry > GetNodeResults() const
Definition: Database.h:181
std::shared_ptr< SRTM > SRTMRef
Definition: SRTM.h:95