salut,
je suis entraine d'essayer de fonctionner un simple exmple
de rastérisation.voici mon code:
------------------------------------------------------------------------
// creation d'objet shapeDataPump
OGRRegisterAll();
shapeDataPump* ptShapeDataPump = new shapeDataPump(szShapeFile, 0);
//--------
// GDAL
//--------
// recupere le layer
OGREnvelope tExtent;
ptShapeDataPump->GetExtent(&tExtent);
// recupere l'etendue du layer
double dWidth = tExtent.MaxX - tExtent.MinX;
double dHeight = tExtent.MaxY - tExtent.MinY;
//calcul taille image
double dImageWidth = dWidth/dOutputPixelSize;
double dImageHeight = dHeight/dOutputPixelSize;
//--------
// MAPNIK
//--------
// ajout du plugin MapnikDataPumpPlugin
std::string sPluginFolder =
"C:\\SANDBOX\\spaceyes\\spaceyes\\bin\\vc7\\debug" ;
mapnik::datasource_cache::instance()->register_datasources(sPluginFolder) ;
//creation de map
//Map tMap(dImageWidth,dImageHeight);
boost::shared_ptr<mapnik::Map> tMap(new mapnik::Map(iBlocSize,
iBlocSize));
// creation d'un Layer
parameters params;
params["type"] = "sp3dDataPump";
params["dataPump"] = (int)ptShapeDataPump ;
// on deifnit un layer
Layer tLayer(pszLayerName);
tLayer.set_datasource(datasource_cache::instance()->create(params));
tMap->addLayer(tLayer);
//---------------
// rasterisation
//---------------
//calcul du nombre de bloc
double dXBlocCount = dImageWidth/iBlocSize;
double dYBlocCount = dImageHeight/iBlocSize;
//pour chaque bloc
//calcul de la zone carto correspondante
for(int iYBloc = 0; iYBloc < dYBlocCount; iYBloc++)
{
for(int iXBloc = 0; iXBloc < dXBlocCount; iXBloc++)
{
//calcul de la zone carto correspondante au bloc
double dZoneMinX = tExtent.MinX + iYBloc * iBlocSize *
dOutputPixelSize;
double dZoneMinY = tExtent.MinY - iXBloc * iBlocSize *
dOutputPixelSize;
double dZoneMaxX = dZoneMinX + iBlocSize * dOutputPixelSize;
double dZoneMaxY = dZoneMinY + iBlocSize * dOutputPixelSize;
// init zone
tMap->zoomToBox(Envelope<double>(dZoneMinX, dZoneMinY,
dZoneMaxX, dZoneMaxY));
// buffer
Image32 buf(iBlocSize, iBlocSize);
// rendue de cette zone dans un buffer en memoire
//( Render Map to an AGG Image32)
agg_renderer<Image32> ren(*tMap, buf);
ren.apply();
}
}
return 0;
------------------------------------------------------------------------------------------------------
j'ai pu detecter ou ca se plante:
au niveau de la fonction
void apply_to_layer(Layer const& lay, Processor & p, projection const&
proj0,double scale_denom) fichier: feature_styleprocessor.hpp
lorsqu'on execute l'instruction
p.end_layer_processing(lay);
ca appel le destructeur de projection deja creer plus haut
c'est à la sortie du destructeur de la projection que ca se plante!
sachant que j'ai remarquer que
//////
if (ds)
{
Envelope<double> ext = m_.get_buffered_extent();
projection proj1(lay.srs());
proj_transform prj_trans(proj0,proj1);
Envelope<double> layer_ext = lay.envelope();
double lx0 = layer_ext.minx();
...
//////
lors de l'execution de
Envelope<double> layer_ext = lay.envelope();
l'objet proj1 change de valeur!
s'il vous plait aidez moi à déborder ce plantage
_______________________________________________
Mapnik-users mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/mapnik-users