<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">

<head>
<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EpostStil17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
-->
</style>
<!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1" />
 </o:shapelayout></xml><![endif]-->
</head>

<body lang=NO-BOK link=blue vlink=purple>

<div class=WordSection1>

<p class=MsoNormal><span lang=EN-US>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.<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>To do this I want to use a JasperReport
template and fill this, but first I have to make a map &#8220;invisible&#8221;
to the user.<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US>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.<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US>Is there anyone that may give me some hints
on what I am doing wrong?<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US>Regards<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US>Trond<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US>package geotoolkittest;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US>import java.awt.Graphics;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>import java.awt.Image;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>import java.awt.image.BufferedImage;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>import java.io.File;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>import java.io.IOException;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>import java.net.URL;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>import java.util.logging.Level;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>import java.util.logging.Logger;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>import javax.imageio.ImageIO;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>import javax.swing.JLabel;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>import
org.geotoolkit.data.FeatureCollection;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>import
org.geotoolkit.data.FileDataStoreFactory;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>import
org.geotoolkit.data.query.QueryBuilder;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>import
org.geotoolkit.data.shapefile.ShapefileDataStore;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>import org.geotoolkit.data.shapefile.ShapefileDataStoreFactory;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>import
org.geotoolkit.display2d.canvas.DefaultRenderingContext2D;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>import
org.geotoolkit.display2d.canvas.RenderingContext2D;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>import org.geotoolkit.gui.swing.go2.JMap2D;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>import org.geotoolkit.map.FeatureMapLayer;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>import org.geotoolkit.map.MapBuilder;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>import org.geotoolkit.map.MapContext;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>import org.geotoolkit.map.MapLayer;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>import org.geotoolkit.referencing.CRS;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>import
org.geotoolkit.referencing.crs.DefaultGeographicCRS;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>import
org.geotoolkit.style.DefaultMutableStyle;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>import org.geotoolkit.style.MutableStyle;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>import
org.geotoolkit.util.RandomStyleFactory;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>import org.opengis.feature.Feature;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>import org.opengis.feature.type.Name;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>import org.opengis.geometry.Envelope;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>import
org.opengis.referencing.NoSuchAuthorityCodeException;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>import
org.opengis.referencing.crs.CoordinateReferenceSystem;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>import
org.opengis.referencing.operation.TransformException;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>import org.opengis.util.FactoryException;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US>public class Map {<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US>    /**<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>     * A test to make &quot;a map in the
background&quot; not visible to the user<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>     * When the image of the map is
rendered it is the plan to use JaperReport to add it to a<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>     * document that will be given to the
user as a pdf doucument.<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>     * At the moment I am happy if I
succeed to produce the &quot;outpicture.png&quot; file<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>     */<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>    public static void main(String[] args)
{<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US>        try {<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>            URL shapefileURL = new
URL(&quot;file:///C:/GIS/Data/Europe_one_new.shp&quot;);<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>            ShapefileDataStore
shapefileDataStore;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>            ShapefileDataStoreFactory
shapefileDataStoreFactory = new ShapefileDataStoreFactory();<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>            FileDataStoreFactory fdsf =
(FileDataStoreFactory) shapefileDataStoreFactory;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>            shapefileDataStore =
(ShapefileDataStore) fdsf.createDataStore(shapefileURL);<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US>            JMap2D myMap = new JMap2D();<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US>            CoordinateReferenceSystem crs =
DefaultGeographicCRS.WGS84;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>           
myMap.getCanvas().setObjectiveCRS(crs);<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>            MapContext context =
MapBuilder.createContext(crs);<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US>           
myMap.getContainer().setContext(context);<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US>            Name name =
shapefileDataStore.getFeatureType().getName();<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>           
FeatureCollection&lt;Feature&gt; featureSource =
shapefileDataStore.createSession(true).getFeatureCollection(QueryBuilder.all(name));<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>            MutableStyle style =
RandomStyleFactory.createRandomVectorStyle(featureSource);<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>            FeatureMapLayer layer =
MapBuilder.createFeatureLayer(featureSource, style);<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>            layer.setVisible(true);<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>            Envelope envelope =
layer.getBounds();<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>           
context.setAreaOfInterest(envelope);<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US>            boolean add =
myMap.getContainer().getContext().layers().add(layer);<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US>            RenderingContext2D rcd = new
DefaultRenderingContext2D(myMap.getCanvas());<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US>           
myMap.getHandler().getCanvas().getBackgroundPainter().paint(rcd); // FAILS WITH
A NULLPOINTER EXCEPTION<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>            Image myimg =
myMap.getCanvas().getSnapShot();<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>            final BufferedImage mybuffimg =
new BufferedImage(myimg.getWidth(null), myimg.getHeight(null),
BufferedImage.TYPE_INT_ARGB);<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>            final Graphics g =
mybuffimg.getGraphics();<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>            g.drawImage(myimg, 0, 0, null);<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>            g.dispose();<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>            File outpict = new
File(&quot;c:\\temp\\ outpicture.png&quot;);<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>            ImageIO.write(mybuffimg,
&quot;png&quot;, outpict);<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US>        } catch (Exception ex) {<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>            ex.printStackTrace();<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>        }<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>    }<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>} <o:p></o:p></span></p>

</div>

</body>

</html>