WMS Render bug for lat-lon short line segments
----------------------------------------------
Key: GEOS-3845
URL: http://jira.codehaus.org/browse/GEOS-3845
Project: GeoServer
Issue Type: Bug
Components: WMS
Affects Versions: 2.0.1
Environment: Windows 32
Reporter: Bryan Hall
Assignee: Andrea Aime
It appears that the WMS render engine has a problem with "short" lines (or "sort" lines in multi-line objects) that cause it to crash on the 2.0.1 general release version for lat-lon coordinate sets.
My assumption is that somewhere a Java float instead of double to track co-ordinate values, and in lat/lon space co-ordinate values round down to the same value and cause the crash. This assumption is based on my filtering line items based on length from Oracle Spatial which are used to feed a WMS session.
Where this first raised it's head was with a Google tile cache (GWC) pulling WMS from Geoserver. I noticed that if the same data was rendered for via WMS for a 256x256 tile it would work at certain lengths (around 3M). Then when GWC pulled the same area, I needed to bump that up. Then I asked WMS to render a 1024x1024 (4x4) map and found that I needed to change the minimum length to about 13M. So size of the map image also influences the minimum length of the line required before a crash occurs.
So for now I have to have only allow simple lines (singles not multi) and only lines longer than 13 Meters for WMS rendering. Of course this means I am missing a fair number of these shorter objects altogether.
I found this with Google, looks like roughly the same issue (although here it had to do with labels):
http://jira.codehaus.org/browse/GEOT-2633
An example coordinate set that causes problems would be:
-157.940306633969, 21.3415366074692, -157.940311501296, 21.3415269987382 (about 1.17M)
Here is the stack trace from the logs:
2010-03-03 16:22:07,825 ERROR [geotools.rendering] -
java.lang.ArrayIndexOutOfBoundsException
2010-03-03 16:22:07,825 ERROR [geoserver.ows] -
org.vfny.geoserver.wms.WmsException: org.vfny.geoserver.wms.WmsException: Rendering process failed
at org.vfny.geoserver.wms.responses.GetMapResponse.execute(GetMapResponse.java:442)
at org.geoserver.ows.adapters.ResponseAdapter.getMimeType(ResponseAdapter.java:48)
at org.geoserver.ows.Dispatcher.response(Dispatcher.java:712)
at org.geoserver.ows.Dispatcher.handleRequestInternal(Dispatcher.java:233)
at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)
at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:875)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:809)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:501)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at com.evermind.server.http.ResourceFilterChain.doFilter(ResourceFilterChain.java:64)
at org.vfny.geoserver.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108)
at com.evermind.server.http.EvermindFilterChain.doFilter(EvermindFilterChain.java:15)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:265)
at org.acegisecurity.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:107)
at org.acegisecurity.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:72)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.ui.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:124)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.ui.basicauth.BasicProcessingFilter.doFilter(BasicProcessingFilter.java:174)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:149)
at org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98)
at com.evermind.server.http.EvermindFilterChain.doFilter(EvermindFilterChain.java:17)
at org.geoserver.filters.LoggingFilter.doFilter(LoggingFilter.java:73)
at com.evermind.server.http.EvermindFilterChain.doFilter(EvermindFilterChain.java:17)
at org.geoserver.filters.ReverseProxyFilter.doFilter(ReverseProxyFilter.java:183)
at com.evermind.server.http.EvermindFilterChain.doFilter(EvermindFilterChain.java:17)
at org.geoserver.filters.GZIPFilter.doFilter(GZIPFilter.java:41)
at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:619)
at com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:368)
at com.evermind.server.http.HttpRequestHandler.doProcessRequest(HttpRequestHandler.java:866)
at com.evermind.server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:448)
at com.evermind.server.http.HttpRequestHandler.serveOneRequest(HttpRequestHandler.java:216)
at com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:117)
at com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:110)
at oracle.oc4j.network.ServerSocketReadHandler$SafeRunnable.run(ServerSocketReadHandler.java:260)
at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:303)
at java.lang.Thread.run(Unknown Source)
Caused by: org.vfny.geoserver.wms.WmsException: Rendering process failed
at org.vfny.geoserver.wms.responses.DefaultRasterMapProducer.produceMap(DefaultRasterMapProducer.java:412)
at org.vfny.geoserver.wms.responses.GetMapResponse.execute(GetMapResponse.java:421)
... 44 more
Caused by: java.lang.Exception: Error rendering feature
at org.geotools.renderer.lite.StreamingRenderer.drawOptimized(StreamingRenderer.java:1862)
at org.geotools.renderer.lite.StreamingRenderer.processStylers(StreamingRenderer.java:1770)
at org.geotools.renderer.lite.StreamingRenderer.paint(StreamingRenderer.java:690)
at org.geotools.renderer.shape.ShapefileRenderer.renderWithStreamingRenderer(ShapefileRenderer.java:1518)
at org.geotools.renderer.shape.ShapefileRenderer.paint(ShapefileRenderer.java:1366)
at org.geotools.renderer.shape.ShapefileRenderer.paint(ShapefileRenderer.java:269)
at org.vfny.geoserver.wms.responses.DefaultRasterMapProducer.produceMap(DefaultRasterMapProducer.java:388)
... 45 more
Caused by: java.lang.ArrayIndexOutOfBoundsException
--
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