Hello, I tried to run that code, i use gt-main-2.6-SNAPSHOT.jar but i got error on following line:
style.featureTypeStyles().add(fts); The method add(capture#1-of ? extends FeatureTypeStyle) in the type List<capture#1-of ? extends FeatureTypeStyle> is not applicable for the arguments (FeatureTypeStyle). Maybe i am using bad gt-main library? I downloaded it from http://repo.opengeo.org/org/geotools/. Thanks. mbedward wrote: > > Hi jv, > > Below is some demo code that illustrates: > > - creating a common feature type with point geometry for location and > an attribute for species status > > - creating features and adding them to a feature collection > > - creating a rendering style to use different symbols depending on > status value of a feature > > - creating a map and displaying it with the JMapFrame.showMap static > method > > To run this code right now you will need to be using the bleeding edge > GeoTools: 2.6-SNAPSHOT. > > Give us some feedback and we can turn more of this into examples and > docs for the GeoTools site. > > Michael > > import com.vividsolutions.jts.geom.Coordinate; > import com.vividsolutions.jts.geom.Geometry; > import com.vividsolutions.jts.geom.GeometryFactory; > import com.vividsolutions.jts.geom.Point; > import java.awt.Color; > import java.util.HashMap; > import java.util.Map; > import org.geotools.factory.CommonFactoryFinder; > import org.geotools.feature.FeatureCollection; > import org.geotools.feature.FeatureCollections; > import org.geotools.feature.simple.SimpleFeatureBuilder; > import org.geotools.feature.simple.SimpleFeatureTypeBuilder; > import org.geotools.map.DefaultMapContext; > import org.geotools.map.DefaultMapLayer; > import org.geotools.map.MapContext; > import org.geotools.map.MapLayer; > import org.geotools.referencing.crs.DefaultGeographicCRS; > import org.geotools.styling.FeatureTypeStyle; > import org.geotools.styling.Graphic; > import org.geotools.styling.Mark; > import org.geotools.styling.PointSymbolizer; > import org.geotools.styling.Rule; > import org.geotools.styling.Style; > import org.geotools.styling.StyleBuilder; > import org.geotools.swing.JMapFrame; > import org.opengis.feature.simple.SimpleFeature; > import org.opengis.feature.simple.SimpleFeatureType; > import org.opengis.filter.FilterFactory; > import org.opengis.referencing.crs.CoordinateReferenceSystem; > > > /** > * Demonstrates creating a feature type with a field that will be used to > * control point symbols for rendering the features > */ > > public class SpeciesStatus { > > public enum Status { > DISAPPEARED(1, Color.BLACK), > SURE(2, Color.GREEN), > UNSURE(3, Color.CYAN), > UNKNOWN(4, Color.GRAY); > > /* a map for reverse lookup */ > private static Map<Integer, Status> lookup; > static { > lookup = new HashMap<Integer, Status>(); > for (Status status : Status.values()) { > lookup.put(status.getCode(), status); > } > } > > private int code; > private Color color; > > private Status(int code, Color color) { > this.code = code; > this.color = color; > } > > public int getCode() { > return code; > } > > public Color getColor() { > return color; > } > > public static Status get(int code) { > return lookup.get(code); > } > } > > private CoordinateReferenceSystem crs; > private SimpleFeatureType featureType; > private SimpleFeatureBuilder featureBuilder; > private GeometryFactory geomFactory; > > private FeatureCollection<SimpleFeatureType, SimpleFeature> > featureColl; > private Style style; > > > public SpeciesStatus(CoordinateReferenceSystem crs) { > this.crs = crs; > this.featureColl = FeatureCollections.newCollection(); > > createFeatureType(); > createStyle(); > } > > private void createFeatureType() { > SimpleFeatureTypeBuilder builder = new SimpleFeatureTypeBuilder(); > builder.setName("species_rec"); > builder.setCRS(crs); > builder.add("the_geom", Point.class); // geometry field > builder.add("speciesId", String.class); // alpha-numeric ID for > species > builder.add("status", Integer.class); // integer status code > > featureType = builder.buildFeatureType(); > } > > /** > * Create a Style with a Rule for each of the Status values > * that we want to render as different symbols > */ > public void createStyle() { > FilterFactory ff = CommonFactoryFinder.getFilterFactory2(null); > StyleBuilder sb = new StyleBuilder(); > > Rule[] rules = new Rule[Status.values().length]; > > int k = 0; > for (Status status : Status.values()) { > > Graphic graphic = sb.createGraphic(); > > // remove the default symbol (a bit clunky) > graphic.graphicalSymbols().clear(); > > // create a new symbol > Mark mark = sb.createMark(StyleBuilder.MARK_CIRCLE, > status.getColor()); > graphic.graphicalSymbols().add(mark); > > // our point symbolizer to use this symbol > PointSymbolizer sym = sb.createPointSymbolizer(graphic); > > // a rule that will select features to render with this status > value > Rule rule = sb.createRule(sym); > rule.setFilter(ff.equals(ff.property("status"), > ff.literal(status.getCode()))); > rules[k++] = rule; > } > > // put all our rules together in a FeatureTypeStyle > FeatureTypeStyle fts = > sb.createFeatureTypeStyle(featureType.getTypeName(), rules); > > this.style = sb.createStyle(); > style.featureTypeStyles().add(fts); > } > > /** > * Add a new feature to out collection > * @param speciesId alpha-numeric species Id > * @param x location X coord (world) > * @param y location Y coord (world) > * @param status the species status category > */ > public void addFeature(String speciesId, double x, double y, > Status status) { > if (geomFactory == null) { > geomFactory = new GeometryFactory(); > } > > if (featureBuilder == null) { > featureBuilder = new SimpleFeatureBuilder(featureType); > } > > Geometry pos = geomFactory.createPoint(new Coordinate(x, y)); > > featureBuilder.add(pos); > featureBuilder.add(speciesId); > featureBuilder.add(status.getCode()); > > SimpleFeature feature = featureBuilder.buildFeature(null); > featureColl.add(feature); > } > > /** > * Run the demo (args are ignored) > */ > public static void main(String[] args) { > SpeciesStatus me = new SpeciesStatus(DefaultGeographicCRS.WGS84); > me.demo(); > } > > /** > * Demo: creates a few features with different Status values > * and adds them to the FeaureCollection. Then displays them > * as a map. > */ > private void demo() { > addFeature("lynx", 2.0, 41.0, Status.UNKNOWN); > addFeature("bear", 3.0, 42.0, Status.SURE); > addFeature("bear", 3.5, 41.5, Status.DISAPPEARED); > addFeature("yeti", 2.5, 42.5, Status.UNSURE); > > MapContext map = new DefaultMapContext(crs); > map.setTitle("Species status"); > > MapLayer layer = new DefaultMapLayer(featureColl, style); > map.addLayer(layer); > > JMapFrame.showMap(map); > } > > } > > ------------------------------------------------------------------------------ > Let Crystal Reports handle the reporting - Free Crystal Reports 2008 > 30-Day > trial. Simplify your report design, integration and deployment - and focus > on > what you do best, core application coding. Discover what's new with > Crystal Reports now. http://p.sf.net/sfu/bobj-july > _______________________________________________ > Geotools-gt2-users mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users > > -- View this message in context: http://n2.nabble.com/Should-I-use-a-Polygon-or-a-Mark-tp3596800p3616875.html Sent from the geotools-gt2-users mailing list archive at Nabble.com. ------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july _______________________________________________ Geotools-gt2-users mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users
