import java.awt.Color;
import java.io.IOException;
import org.geotools.data.FeatureSource;
import org.geotools.data.memory.MemoryDataStore;
import org.geotools.factory.CommonFactoryFinder;
import org.geotools.feature.simple.SimpleFeatureBuilder;
import org.geotools.feature.simple.SimpleFeatureTypeBuilder;
import org.geotools.filter.FilterFactory;
import org.geotools.geometry.jts.JTSFactoryFinder;
import org.geotools.map.DefaultMapContext;
import org.geotools.map.DefaultMapLayer;
import org.geotools.map.MapContext;
import org.geotools.map.MapLayer;
import org.geotools.math.Line;
import org.geotools.referencing.crs.DefaultGeographicCRS;
import org.geotools.styling.AnchorPoint;
import org.geotools.styling.Font;
import org.geotools.styling.Graphic;
import org.geotools.styling.Mark;
import org.geotools.styling.PointPlacement;
import org.geotools.styling.PointSymbolizer;
import org.geotools.styling.Style;
import org.geotools.styling.StyleBuilder;
import org.geotools.styling.StyleFactory;
import org.geotools.styling.Symbolizer;
import org.geotools.styling.TextSymbolizer;
import org.geotools.swing.JMapFrame;
import org.opengis.feature.simple.SimpleFeature;
import org.opengis.feature.simple.SimpleFeatureType;
import org.opengis.feature.type.FeatureType;
import org.opengis.geometry.primitive.Point;
public class MapPreviewFrame extends JMapFrame {
public static void main(String args[]) throws Exception {
new MapPreviewFrame();
}
private Style buildStyle() throws Exception {
StyleBuilder sb = new StyleBuilder();
FilterFactory ff = (FilterFactory) sb.getFilterFactory();
Style style = sb.createStyle();
style.setName("MyStyle");
// "testPoint" feature type style
Mark testMark = sb.createMark(sb.attributeExpression("name"),
sb.createFill(Color.RED, 0.5), null);
Graphic graph = sb.createGraphic(null, new Mark[] { testMark }, null,
sb.literalExpression(1), sb.attributeExpression("size"),
sb.attributeExpression("rotation"));
style.addFeatureTypeStyle(sb.createFeatureTypeStyle("testPoint",
new Symbolizer[] { sb.createPointSymbolizer(graph) }));
// "labelPoint" feature type style
AnchorPoint anchorPoint = sb.createAnchorPoint(sb.attributeExpression("X"),
sb.attributeExpression("Y"));
PointPlacement pointPlacement = sb.createPointPlacement(anchorPoint, null,
sb.literalExpression(0));
TextSymbolizer textSymbolizer = sb.createTextSymbolizer(sb.createFill(Color.BLACK),
new Font[] { (Font) sb.createFont("Lucida Sans", 10), sb.createFont("Arial", 10) },
sb.createHalo(), sb.attributeExpression("name"), pointPlacement, null);
Mark circle = sb.createMark(StyleBuilder.MARK_CIRCLE, Color.RED);
Graphic graph2 = sb.createGraphic(null, circle, null, 1, 4, 0);
PointSymbolizer pointSymbolizer = sb.createPointSymbolizer(graph2);
style.addFeatureTypeStyle(sb.createFeatureTypeStyle("labelPoint",
new Symbolizer[] { textSymbolizer, pointSymbolizer }));
return style;
}
// http://it-republik.de/jaxenter/artikel/Wege-jenseits-von-Google-Maps-mit-GeoTools-und-uDig-1934.html
// MapLayer can be added to a MapContext Object via addLayer
private MapLayer createMemoryMapLayer() throws Exception {
String myFeatureName = "myTestFeature";
SimpleFeatureTypeBuilder featureBuilder = new SimpleFeatureTypeBuilder();
featureBuilder.setName(myFeatureName);
featureBuilder.setCRS(DefaultGeographicCRS.WGS84);
featureBuilder.add("geometry", Line.class);
featureBuilder.add("id", Integer.class);
//featureBuilder.add("name", String.class);
FeatureType featureType = featureBuilder.buildFeatureType();
MemoryDataStore memoryDataStore = new MemoryDataStore();
memoryDataStore.createSchema((SimpleFeatureType) featureType);
FeatureSource featureSource = memoryDataStore.getFeatureSource(myFeatureName);
StyleBuilder styleBuilder = new StyleBuilder();
Style myStyle = buildStyle(); //styleBuilder.createStyle();
DefaultMapLayer myLayer = new DefaultMapLayer(featureSource,myStyle,"myLayerName");
return myLayer;
}
public MapPreviewFrame() throws Exception {
// http://docs.geotools.org/latest/tutorials/quickstart/eclipse.html
MapContext map = new DefaultMapContext();
map.setTitle("Quickstart");
map.addLayer(createMemoryMapLayer());
showMap(map);
}
}