package org.geotoolkit.pending.demo.rendering;
import org.apache.sis.storage.DataStoreException;
import org.geotoolkit.coverage.io.CoverageIO;
import org.geotoolkit.coverage.io.CoverageStoreException;
import org.geotoolkit.coverage.io.GridCoverageReader;
import org.geotoolkit.data.FeatureCollection;
import org.geotoolkit.data.FeatureStore;
import org.geotoolkit.data.query.Query;
import org.geotoolkit.data.query.QueryBuilder;
import org.geotoolkit.data.session.Session;
import org.geotoolkit.display.PortrayalException;
import org.geotoolkit.display2d.service.CanvasDef;
import org.geotoolkit.display2d.service.DefaultPortrayalService;
import org.geotoolkit.display2d.service.SceneDef;
import org.geotoolkit.display2d.service.ViewDef;
import org.geotoolkit.factory.FactoryFinder;
import org.geotoolkit.factory.Hints;
import org.geotoolkit.image.io.plugin.WorldFileImageReader;
import org.geotoolkit.map.FeatureMapLayer;
import org.geotoolkit.map.MapBuilder;
import org.geotoolkit.map.MapContext;
import org.geotoolkit.pending.demo.Demos;
import org.geotoolkit.style.MutableStyle;
import org.geotoolkit.style.MutableStyleFactory;
import org.geotoolkit.style.StyleConstants;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.Serializable;
import java.net.URISyntaxException;
import java.util.HashMap;
import java.util.Map;
import org.geotoolkit.storage.DataStores;
public class PortrayalDemo {
private static final MutableStyleFactory SF = (MutableStyleFactory) FactoryFinder.getStyleFactory(
new Hints(Hints.STYLE_FACTORY, MutableStyleFactory.class));
public static void main(String[] args) throws DataStoreException, IOException, PortrayalException, URISyntaxException {
Demos.init();
//generate a map context
final MapContext context = createContext();
//prepare the rendering context
final CanvasDef canvasdef = new CanvasDef(new Dimension(800, 600), Color.WHITE);
final SceneDef scenedef = new SceneDef(context);
final ViewDef viewdef = new ViewDef(context.getBounds());
//generate the image
final BufferedImage img = DefaultPortrayalService.portray(canvasdef, scenedef, viewdef);
//show the image
final JFrame frm = new JFrame();
frm.setContentPane(new JLabel(new ImageIcon(img)));
frm.pack();
frm.setLocationRelativeTo(null);
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frm.setVisible(true);
}
private static MapContext createContext() throws DataStoreException, URISyntaxException {
//create a map context
final MapContext context = MapBuilder.createContext();
//create a feature layer
final FeatureCollection features = openShapeFile();
final MutableStyle featureStyle = SF.style(StyleConstants.DEFAULT_LINE_SYMBOLIZER);
final FeatureMapLayer featureLayer = MapBuilder.createFeatureLayer(features, featureStyle);
//create a coverage layer
// final GridCoverageReader reader = openWorldFile();
// final MutableStyle coverageStyle = SF.style(StyleConstants.DEFAULT_RASTER_SYMBOLIZER);
// final CoverageMapLayer coverageLayer = MapBuilder.createCoverageLayer(reader, 0, coverageStyle,"background");
//add all layers in the context
// context.layers().add(coverageLayer);
context.layers().add(featureLayer);
return context;
}
private static FeatureCollection openShapeFile() throws DataStoreException, URISyntaxException {
final Map<String,Serializable> params = new HashMap<String,Serializable>();
params.put("path", PortrayalDemo.class.getResource("/data/world/Countries.shp").toURI());
final FeatureStore store = (FeatureStore) DataStores.open(params);
final Session session = store.createSession(true);
final Query query = QueryBuilder.all(store.getNames().iterator().next());
final FeatureCollection collection = session.getFeatureCollection(query);
return collection;
}
private static GridCoverageReader openWorldFile() throws CoverageStoreException, URISyntaxException {
WorldFileImageReader.Spi.registerDefaults(null);
File cloudFile = new File(PortrayalDemo.class.getResource("/data/coverage/clouds.jpg").toURI());
return CoverageIO.createSimpleReader(cloudFile);
}
}