LabelCacheImpl(?) generates invalid LineString, due to lack of precision
------------------------------------------------------------------------

                 Key: GEOT-2633
                 URL: http://jira.codehaus.org/browse/GEOT-2633
             Project: GeoTools
          Issue Type: Bug
          Components: core render
            Reporter: Daniel Caldeweyher
            Assignee: Andrea Aime
            Priority: Minor


Using latest trunk version of geotools (2.6-snapshot) and geoserver.

I am trying to render elevation lines similar to Google Maps; regular lines and 
darker, labelled lines for elevations that are multiples of 100m. In order to 
have nice looking, repeated lables along the elevation line (several longer and 
shorter line segments) i specified:

<VendorOption name="repeat">300</VendorOption>
<VendorOption name="group">yes</VendorOption>
<VendorOption name="labelAllGroup">true</VendorOption>

Due to this, several lines have to be merged as part of the labelling. However, 
the LabelCacheImpl appears to be generating invalid LineString during merging:

Issues painting 200m
java.lang.ArrayIndexOutOfBoundsException: 1
        at 
com.vividsolutions.jts.operation.linemerge.LineMergeGraph.addEdge(LineMergeGraph.java:64)
        at 
com.vividsolutions.jts.operation.linemerge.LineMerger.add(LineMerger.java:101)
        at 
com.vividsolutions.jts.operation.linemerge.LineMerger.access$000(LineMerger.java:64)
        at 
com.vividsolutions.jts.operation.linemerge.LineMerger$1.filter(LineMerger.java:79)
        at com.vividsolutions.jts.geom.LineString.apply(LineString.java:275)
        at 
com.vividsolutions.jts.operation.linemerge.LineMerger.add(LineMerger.java:76)
        at 
com.vividsolutions.jts.operation.linemerge.LineMerger.add(LineMerger.java:94)
        at 
org.geotools.renderer.label.LabelCacheImpl.mergeLines(LabelCacheImpl.java:1454)
        at 
org.geotools.renderer.label.LabelCacheImpl.getLineSetRepresentativeLocation(LabelCacheImpl.java:1183)
        at 
org.geotools.renderer.label.LabelCacheImpl.paintLineLabels(LabelCacheImpl.java:679)
        at 
org.geotools.renderer.label.LabelCacheImpl.paintLabels(LabelCacheImpl.java:571)
        at 
org.geotools.renderer.label.LabelCacheImpl.end(LabelCacheImpl.java:508)
        at 
org.geotools.renderer.shape.ShapefileRenderer.paint(ShapefileRenderer.java:1433)
        at 
org.geotools.renderer.shape.ShapefileRenderer.paint(ShapefileRenderer.java:270)
        at 
org.vfny.geoserver.wms.responses.DefaultRasterMapProducer.produceMap(DefaultRasterMapProducer.java:382)
        at 
org.vfny.geoserver.wms.responses.GetMapResponse.execute(GetMapResponse.java:421)
        at 
org.geoserver.ows.adapters.ResponseAdapter.getMimeType(ResponseAdapter.java:48)
        at org.geoserver.ows.Dispatcher.response(Dispatcher.java:690)
        at 
org.geoserver.ows.Dispatcher.handleRequestInternal(Dispatcher.java:216)

The lineString (as generated by LabelCacheImpl) passed into 
LineMergeGraph.addEdge is:

LINESTRING (359.6868163854815 314.3826565433992, 359.6868163854815 
314.3826565433992)

which, after CoordinateArrays.removeRepeatedPoints, of course produces an array 
of just one element causing the ArrayIndexOutOfBoundsException.

I am not sure if the code that generates the invalid Linestring (start and end 
point being the same) is in LabelCacheImpl or ShapefileRenderer or somewhere in 
between, because, by the time LabelCacheImpl.end is called, the LabelCacheItem 
already contains the invalid Linestring in its geoms field.

The problem appears to be caused by rounding or lack of precision, as I am able 
to render the label correctly when I filter out very short elevation lines, 
e.g. shorter than 5m, such as

MULTILINESTRING((152.858333333333 -27.5025008005123,152.858332466181 
-27.5025,152.858333333333 -27.5024995042633,152.858334279228 
-27.5025,152.858333333333 -27.5025008005123))

Hope this information helps in tracking down the bug.


-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

------------------------------------------------------------------------------
_______________________________________________
Geotools-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geotools-devel

Reply via email to