Hi all:
I'm using ImageMosaic to load a GeoTiff index shapefile (9 GeoTiffs,
total size of 146889x92337). If I display the resulting map using
DisplayJAI I get an optimal performance but I need to use
StreamingRenderer.render method to display multiple layers above the
raster image. With StreamingRenderer.render I get really poor
performance. Am I using GeoTools in the right way?
P.S.- I think that I'm missunderstanding (or not understanding at all the
RasterSimbolizer part) because I get some kind of inverted colors.
Thanks in advance.
-- Here is my code (I'm using GeoTools 2.3.5)
public class PanelGeoMap extends JPanel implements MouseMotionListener {
private class PanelMap extends JPanel {
@Override
public void paint(Graphics g) {
try {
Graphics2D g2d = (Graphics2D) g;
Rectangle rectangle = new Rectangle(getSize());
//System.out.println("Map size (px): " + rectangle.height
+ "x" + rectangle.width);
renderer.paint(g2d, rectangle, mapContext.getLayerBounds());
} catch (IOException ex) {
Logger.getLogger(PanelGeoMap.class.getName()).log(Level.SEVERE,
null, ex);
}
}
}
private PanelMap panelMap;
private JScrollPane scrollPaneMap;
private Dimension preferredSizeMaximum;
private CoordinateReferenceSystem crs;
private GTRenderer renderer;
private Envelope env;
private DefaultMapContext mapContext;
public PanelGeoMap() {
renderer = new StreamingRenderer();
File file = null;
JFileChooser fc = new JFileChooser();
int ret = fc.showOpenDialog(this);
if (ret == JFileChooser.APPROVE_OPTION) {
file = fc.getSelectedFile();
} else {
System.exit(0);
}
AbstractGridCoverage2DReader reader;
try {
//reader = new GeoTiffReader(file, new
Hints(Hints.FORCE_LONGITUDE_FIRST_AXIS_ORDER, Boolean.TRUE));
reader = new ImageMosaicReader(file, new
Hints(Hints.FORCE_LONGITUDE_FIRST_AXIS_ORDER, Boolean.TRUE));
} catch (IOException ex) {
ex.printStackTrace();
return;
}
GridCoverage2D coverage;
try {
coverage = (GridCoverage2D) reader.read(null);
} catch (IOException ex) {
ex.printStackTrace();
return;
}
crs = coverage.getCoordinateReferenceSystem();
env = coverage.getEnvelope();
RenderedImage image = coverage.getRenderedImage();
StyleBuilder styleBuilder = new StyleBuilder();
ColorMap cm = styleBuilder.createColorMap(
new String[]{"0", "255"},
new double[]{0, 255},
new Color[]{ new Color(0, 0, 0),
new Color(255, 255, 255)},
ColorMap.TYPE_RAMP); // XXX: ?
RasterSymbolizer rs = styleBuilder.createRasterSymbolizer(cm, 1);
Style st = styleBuilder.createStyle(rs);
mapContext = new DefaultMapContext(crs);
mapContext.addLayer(reader, st);
renderer.setContext(mapContext);
RenderingHints hints = new
RenderingHints(RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_SPEED);
renderer.setJava2DHints(hints);
Map renderParams = new HashMap();
renderParams.put("optimizedDataLoadingEnabled", new Boolean(true));
renderer.setRendererHints(renderParams);
int width = image.getWidth();
int height = image.getHeight();
/* Debug */
JFrame frameJAI = new JFrame("DisplayJAI");
frameJAI.getContentPane().add(new JScrollPane(new
DisplayJAI(image)));
frameJAI.setVisible(true);
System.out.println("Image size: " + width + "x" + height);
panelMap = new PanelMap();
panelMap.addMouseMotionListener(this);
preferredSizeMaximum = new Dimension(width, height);
panelMap.setPreferredSize(preferredSizeMaximum);
scrollPaneMap = new JScrollPane(panelMap);
scrollPaneMap.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scrollPaneMap.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
scrollPaneMap.setAutoscrolls(true);
add(scrollPaneMap, BorderLayout.CENTER);
}
public void zoomIn() {
Dimension preferredSizeActual = panelMap.getPreferredSize();
panelMap.setPreferredSize(new Dimension(preferredSizeActual.width
- 2000, preferredSizeActual.height - 2000));
panelMap.revalidate();
}
public void zoomOut() {
Dimension preferredSizeActual = panelMap.getPreferredSize();
}
public void mouseDragged(MouseEvent e) {
System.out.println("Dragging " + e.getX() + " " + e.getY());
Rectangle r = new Rectangle(e.getX(), e.getY(), 1, 1);
scrollPaneMap.scrollRectToVisible(r);
}
public void mouseMoved(MouseEvent e) {
}
}
--
Diego Fdez. Durán <[EMAIL PROTECTED]> | http://www.goedi.net
GPG : 925C 9A21 7A11 3B13 6E43 50DB F579 D119 90D2 66BB
-------------------------------------------------------------------------
SF.Net email is sponsored by:
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://sourceforge.net/services/buy/index.php
_______________________________________________
Geotools-gt2-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users