check for valid datasource in the main loop

This commit is contained in:
Artem Pavlenko 2005-11-30 00:21:07 +00:00
parent 64427961d7
commit 7f4df91371
2 changed files with 22 additions and 15 deletions

View file

@ -39,9 +39,15 @@ namespace mapnik
static void render(const Map& map,Image& image);
private:
Renderer();
static void render_vector_layer(const Layer& l,unsigned width,unsigned height,
static void render_vector_layer(datasource_p const& ds,
std::vector<std::string> const& ,
unsigned width,
unsigned height,
const Envelope<double>& bbox,Image& image);
static void render_raster_layer(const Layer& l,unsigned width,unsigned height,
static void render_raster_layer(datasource_p const& ds,
std::vector<std::string> const& namedStyles,
unsigned width,
unsigned height,
const Envelope<double>& bbox,Image& image);
};
}

View file

@ -43,13 +43,12 @@ namespace mapnik
{
template <typename Image>
void Renderer<Image>::render_vector_layer(const Layer& l,unsigned width,unsigned height,
void Renderer<Image>::render_vector_layer(datasource_p const& ds,
std::vector<std::string> const& namedStyles,
unsigned width,unsigned height,
const Envelope<double>& bbox,Image& image)
{
const datasource_p& ds=l.datasource();
if (!ds) return;
CoordTransform t(width,height,bbox);
std::vector<std::string> const& namedStyles=l.styles();
std::vector<std::string>::const_iterator stylesIter=namedStyles.begin();
while (stylesIter!=namedStyles.end())
{
@ -174,11 +173,11 @@ namespace mapnik
}
template <typename Image>
void Renderer<Image>::render_raster_layer(const Layer& l,unsigned width,unsigned height,
void Renderer<Image>::render_raster_layer(datasource_p const& ds,
std::vector<std::string> const& ,
unsigned width,unsigned height,
const Envelope<double>& bbox,Image& image)
{
const datasource_p& ds=l.datasource();
if (!ds) return;
query q(bbox,width,height);
featureset_ptr fs=ds->features(q);
if (fs)
@ -216,13 +215,15 @@ namespace mapnik
const Layer& l=map.getLayer(n);
if (l.isVisible(scale)) // TODO: extent check
{
if (l.datasource()->type() == datasource::Vector)
const datasource_p& ds=l.datasource();
if (!ds) continue;
if (ds->type() == datasource::Vector)
{
render_vector_layer(l,width,height,extent,image);
render_vector_layer(ds,l.styles(),width,height,extent,image);
}
else if (l.datasource()->type() == datasource::Raster)
else if (ds->type() == datasource::Raster)
{
render_raster_layer(l,width,height,extent,image);
render_raster_layer(ds,l.styles(),width,height,extent,image);
}
}
}