<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 “invisible”
to the user.<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>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> </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> </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> </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> </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> </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> </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> </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 "a map in the
background" 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 "outpicture.png" 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> </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("file:///C:/GIS/Data/Europe_one_new.shp");<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> </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> </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> </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> </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<Feature> 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> </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> </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> </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("c:\\temp\\ outpicture.png");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US> ImageIO.write(mybuffimg,
"png", outpict);<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> } 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>