Ignore overviews with 0 scale in pgraster
refs #2551 Postgis raster_columns view is returning NULL values for raster overviews with large scale factors. That issue in postgis is described in http://trac.osgeo.org/postgis/ticket/3006 This causes two main problems: - The first overview with scale = NULL is wrongly chosen for rendering always - The messed up scaling factor causes the render symbolizer to spent an insane amount of CPU and memory to render a messed up tiles. The patch in postgis is expected to be released with the new version, a few months from now.
This commit is contained in:
parent
ea61c5728d
commit
c4684e09cd
1 changed files with 12 additions and 2 deletions
|
@ -352,12 +352,22 @@ pgraster_datasource::pgraster_datasource(parameters const& params)
|
||||||
shared_ptr<ResultSet> rs = conn->executeQuery(s.str());
|
shared_ptr<ResultSet> rs = conn->executeQuery(s.str());
|
||||||
while (rs->next())
|
while (rs->next())
|
||||||
{
|
{
|
||||||
overviews_.resize(overviews_.size()+1);
|
pgraster_overview ov = pgraster_overview();
|
||||||
pgraster_overview& ov = overviews_.back();
|
|
||||||
ov.schema = rs->getValue("sch");
|
ov.schema = rs->getValue("sch");
|
||||||
ov.table = rs->getValue("tab");
|
ov.table = rs->getValue("tab");
|
||||||
ov.column = rs->getValue("col");
|
ov.column = rs->getValue("col");
|
||||||
ov.scale = atof(rs->getValue("scl"));
|
ov.scale = atof(rs->getValue("scl"));
|
||||||
|
|
||||||
|
if(ov.scale == 0.0f)
|
||||||
|
{
|
||||||
|
MAPNIK_LOG_WARN(pgraster) << "pgraster_datasource: found invalid overview "
|
||||||
|
<< ov.schema << "." << ov.table << "." << ov.column << " with scale " << ov.scale;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
overviews_.push_back(ov);
|
||||||
|
|
||||||
MAPNIK_LOG_DEBUG(pgraster) << "pgraster_datasource: found overview " << ov.schema << "." << ov.table << "." << ov.column << " with scale " << ov.scale;
|
MAPNIK_LOG_DEBUG(pgraster) << "pgraster_datasource: found overview " << ov.schema << "." << ov.table << "." << ov.column << " with scale " << ov.scale;
|
||||||
}
|
}
|
||||||
rs->close();
|
rs->close();
|
||||||
|
|
Loading…
Reference in a new issue