[geotk] Rendering a map image in the background

Westgård Trond trondwe at IMR.no
Thu Aug 26 09:47:15 EDT 2010


I want the user to be able to make reports from a postgis database into a pdf document. The document will contain text, tables and maps.
To do this I want to use a JasperReport template and fill this, but first I have to make a map "invisible" to the user.

In the code below I am able to get data from a shapefile into a MapLayer, but when I ask the map to be painted it stops with a NullPointerException.

Is there anyone that may give me some hints on what I am doing wrong?

Regards

Trond

package geotoolkittest;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.JLabel;
import org.geotoolkit.data.FeatureCollection;
import org.geotoolkit.data.FileDataStoreFactory;
import org.geotoolkit.data.query.QueryBuilder;
import org.geotoolkit.data.shapefile.ShapefileDataStore;
import org.geotoolkit.data.shapefile.ShapefileDataStoreFactory;
import org.geotoolkit.display2d.canvas.DefaultRenderingContext2D;
import org.geotoolkit.display2d.canvas.RenderingContext2D;
import org.geotoolkit.gui.swing.go2.JMap2D;
import org.geotoolkit.map.FeatureMapLayer;
import org.geotoolkit.map.MapBuilder;
import org.geotoolkit.map.MapContext;
import org.geotoolkit.map.MapLayer;
import org.geotoolkit.referencing.CRS;
import org.geotoolkit.referencing.crs.DefaultGeographicCRS;
import org.geotoolkit.style.DefaultMutableStyle;
import org.geotoolkit.style.MutableStyle;
import org.geotoolkit.util.RandomStyleFactory;
import org.opengis.feature.Feature;
import org.opengis.feature.type.Name;
import org.opengis.geometry.Envelope;
import org.opengis.referencing.NoSuchAuthorityCodeException;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
import org.opengis.referencing.operation.TransformException;
import org.opengis.util.FactoryException;

public class Map {

    /**
     * A test to make "a map in the background" not visible to the user
     * When the image of the map is rendered it is the plan to use JaperReport to add it to a
     * document that will be given to the user as a pdf doucument.
     * At the moment I am happy if I succeed to produce the "outpicture.png" file
     */
    public static void main(String[] args) {

        try {
            URL shapefileURL = new URL("file:///C:/GIS/Data/Europe_one_new.shp");
            ShapefileDataStore shapefileDataStore;
            ShapefileDataStoreFactory shapefileDataStoreFactory = new ShapefileDataStoreFactory();
            FileDataStoreFactory fdsf = (FileDataStoreFactory) shapefileDataStoreFactory;
            shapefileDataStore = (ShapefileDataStore) fdsf.createDataStore(shapefileURL);

            JMap2D myMap = new JMap2D();

            CoordinateReferenceSystem crs = DefaultGeographicCRS.WGS84;
            myMap.getCanvas().setObjectiveCRS(crs);
            MapContext context = MapBuilder.createContext(crs);

            myMap.getContainer().setContext(context);

            Name name = shapefileDataStore.getFeatureType().getName();
            FeatureCollection<Feature> featureSource = shapefileDataStore.createSession(true).getFeatureCollection(QueryBuilder.all(name));
            MutableStyle style = RandomStyleFactory.createRandomVectorStyle(featureSource);
            FeatureMapLayer layer = MapBuilder.createFeatureLayer(featureSource, style);
            layer.setVisible(true);
            Envelope envelope = layer.getBounds();
            context.setAreaOfInterest(envelope);

            boolean add = myMap.getContainer().getContext().layers().add(layer);

            RenderingContext2D rcd = new DefaultRenderingContext2D(myMap.getCanvas());

            myMap.getHandler().getCanvas().getBackgroundPainter().paint(rcd); // FAILS WITH A NULLPOINTER EXCEPTION
            Image myimg = myMap.getCanvas().getSnapShot();
            final BufferedImage mybuffimg = new BufferedImage(myimg.getWidth(null), myimg.getHeight(null), BufferedImage.TYPE_INT_ARGB);
            final Graphics g = mybuffimg.getGraphics();
            g.drawImage(myimg, 0, 0, null);
            g.dispose();
            File outpict = new File("c:\\temp\\ outpicture.png");
            ImageIO.write(mybuffimg, "png", outpict);

        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/geotoolkit/attachments/20100826/b47db8db/attachment.html


More information about the Geotoolkit mailing list