Linestring data type containing 1 point causes errors
-----------------------------------------------------

                 Key: GEOS-1962
                 URL: http://jira.codehaus.org/browse/GEOS-1962
             Project: GeoServer
          Issue Type: Bug
          Components: PostGIS
    Affects Versions: 1.6.0-RC1
            Reporter: Tyler Erickson
            Assignee: Andrea Aime


I have a PostGIS view that constructs lines from a series of points using the 
ST_makeline function.   If the series of points happens to be a single point, 
GeoServer throws errors when the featuretype is requsted.

-------------- Example View that constructs a Linestring from a series of point 
geometries ---------
CREATE OR REPLACE VIEW v_vehicle_lines AS 
 SELECT obs.vehicleid, obs.obs_date, count(obs.vehicleid) AS obs_count, 
min(obs.datestamp) AS min_time, max(obs.datestamp) AS max_time, 
(max(obs.datestamp) - min(obs.datestamp))::time without time zone AS 
elapsed_time, st_makeline(obs.geom) AS route_geom
   FROM ( SELECT v_truck_obs.vehicleid, v_truck_obs.datestamp, 
date_trunc('day'::text, v_truck_obs.datestamp) AS obs_date, v_truck_obs.geom
           FROM v_truck_obs
          ORDER BY v_truck_obs.datestamp) obs
  GROUP BY obs.vehicleid, obs.obs_date
  ORDER BY obs.vehicleid, obs.obs_date;


-----  ERRORS thrown ----------

02 Jun 15:17:07 WARN [org.geoserver.ows] - 
java.io.IOException
        at 
org.vfny.geoserver.wms.responses.map.kml.KMZMapProducer.writeTo(KMZMapProducer.java:133)
        at 
org.vfny.geoserver.wms.responses.GetMapResponse.writeTo(GetMapResponse.java:561)
        at 
org.geoserver.ows.adapters.ResponseAdapter.write(ResponseAdapter.java:60)
        at org.geoserver.ows.Dispatcher.response(Dispatcher.java:608)
        at 
org.geoserver.ows.Dispatcher.handleRequestInternal(Dispatcher.java:192)
        at 
org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:139)
        at 
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:44)
        at 
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:684)
        at 
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:625)
        at 
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:392)
        at 
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:347)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
        at 
org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:459)
        at 
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1054)
        at 
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:264)
        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:274)
        at 
org.acegisecurity.ui.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:110)
        at 
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
        at 
org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125)
        at 
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
        at 
org.acegisecurity.ui.basicauth.BasicProcessingFilter.doFilter(BasicProcessingFilter.java:178)
        at 
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
        at 
org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:229)
        at 
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
        at 
org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:148)
        at 
org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98)
        at 
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1045)
        at 
org.vfny.geoserver.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108)
        at 
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1045)
        at 
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:358)
        at 
org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:231)
        at 
org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:629)
        at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:453)
        at 
org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:149)
        at 
org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:123)
        at 
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:141)
        at org.mortbay.jetty.Server.handle(Server.java:303)
        at 
org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:452)
        at 
org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:721)
        at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:509)
        at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:209)
        at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:349)
        at 
org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:320)
        at 
org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:475)
Caused by: javax.xml.transform.TransformerException: Translator error
        at 
org.geotools.xml.transform.TransformerBase.transform(TransformerBase.java:132)
        at 
org.geotools.xml.transform.TransformerBase.transform(TransformerBase.java:107)
        at 
org.vfny.geoserver.wms.responses.map.kml.KMZMapProducer.writeTo(KMZMapProducer.java:130)
        ... 46 more
Caused by: java.util.NoSuchElementException: Could not obtain the next 
feature:org.geotools.data.DataSourceException: An exception occurred while 
parsing WKB data
        at 
org.geotools.data.store.FeatureReaderIterator.next(FeatureReaderIterator.java:67)
        at 
org.geotools.feature.collection.DelegateFeatureIterator.next(DelegateFeatureIterator.java:54)
        at 
org.geotools.data.crs.ForceCoordinateSystemIterator.next(ForceCoordinateSystemIterator.java:120)
        at 
org.geotools.feature.collection.DelegateFeatureIterator.next(DelegateFeatureIterator.java:54)
        at 
org.vfny.geoserver.wms.responses.map.kml.KMLVectorTransformer$KMLTranslator.encode(KMLVectorTransformer.java:266)
        at 
org.vfny.geoserver.wms.responses.map.kml.KMLVectorTransformer$KMLTranslator.encode(KMLVectorTransformer.java:241)
        at 
org.vfny.geoserver.wms.responses.map.kml.KMLTransformer$KMLTranslator.encodeVectorLayer(KMLTransformer.java:190)
        at 
org.vfny.geoserver.wms.responses.map.kml.KMLTransformer$KMLTranslator.encode(KMLTransformer.java:126)
        at 
org.geotools.xml.transform.TransformerBase$XMLReaderSupport.parse(TransformerBase.java:702)
        at 
org.apache.xalan.transformer.TransformerIdentityImpl.transform(TransformerIdentityImpl.java:484)
        at 
org.geotools.xml.transform.TransformerBase$Task.run(TransformerBase.java:295)
        at 
org.geotools.xml.transform.TransformerBase.transform(TransformerBase.java:128)
        ... 48 more
Caused by: org.geotools.data.DataSourceException: An exception occurred while 
parsing WKB data
        at 
org.geotools.data.postgis.attributeio.PgWKBAttributeIO.WKB2Geometry(PgWKBAttributeIO.java:113)
        at 
org.geotools.data.postgis.attributeio.PgWKBAttributeIO.read(PgWKBAttributeIO.java:184)
        at org.geotools.data.jdbc.QueryData.read(QueryData.java:212)
        at 
org.geotools.data.jdbc.JDBCFeatureReader.readFeature(JDBCFeatureReader.java:107)
        at 
org.geotools.data.jdbc.JDBCFeatureReader.next(JDBCFeatureReader.java:88)
        at 
org.geotools.data.store.FeatureReaderIterator.next(FeatureReaderIterator.java:64)
        ... 59 more
Caused by: java.lang.IllegalArgumentException: point array must contain 0 or >1 
elements
        at com.vividsolutions.jts.geom.LineString.init(LineString.java:83)
        at com.vividsolutions.jts.geom.LineString.<init>(LineString.java:74)
        at 
com.vividsolutions.jts.geom.GeometryFactory.createLineString(GeometryFactory.java:470)
        at 
com.vividsolutions.jts.io.WKBReader.readLineString(WKBReader.java:210)
        at com.vividsolutions.jts.io.WKBReader.readGeometry(WKBReader.java:171)
        at com.vividsolutions.jts.io.WKBReader.read(WKBReader.java:137)
        at com.vividsolutions.jts.io.WKBReader.read(WKBReader.java:118)
        at 
org.geotools.data.postgis.attributeio.PgWKBAttributeIO.WKB2Geometry(PgWKBAttributeIO.java:111)
        ... 64 more




--------------Work around--------------------
The errors can be avoided by creating a view that only returns Linestring 
geometries where the number of points is greater than 1, and basing then create 
the GeoServer featuretype using this view.

CREATE OR REPLACE VIEW geoserver.v_vehicle_trip AS 
SELECT vehicleid, roi_id, vehicle_trip_no, num_obs, datestamp_start, 
       datestamp_end, geom
  FROM v_vehicle_trip
WHERE ST_NumPoints("geom")>1;



-- 
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

        

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Geoserver-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geoserver-devel

Reply via email to