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

Reply via email to