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
|
Demos/DrawMapCairo ../maps/nordrhein-westfalen ../stylesheets/standard.oss 800 480 51.51241 7.46525 70000 test.png
|
||||||
*/
|
*/
|
||||||
|
|
||||||
osmscout::DatabaseParameter databaseParameter;
|
static osmscout::DatabaseParameter databaseParameter;
|
||||||
osmscout::DatabaseRef database;
|
static osmscout::DatabaseRef database;
|
||||||
osmscout::MapServiceRef mapService;
|
static osmscout::MapServiceRef mapService;
|
||||||
osmscout::StyleConfigRef styleConfig;
|
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[])
|
int DrawMapCairoInit(int argc, char* argv[])
|
||||||
{
|
{
|
||||||
|
@ -79,7 +84,16 @@ int DrawMapCairoInit(int argc, char* argv[])
|
||||||
drawParameter.SetLabelLineMinCharCount(15);
|
drawParameter.SetLabelLineMinCharCount(15);
|
||||||
drawParameter.SetLabelLineMaxCharCount(30);
|
drawParameter.SetLabelLineMaxCharCount(30);
|
||||||
drawParameter.SetLabelLineFitToArea(true);
|
drawParameter.SetLabelLineFitToArea(true);
|
||||||
|
|
||||||
|
//LoadBaseMapTiles(data.baseMapTiles);
|
||||||
|
|
||||||
|
assert(database);
|
||||||
|
assert(database->IsOpen());
|
||||||
|
assert(mapService);
|
||||||
|
assert(styleConfig);
|
||||||
|
|
||||||
|
cairoMapPainter = new osmscout::MapPainterCairo(styleConfig);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -87,8 +101,7 @@ int DrawMapCairo(cairo_surface_t *surface, double lat, double lon, unsigned int
|
||||||
{
|
{
|
||||||
osmscout::GeoCoord center(lat, lon);
|
osmscout::GeoCoord center(lat, lon);
|
||||||
osmscout::Magnification zoom{osmscout::Magnification::magClose};
|
osmscout::Magnification zoom{osmscout::Magnification::magClose};
|
||||||
std::list<osmscout::TileRef> tiles;
|
osmscout::GeoBox boundingBox;
|
||||||
osmscout::MapPainterCairo painter(styleConfig);
|
|
||||||
cairo_t *cairo=cairo_create(surface);
|
cairo_t *cairo=cairo_create(surface);
|
||||||
|
|
||||||
assert(database);
|
assert(database);
|
||||||
|
@ -98,18 +111,15 @@ int DrawMapCairo(cairo_surface_t *surface, double lat, double lon, unsigned int
|
||||||
|
|
||||||
zoom.SetMagnification(zoomlevel);
|
zoom.SetMagnification(zoomlevel);
|
||||||
projection.Set(center, direction, zoom, 96, 800, 600);
|
projection.Set(center, direction, zoom, 96, 800, 600);
|
||||||
|
projection.GetDimensions(boundingBox);
|
||||||
|
mapService->GetGroundTiles(projection, data.groundTiles);
|
||||||
mapService->LookupTiles(projection, tiles);
|
mapService->LookupTiles(projection, tiles);
|
||||||
mapService->LoadMissingTileData(searchParameter,*styleConfig, tiles);
|
mapService->LoadMissingTileData(searchParameter,*styleConfig, tiles);
|
||||||
mapService->AddTileDataToMapData(tiles, data);
|
mapService->AddTileDataToMapData(tiles, data);
|
||||||
mapService->GetGroundTiles(projection, data.groundTiles);
|
|
||||||
//LoadBaseMapTiles(data.baseMapTiles);
|
|
||||||
|
|
||||||
osmscout::GeoBox boundingBox;
|
if (!cairoMapPainter->DrawMap(projection, drawParameter, data, cairo))
|
||||||
projection.GetDimensions(boundingBox);
|
|
||||||
|
|
||||||
if (!painter.DrawMap(projection, drawParameter, data, cairo))
|
|
||||||
std::cerr << "Cannot paint" << std::endl;;
|
std::cerr << "Cannot paint" << std::endl;;
|
||||||
|
|
||||||
cairo_destroy(cairo);
|
cairo_destroy(cairo);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue