package org.geotoolkit.pending.demo.symbology; import com.vividsolutions.jts.geom.Coordinate; import org.opengis.style.Fill; import org.opengis.style.Halo; import org.opengis.style.LabelPlacement; import org.opengis.style.Font; import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.Point; import java.awt.Color; import java.io.IOException; import java.io.Serializable; import java.net.MalformedURLException; import java.net.URISyntaxException; import java.util.Map; import javax.measure.Unit; import javax.swing.JComponent; import javax.swing.JPanel; import org.apache.sis.feature.FeatureExt; import org.geotoolkit.data.FeatureStore; import org.geotoolkit.data.FeatureCollection; import org.geotoolkit.data.query.QueryBuilder; import org.geotoolkit.display2d.canvas.RenderingContext2D; import org.geotoolkit.display2d.ext.isoline.graphic.IsolineGraphicBuilder; import org.geotoolkit.display2d.ext.isoline.graphic.ValueExtractor; import org.geotoolkit.filter.function.math.MathFunctionFactory; import org.geotoolkit.map.MapBuilder; import org.geotoolkit.map.MapContext; import org.geotoolkit.map.MapLayer; import org.apache.sis.measure.Units; import org.apache.sis.storage.DataStoreException; import org.geotoolkit.data.shapefile.ShapefileFeatureStore; import org.geotoolkit.style.MutableStyle; import org.jdesktop.swingx.JXErrorPane; import org.opengis.feature.Feature; import org.opengis.filter.expression.Expression; import org.opengis.filter.expression.PropertyName; import org.opengis.style.Description; import org.opengis.style.TextSymbolizer; import static org.geotoolkit.style.StyleConstants.*; /** * * @author sorel */ public class JIsoline extends JAbstractMapPane{ public JIsoline() throws DataStoreException, MalformedURLException, URISyntaxException { super(createContext()); } private static MapContext createContext() throws DataStoreException, MalformedURLException, URISyntaxException { final MapContext context = Styles.createWorldContext(null); Map<String,Serializable> params; FeatureStore store; FeatureCollection fs; MutableStyle style; MapLayer layer; //stations ------------------------------------------------------------- try{ store = new ShapefileFeatureStore(JAbstractMapPane.class.getResource("/data/weather/stations2.shp").toURI()); fs = store.createSession(true).getFeatureCollection(QueryBuilder.all(store.getNames().iterator().next())); layer = MapBuilder.createFeatureLayer(fs, createStationStyle()); layer.setDescription(SF.description("stations", "")); layer.setName("stations"); context.layers().add(layer); }catch(Exception ex){ JXErrorPane.showDialog(ex); return context; } //bonus : temp isoligne------------------------------------------------- final MapLayer isoTemplayer = MapBuilder.createFeatureLayer(fs, SF.style()); final IsolineGraphicBuilder gb = new IsolineGraphicBuilder(new ValueExtractor() { private PropertyName prop = FF.property("A_temp"); @Override public Coordinate getValues(RenderingContext2D context, Feature feature) throws IOException { final Geometry geom = (Geometry) FeatureExt.getDefaultGeometryAttributeValue(feature); final Point centroid = geom.getCentroid(); final Coordinate c = new Coordinate(); c.x = centroid.getX(); c.y = centroid.getY(); c.z = prop.evaluate(feature, Double.class); return c; } }); gb.setInterpolateCoverageColor(true); gb.setIsoLineStyle(SF.style( SF.lineSymbolizer(SF.stroke(Color.BLUE, 1),null), SF.textSymbolizer( "Temperature", (String)null, SF.description("Temperature", "Temperature"), Units.POINT, FF.function(MathFunctionFactory.ROUND, FF.property("value")), SF.font(9), SF.linePlacement(FF.literal(3),FF.literal(100),FF.literal(600),true,true,true), SF.halo(Color.WHITE, 0), SF.fill(Color.BLUE)) )); isoTemplayer.graphicBuilders().add(gb); context.layers().add(1,isoTemplayer); //---------------------------------------------------------------------- return context; } private static MutableStyle createStationStyle(){ //general informations final String name = "mySymbol"; final Description desc = DEFAULT_DESCRIPTION; final String geometry = null; //use the default geometry of the feature final Unit unit = Units.POINT; final Expression label = FF.property("A_temp"); final Font font = SF.font( FF.literal("Arial"), FONT_STYLE_ITALIC, FONT_WEIGHT_BOLD, FF.literal(14)); final LabelPlacement placement = SF.pointPlacement(); final Halo halo = SF.halo(Color.WHITE, 1); final Fill fill = SF.fill(Color.BLUE); final TextSymbolizer symbol = SF.textSymbolizer(name, geometry, desc, unit, label, font, placement, halo, fill); final MutableStyle style = SF.style(DEFAULT_POINT_SYMBOLIZER,symbol); return style; } @Override protected JComponent createConfigPane() { return new JPanel(); } }