1 #ifndef OSMSCOUT_MAPSERVICE_H 2 #define OSMSCOUT_MAPSERVICE_H 55 unsigned long maxAreaLevel=4;
56 bool useLowZoomOptimization=
true;
58 bool useMultithreading=
false;
59 bool resolveRouteMembers=
true;
64 void SetMaximumAreaLevel(
unsigned long maxAreaLevel);
66 void SetUseLowZoomOptimization(
bool useLowZoomOptimization);
68 void SetUseMultithreading(
bool useMultithreading);
70 void SetResolveRouteMembers(
bool resolveRouteMembers);
74 unsigned long GetMaximumAreaLevel()
const;
76 bool GetUseLowZoomOptimization()
const;
78 bool GetUseMultithreading()
const;
80 bool GetResolveRouteMembers()
const;
82 bool IsAborted()
const;
118 mutable std::mutex stateMutex;
124 std::thread nodeWorkerThread;
127 std::thread wayWorkerThread;
130 std::thread wayLowZoomWorkerThread;
133 std::thread areaWorkerThread;
136 std::thread areaLowZoomWorkerThread;
139 std::thread routeWorkerThread;
142 std::map<CallbackId,TileStateCallback> tileStateCallbacks;
143 mutable std::mutex callbackMutex;
149 const Magnification& magnification)
const;
152 const TypeInfoSet& nodeTypes,
153 const GeoBox& boundingBox,
158 const TypeInfoSet& areaTypes,
159 const Magnification& magnification,
160 const GeoBox& boundingBox,
165 const TypeInfoSet& areaTypes,
166 const Magnification& magnification,
167 const GeoBox& boundingBox,
172 const TypeInfoSet& wayTypes,
173 const Magnification& magnification,
174 const GeoBox& boundingBox,
179 const TypeInfoSet& wayTypes,
180 const GeoBox& boundingBox,
185 const TypeInfoSet& routes,
186 const GeoBox& boundingBox,
190 template<
typename Object,
typename AreaObjectIndex,
typename ObjectByOffsetFn>
192 const TypeInfoSet& types,
193 const GeoBox& boundingBox,
197 AreaObjectIndex areaObjectIndex,
198 ObjectByOffsetFn objectByOffsetFn,
199 const std::string_view &objectTypeName,
200 const std::string_view &objectTypeNamePl)
const 202 if (!areaObjectIndex) {
214 TypeInfoSet cachedTypes(tileData.
GetTypes());
215 TypeInfoSet requestedTypes(types);
216 TypeInfoSet loadedTypes;
217 std::vector<FileOffset> offsets;
219 if (!cachedTypes.Empty()) {
220 requestedTypes.Remove(cachedTypes);
223 if (!requestedTypes.Empty()) {
224 if (!areaObjectIndex->GetOffsets(boundingBox,
228 log.
Error() <<
"Error getting " << objectTypeNamePl <<
" from area " << objectTypeName <<
" index!";
236 if (!offsets.empty()) {
238 std::sort(offsets.begin(),offsets.end());
244 std::vector<Object> objects;
246 if (!objectByOffsetFn(offsets, objects)) {
247 log.
Error() <<
"Error reading " << objectTypeNamePl <<
" in area!";
259 if (cachedTypes.Empty()){
260 tileData.
SetData(loadedTypes, std::move(objects));
262 tileData.
AddData(loadedTypes, objects);
272 NotifyTileStateCallbacks(tile);
277 void NodeWorkerLoop();
278 void WayWorkerLoop();
279 void WayLowZoomWorkerLoop();
280 void AreaWorkerLoop();
281 void AreaLowZoomWorkerLoop();
282 void RouteWorkerLoop();
284 std::future<bool> PushNodeTask(
const AreaSearchParameter& parameter,
285 const TypeInfoSet& nodeTypes,
286 const GeoBox& boundingBox,
290 std::future<bool> PushAreaLowZoomTask(
const AreaSearchParameter& parameter,
291 const TypeInfoSet& areaTypes,
292 const Magnification& magnification,
293 const GeoBox& boundingBox,
297 std::future<bool> PushAreaTask(
const AreaSearchParameter& parameter,
298 const TypeInfoSet& areaTypes,
299 const Magnification& magnification,
300 const GeoBox& boundingBox,
304 std::future<bool> PushWayLowZoomTask(
const AreaSearchParameter& parameter,
305 const TypeInfoSet& wayTypes,
306 const Magnification& magnification,
307 const GeoBox& boundingBox,
311 std::future<bool> PushWayTask(
const AreaSearchParameter& parameter,
312 const TypeInfoSet& wayTypes,
313 const GeoBox& boundingBox,
317 std::future<bool> PushRouteTask(
const AreaSearchParameter& parameter,
318 const TypeInfoSet& routeTypes,
319 const GeoBox& boundingBox,
323 void NotifyTileStateCallbacks(
const TileRef& tile)
const;
325 bool LoadMissingTileDataStyleSheet(
const AreaSearchParameter& parameter,
326 const StyleConfig& styleConfig,
327 std::list<TileRef>& tiles,
330 bool LoadMissingTileDataTypeDefinition(
const AreaSearchParameter& parameter,
331 const Magnification& magnification,
332 const TypeDefinition& typeDefinition,
333 std::list<TileRef>& tiles,
338 virtual ~MapService();
340 void SetCacheSize(
size_t cacheSize);
341 size_t GetCacheSize()
const;
342 size_t GetCurrentCacheSize()
const;
344 void CleanupTileCache();
345 void FlushTileCache();
346 void InvalidateTileCache();
348 void LookupTiles(
const Magnification& magnification,
349 const GeoBox& boundingBox,
350 std::list<TileRef>& tiles)
const;
352 void LookupTiles(
const Projection& projection,
353 std::list<TileRef>& tiles)
const;
355 TileRef LookupTile(
const TileKey& key)
const;
357 bool LoadMissingTileData(
const AreaSearchParameter& parameter,
358 const StyleConfig& styleConfig,
359 std::list<TileRef>& tiles)
const;
361 bool LoadMissingTileDataAsync(
const AreaSearchParameter& parameter,
362 const StyleConfig& styleConfig,
363 std::list<TileRef>& tiles)
const;
365 bool LoadMissingTileData(
const AreaSearchParameter& parameter,
366 const Magnification& magnification,
367 const TypeDefinition& typeDefinition,
368 std::list<TileRef>& tiles)
const;
370 bool LoadMissingTileDataAsync(
const AreaSearchParameter& parameter,
371 const Magnification& magnification,
372 const TypeDefinition& typeDefinition,
373 std::list<TileRef>& tiles)
const;
375 void AddTileDataToMapData(std::list<TileRef>& route,
376 MapData& data)
const;
378 void AddTileDataToMapData(std::list<TileRef>& tiles,
379 const TypeDefinition& typeDefinition,
380 MapData& data)
const;
382 bool GetGroundTiles(
const Projection& projection,
383 std::list<GroundTile>& tiles)
const;
385 bool GetGroundTiles(
const GeoBox& boundingBox,
386 const Magnification& magnification,
387 std::list<GroundTile>& tiles)
const;
389 SRTMDataRef GetSRTMData(
const Projection& projection)
const;
391 SRTMDataRef GetSRTMData(
const GeoBox& boundingBox)
const;
393 CallbackId RegisterTileStateCallback(TileStateCallback callback);
394 void DeregisterTileStateCallback(CallbackId callbackId);
std::shared_ptr< SRTMData > SRTMDataRef
Definition: SRTM.h:58
TypeInfoSet nodeTypes
Definition: MapService.h:103
Index selectors by type and level.
Definition: StyleConfig.h:553
void SetComplete()
Definition: DataTileCache.h:187
std::function< void(const TileRef &)> TileStateCallback
Definition: MapService.h:115
std::shared_ptr< Breaker > BreakerRef
Definition: Breaker.h:65
std::shared_ptr< Tile > TileRef
Definition: DataTileCache.h:443
Definition: MapService.h:52
std::shared_ptr< TypeDefinition > TypeDefinitionRef
Definition: MapService.h:111
Log & Error(bool state)
Definition: Logger.h:469
TypeInfoSet routeTypes
Definition: MapService.h:106
std::shared_ptr< MapService > MapServiceRef
Definition: MapService.h:399
std::shared_ptr< Database > DatabaseRef
Reference counted reference to an Database instance.
Definition: Database.h:555
size_t CallbackId
Definition: MapService.h:114
Definition: MapService.h:97
Definition: MapService.h:100
#define OSMSCOUT_MAP_API
Definition: MapImportExport.h:45
Definition: DataTileCache.h:456
Definition: DataTileCache.h:52
TypeInfoSet areaTypes
Definition: MapService.h:105
TypeInfoSet optimizedAreaTypes
Definition: MapService.h:107
void AddData(const TypeInfoSet &types, const std::vector< O > &data)
Definition: DataTileCache.h:144
void SetData(const TypeInfoSet &types, const std::vector< O > &data)
Definition: DataTileCache.h:158
TypeInfoSet GetTypes() const
Definition: DataTileCache.h:210
bool IsComplete() const
Definition: DataTileCache.h:197
TypeInfoSet optimizedWayTypes
Definition: MapService.h:108
TypeInfoSet wayTypes
Definition: MapService.h:104
void AddPrefillData(const TypeInfoSet &types, const std::vector< O > &data)
Definition: DataTileCache.h:91