Hi Christian:

We are entering a very busy time of year (leading up to the foss4g conference); 
so many of the developers will be unavailable except to their paying customers.

Andrea did offer to look at this issue for you ... here is how you can help him 
do so:
- create a jira issue
- attach your program below (if it can be used to reproduce the problem)
- include a sample shapefile (or properties file) with some data so the issue 
can be shown and debugged

It is one of the cases where you (who have the problem) are in a much better 
position to reproduce it then us on the development team.  While the developers 
can sometimes spare a couple of hours to work on the really well defined issues 
(reproducible as above; or with a patch and test case) it is unwise for us to 
promise anything timely. Failing that; if you are approaching a deadline or 
something; please consider looking at the opengeo support page; or walk through 
the problem yourself with the debugger and see if you can produce a patch?

You are creating a point and a text symbolizer (so that works around one issue 
that was reported). I really recommend you look at text symbolizer that is 
produced in the debugger to see if has all the fields field in the way you 
expect? I don't always trust the factory methods to work as I personally expect 
them to.

Cheers,
Jody

On 21/06/2010, at 6:12 PM, Christian Dubray wrote:

> Hi,
> 
> Okay, no answer until now. So I have to remind it, sorry ;)
> This should be a geotools-bug, or? Is it possible that it will be fixed or 
> should I do without the TextSymbolizer2?
> 
> Thank you very much.
> 
> -----Ursprüngliche Nachricht-----
> Von: Christian Dubray [mailto:[email protected]] 
> Gesendet: Dienstag, 4. Mai 2010 11:51
> An: Andrea Aime
> Cc: [email protected]
> Betreff: Re: [Geotools-gt2-users] Problem with the LabelShiel-hack of 
> TextSymbolizer2
> 
> Hi,
> 
> Sorry, I thought maybe you see directly a fault in my code.
> Here is (a complete new) code now, where the failure still exists. If you 
> start the program, you will directly see the problem. I hope the code is 
> clear enough.
> 
> 
> import java.awt.*;
> import java.util.HashMap;
> import java.util.Map;
> import javax.swing.JFrame;
> import org.geotools.data.FeatureSource;
> import org.geotools.data.memory.MemoryDataStore;
> import org.geotools.factory.CommonFactoryFinder;
> import org.geotools.feature.AttributeTypeFactory;
> import org.geotools.feature.FeatureTypeBuilder;
> import org.geotools.feature.simple.SimpleFeatureBuilder;
> import org.geotools.map.*;
> import org.geotools.referencing.crs.DefaultGeographicCRS;
> import org.geotools.renderer.GTRenderer;
> import org.geotools.renderer.lite.StreamingRenderer;
> import org.geotools.styling.*;
> import org.geotools.styling.Font;
> import org.geotools.styling.Stroke;
> import org.opengis.feature.simple.SimpleFeature;
> import org.opengis.feature.simple.SimpleFeatureType;
> import org.opengis.filter.FilterFactory;
> import com.vividsolutions.jts.geom.*;
> import com.vividsolutions.jts.geom.Point;
> 
> public class GeoToolsTest extends JFrame
> {
> 
>  public static void main(String[] args) throws Exception
>  {
>    new GeoToolsTest().test();
> 
>  }
> 
>  private GTRenderer renderer = new StreamingRenderer();
>  private MapContext context;
> 
>  public void test() throws Exception
>  {
>    GeometryFactory geomFac = new GeometryFactory();
>    String myFeatureName = "myTestFeature";
>    FeatureTypeBuilder featureBuilder = 
> FeatureTypeBuilder.newInstance(myFeatureName);
>    featureBuilder.setName(myFeatureName);
>    featureBuilder.addType(AttributeTypeFactory.newAttributeType("geometry", 
> Point.class, true, Integer.MAX_VALUE, null, DefaultGeographicCRS.WGS84));
> 
>    SimpleFeatureType pointType = featureBuilder.getFeatureType();
>    MemoryDataStore storeWithShield = new MemoryDataStore();
>    storeWithShield.createSchema(pointType);
>    FeatureSource<SimpleFeatureType, SimpleFeature> sourceWithShield = 
> storeWithShield.getFeatureSource(myFeatureName);
> 
>    MemoryDataStore storeWithoutShield = new MemoryDataStore();
>    storeWithoutShield.createSchema(pointType);
>    FeatureSource<SimpleFeatureType, SimpleFeature> sourceWithoutShield = 
> storeWithoutShield.getFeatureSource(myFeatureName);
> 
>    SimpleFeature pointFeature;
> 
>    // create Features for testing shields (are shown at bottom by starting 
> the program)
>    Coordinate c = new Coordinate(30, 50);
>    Point point = geomFac.createPoint(c);
>    pointFeature = SimpleFeatureBuilder.build(pointType, new Object[] {point}, 
> "id0");
>    storeWithShield.addFeature(pointFeature);
>    c = new Coordinate(80, 50);
>    point = geomFac.createPoint(c);
>    pointFeature = SimpleFeatureBuilder.build(pointType, new Object[] {point}, 
> "id1");
>    storeWithShield.addFeature(pointFeature);
> 
>    // create features for tests without shields (are shown on top by starting 
> the program)
>    c = new Coordinate(30, 80);
>    point = geomFac.createPoint(c);
>    pointFeature = SimpleFeatureBuilder.build(pointType, new Object[] {point}, 
> "id0");
>    storeWithoutShield.addFeature(pointFeature);
>    c = new Coordinate(80, 80);
>    point = geomFac.createPoint(c);
>    pointFeature = SimpleFeatureBuilder.build(pointType, new Object[] {point}, 
> "id1");
>    storeWithoutShield.addFeature(pointFeature);
> 
>    DefaultMapLayer shieldLayer = new DefaultMapLayer(sourceWithShield, 
> getStyle(true), "shieldLayer");
>    DefaultMapLayer withoutShieldLayer = new 
> DefaultMapLayer(sourceWithoutShield, getStyle(false), "withoutShieldLayer");
>    context = new DefaultMapContext();
>    context.setCoordinateReferenceSystem(DefaultGeographicCRS.WGS84);
>    context.addLayer(shieldLayer);
>    context.addLayer(withoutShieldLayer);
>    context.setAreaOfInterest(new com.vividsolutions.jts.geom.Envelope(new 
> Coordinate(0, 0), new Coordinate(100, 100)));
> 
>    renderer.setContext(context);
>    RenderingHints hints = new RenderingHints(RenderingHints.KEY_ANTIALIASING, 
> RenderingHints.VALUE_ANTIALIAS_ON);
>    renderer.setJava2DHints(hints);
>    Map rendererParams = new HashMap();
>    this.setSize(500, 500);
>    this.setVisible(true);
>  }
> 
>  @Override
>  public void paint(Graphics g)
>  {
>    g.setColor(Color.white);
>    g.fillRect(0, 0, this.getWidth(), this.getHeight());
>    renderer.paint((Graphics2D) g, new Rectangle(0, 0, this.getWidth(), 
> this.getHeight()), context.getAreaOfInterest());
>  }
> 
>  private Style getStyle(boolean withShield) throws Exception
>  {
> 
>    StyleFactory styleFactory = CommonFactoryFinder.getStyleFactory(null);
>    FilterFactory filterFactory = CommonFactoryFinder.getFilterFactory(null);
>    double fontSize = 12;
>    String fontName = "Arial";
> 
>    Font gtFont = styleFactory.createFont(filterFactory.literal(fontName), 
> filterFactory.literal(Font.Style.NORMAL), 
> filterFactory.literal(Font.Weight.NORMAL),
>      filterFactory.literal(fontSize));
>    Fill fill = styleFactory.createFill(filterFactory.literal("#000000"), 
> filterFactory.literal(1));
> 
>    AnchorPoint ap = 
> styleFactory.createAnchorPoint(filterFactory.literal(0.5), 
> filterFactory.literal(0.0));
>    Displacement dp = 
> styleFactory.createDisplacement(filterFactory.literal(0.0), 
> filterFactory.literal(20.0));
>    LabelPlacement placement = styleFactory.createPointPlacement(ap, dp, 
> filterFactory.literal(0.0));
> 
>    Stroke stroke = 
> styleFactory.createStroke(filterFactory.literal(Color.black), 
> filterFactory.literal(1.0), filterFactory.literal(1.0f));
>    Fill fillBg = styleFactory.createFill(filterFactory.literal(Color.white), 
> filterFactory.literal(0.0));
>    Mark mark = 
> styleFactory.createMark(filterFactory.literal(styleFactory.getCircleMark()), 
> stroke, fillBg, filterFactory.literal(1), filterFactory
>      .literal(0.0));
> 
> 
>    String addText;
>    if (withShield) {
>      addText = "\n(with Shield)";
>    }
>    else {
>      addText = "\n(without Shield)";
>    }
>    TextSymbolizer2 textSymbolizer = (TextSymbolizer2) 
> styleFactory.createTextSymbolizer(fill, new Font[] {gtFont}, null, 
> filterFactory
>      .literal("This is aaaaaaaaaaaaaaaa Test"+addText), placement, null);
>    textSymbolizer.setGeometryPropertyName("geometry");
>    if (withShield)
>    {
>      Graphic shield = styleFactory.createGraphic(null, new Mark[] {mark}, 
> null, null, filterFactory.literal(50), filterFactory.literal(0.0));
>      textSymbolizer.setGraphic(shield);
>    }
> 
>    PointSymbolizer pointSymbolizer = styleFactory.createPointSymbolizer();
>    Graphic graphic = styleFactory.createGraphic(null, null, new Symbol[] 
> {styleFactory.getCircleMark()}, filterFactory.literal(1), filterFactory
>      .literal(filterFactory.property("size")), filterFactory.literal(0));
>    pointSymbolizer.setGraphic(graphic);
> 
>    Rule rule = styleFactory.createRule();
>    rule.symbolizers().add(textSymbolizer);
>    rule.symbolizers().add(pointSymbolizer);
>    FeatureTypeStyle fts = styleFactory.createFeatureTypeStyle();
>    fts.rules().add(rule);
>    StyleBuilder sb = new StyleBuilder();
>    Style style = sb.createStyle();
>    style.addFeatureTypeStyle(fts);
>    return style;
>  }
> }
> 
> 
> 
> 
> Cheers, 
> Christian
> 
> 
> 
> 
> -----Ursprüngliche Nachricht-----
> Von: Andrea Aime [mailto:[email protected]] 
> Gesendet: Freitag, 30. April 2010 11:12
> An: Christian Dubray
> Cc: [email protected]
> Betreff: Re: AW: [Geotools-gt2-users] Problem with the LabelShiel-hack of 
> TextSymbolizer2
> 
> Christian Dubray ha scritto:
>> Thanks for you help.
>> 
>> Here the reduced code, where the fault still exists.
>> I´ve changed some attributes, but there is always the same problem. The 
>> labels are filtered out in paintPointLabelInternal(...) of LabelCacheImpl. 
>> displayArea.contains(transformed) returns false.
>> 
>> AnchorPoint ap = styleFactory.createAnchorPoint(filterFactory.literal(0.5), 
>> filterFactory.literal(0.0));
>> Displacement dp = 
>> styleFactory.createDisplacement(filterFactory.literal(0.0), 
>> filterFactory.literal(-20.0));
>> LabelPlacement placement = styleFactory.createPointPlacement(ap, dp, 
>> filterFactory.literal(0.0));
>> Fill bgFill = styleFactory.createFill(filterFactory.literal(bgColor), 
>> filterFactory.literal(1));
>> Stroke stroke = 
>> styleFactory.createStroke(filterFactory.literal(Color.black), 
>> filterFactory.literal(1.0), filterFactory.literal(1.0f));
>> Fill fillBg = styleFactory.createFill(filterFactory.literal(bgColor), 
>> filterFactory.literal(1.0));
>> Graphic graphicBg = styleFactory.createGraphic(null, new Mark[] 
>> {StyleFactoryFinder.createStyleFactory().getCrossMark()}, null, null, 
>> filterFactory.literal(20), filterFactory
>> TextSymbolizer2 textSymbolizer = (TextSymbolizer2) 
>> styleFactory.createTextSymbolizer(fill, new Font[] {gtFont}, null, 
>> filterFactory.literal("This is a test"), placement, null);
>> textSymbolizer.setGeometryPropertyName("geometry");
>> textSymbolizer.setGraphic(graphicBg);
>> 
>> As I said, to the right side all works correct. Only the left side makes the 
>> problems. Depending on the length of the label, the label is hided earlier 
>> although there would be enough place to show it. But the label-bounds seem 
>> to be calculated correct.
> 
> Sorry, can't use the above.
> I will be pleased to have a look if, as said before, you provide
> me with "a data set and a little self
> contained program that shows the behaviour you deem to be unsatisfactory".
> 
> That means a full runnable java file with a main that will
> draw a map showing the issue along with the data set
> that makes the problem occur.
> I don't have time to replicate the issue by myself.
> 
> Cheers
> Andrea
> 
> 
> 
> -- 
> Andrea Aime
> OpenGeo - http://opengeo.org
> Expert service straight from the developers.
> 
> ------------------------------------------------------------------------------
> _______________________________________________
> Geotools-gt2-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users
> 
> ------------------------------------------------------------------------------
> ThinkGeek and WIRED's GeekDad team up for the Ultimate 
> GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the 
> lucky parental unit.  See the prize list and enter to win: 
> http://p.sf.net/sfu/thinkgeek-promo
> _______________________________________________
> Geotools-gt2-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users


------------------------------------------------------------------------------
ThinkGeek and WIRED's GeekDad team up for the Ultimate 
GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the 
lucky parental unit.  See the prize list and enter to win: 
http://p.sf.net/sfu/thinkgeek-promo
_______________________________________________
Geotools-gt2-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users

Reply via email to