avoid reallocatig too much stuff with each drawinng call
This commit is contained in:
parent
de540a36ed
commit
4af5ab049c
1 changed files with 28 additions and 18 deletions
|
@ -35,17 +35,22 @@
|
|||
Demos/DrawMapCairo ../maps/nordrhein-westfalen ../stylesheets/standard.oss 800 480 51.51241 7.46525 70000 test.png
|
||||
*/
|
||||
|
||||
osmscout::DatabaseParameter databaseParameter;
|
||||
osmscout::DatabaseRef database;
|
||||
osmscout::MapServiceRef mapService;
|
||||
osmscout::StyleConfigRef styleConfig;
|
||||
static osmscout::DatabaseParameter databaseParameter;
|
||||
static osmscout::DatabaseRef database;
|
||||
static osmscout::MapServiceRef mapService;
|
||||
static osmscout::StyleConfigRef styleConfig;
|
||||
|
||||
osmscout::BasemapDatabaseRef basemapDatabase;
|
||||
static osmscout::BasemapDatabaseRef basemapDatabase;
|
||||
|
||||
static osmscout::MercatorProjection projection;
|
||||
static osmscout::MapParameter drawParameter;
|
||||
static osmscout::AreaSearchParameter searchParameter;
|
||||
static osmscout::MapData data;
|
||||
|
||||
static std::list<osmscout::TileRef> tiles;
|
||||
|
||||
static osmscout::MapPainterCairo *cairoMapPainter{nullptr};
|
||||
|
||||
osmscout::MercatorProjection projection;
|
||||
osmscout::MapParameter drawParameter;
|
||||
osmscout::AreaSearchParameter searchParameter;
|
||||
osmscout::MapData data;
|
||||
|
||||
int DrawMapCairoInit(int argc, char* argv[])
|
||||
{
|
||||
|
@ -79,7 +84,16 @@ int DrawMapCairoInit(int argc, char* argv[])
|
|||
drawParameter.SetLabelLineMinCharCount(15);
|
||||
drawParameter.SetLabelLineMaxCharCount(30);
|
||||
drawParameter.SetLabelLineFitToArea(true);
|
||||
|
||||
//LoadBaseMapTiles(data.baseMapTiles);
|
||||
|
||||
assert(database);
|
||||
assert(database->IsOpen());
|
||||
assert(mapService);
|
||||
assert(styleConfig);
|
||||
|
||||
cairoMapPainter = new osmscout::MapPainterCairo(styleConfig);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -87,8 +101,7 @@ int DrawMapCairo(cairo_surface_t *surface, double lat, double lon, unsigned int
|
|||
{
|
||||
osmscout::GeoCoord center(lat, lon);
|
||||
osmscout::Magnification zoom{osmscout::Magnification::magClose};
|
||||
std::list<osmscout::TileRef> tiles;
|
||||
osmscout::MapPainterCairo painter(styleConfig);
|
||||
osmscout::GeoBox boundingBox;
|
||||
cairo_t *cairo=cairo_create(surface);
|
||||
|
||||
assert(database);
|
||||
|
@ -98,18 +111,15 @@ int DrawMapCairo(cairo_surface_t *surface, double lat, double lon, unsigned int
|
|||
|
||||
zoom.SetMagnification(zoomlevel);
|
||||
projection.Set(center, direction, zoom, 96, 800, 600);
|
||||
|
||||
projection.GetDimensions(boundingBox);
|
||||
mapService->GetGroundTiles(projection, data.groundTiles);
|
||||
mapService->LookupTiles(projection, tiles);
|
||||
mapService->LoadMissingTileData(searchParameter,*styleConfig, tiles);
|
||||
mapService->AddTileDataToMapData(tiles, data);
|
||||
mapService->GetGroundTiles(projection, data.groundTiles);
|
||||
//LoadBaseMapTiles(data.baseMapTiles);
|
||||
|
||||
osmscout::GeoBox boundingBox;
|
||||
projection.GetDimensions(boundingBox);
|
||||
|
||||
if (!painter.DrawMap(projection, drawParameter, data, cairo))
|
||||
if (!cairoMapPainter->DrawMap(projection, drawParameter, data, cairo))
|
||||
std::cerr << "Cannot paint" << std::endl;;
|
||||
|
||||
cairo_destroy(cairo);
|
||||
|
||||
return 0;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue