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