Hi everyone,

First time posting here, thank you for your understanding if I am not 
explaining my situation well.

I've been trying to use the built-in gs:Clip to extract some public layers 
based on a polygon defined by coordinates. The process seemed to work well with 
a couple of layers until I tried it with one particular layer.

Here's the xml in the POST request:

<?xml version="1.0" encoding="UTF-8"?><wps:Execute version="1.0.0" 
service="WPS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xmlns="http://www.opengis.net/wps/1.0.0"; xmlns:wfs="http://www.opengis.net/wfs"; 
xmlns:wps="http://www.opengis.net/wps/1.0.0"; 
xmlns:ows="http://www.opengis.net/ows/1.1"; 
xmlns:gml="http://www.opengis.net/gml"; xmlns:ogc="http://www.opengis.net/ogc"; 
xmlns:wcs="http://www.opengis.net/wcs/1.1.1"; 
xmlns:xlink="http://www.w3.org/1999/xlink"; 
xsi:schemaLocation="http://www.opengis.net/wps/1.0.0 
http://schemas.opengis.net/wps/1.0.0/wpsAll.xsd";>
  <ows:Identifier>gs:Clip</ows:Identifier>
  <wps:DataInputs>
    <wps:Input>
      <ows:Identifier>features</ows:Identifier>
      <wps:Reference mimeType="application/json" 
xlink:href="http://openmaps.gov.bc.ca/geo/pub/ows?service=WFS&amp;version=2.0.0&amp;request=GetFeature&amp;typeName=WHSE_CADASTRE.PMBC_PARCEL_FABRIC_POLY_SVW&amp;outputFormat=json&amp;bbox=715319.37219999917,1028613.3681000005,735025.99269999936,1041407.1950000003";
 method="GET"/>
    </wps:Input>
    <wps:Input>
      <ows:Identifier>clip</ows:Identifier>
      <wps:Data>
        <wps:ComplexData 
mimeType="application/json"><![CDATA[{"type":"Polygon","coordinates":[[[715354.52820000052,1040603.9793999996],[715319.37219999917,1028613.3681000005],[734339.38680000044,1027297.6436000001],[735025.99269999936,1041407.1950000003],[715354.52820000052,1040603.9793999996]]]}]]></wps:ComplexData>
      </wps:Data>
    </wps:Input>
  </wps:DataInputs>
  <wps:ResponseForm>
    <wps:RawDataOutput mimeType="application/json">
      <ows:Identifier>result</ows:Identifier>
    </wps:RawDataOutput>
  </wps:ResponseForm>
</wps:Execute>

In this case, a TopologyException was thrown (the stack trace is attached in 
the email):

org.locationtech.jts.geom.TopologyException: found non-noded intersection 
between LINESTRING ( 737930.4267 1033205.5095, 737925.915 1033208.5901 ) and 
LINESTRING ( 737933.8941 1033203.0284, 737930.4267 1033205.5095 ) [ 
(737930.4267, 1033205.5095, NaN) ]

I'm using Geoserver 2.20.2, GeoTools 26.2 and WPS 1.0.0.

I have searched about this issue and learned that this is caused by invalid 
geometry which was explained here:
https://locationtech.github.io/jts/jts-faq.html#D1

Then I tried to create a customized WPS that 'clean' the input either using 
buffer(0) or the GeometryFixer in JTS before sending it to the clip process but 
neither of them solved the issue.

I have exhausted my solutions to this problem and I'm wondering if anyone have 
encountered a similar issue before? May I have some suggestions about what to 
look for next?

Thank you very much!

Regards,

Oscar
2022-03-23 12:34:11,744 ERROR [geoserver.ows] - 
org.geoserver.wps.WPSException: An error occurred while encoding the results of 
the process
        at 
org.geoserver.wps.response.ExecuteProcessResponse.writeComplex(ExecuteProcessResponse.java:232)
        at 
org.geoserver.wps.response.ExecuteProcessResponse.write(ExecuteProcessResponse.java:195)
        at org.geoserver.ows.Dispatcher.response(Dispatcher.java:1020)
        at 
org.geoserver.ows.Dispatcher.handleRequestInternal(Dispatcher.java:275)
        at 
org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:177)
        at 
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:52)
        at 
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)
        at 
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
        at 
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
        at 
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
        at 
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
        at 
org.eclipse.jetty.servlet.ServletHolder$NotAsync.service(ServletHolder.java:1452)
        at 
org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:791)
        at 
org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1626)
        at 
org.geoserver.filters.ThreadLocalsCleanupFilter.doFilter(ThreadLocalsCleanupFilter.java:28)
        at 
org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
        at 
org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
        at 
org.geoserver.filters.SpringDelegatingFilter$Chain.doFilter(SpringDelegatingFilter.java:73)
        at 
org.geoserver.ows.HTTPHeadersCollector.doFilter(HTTPHeadersCollector.java:48)
        at 
org.geoserver.filters.SpringDelegatingFilter$Chain.doFilter(SpringDelegatingFilter.java:70)
        at 
org.geoserver.filters.SpringDelegatingFilter.doFilter(SpringDelegatingFilter.java:43)
        at 
org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
        at 
org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
        at 
org.geoserver.platform.AdvancedDispatchFilter.doFilter(AdvancedDispatchFilter.java:39)
        at 
org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
        at 
org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
        at 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:320)
        at 
org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:71)
        at 
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127)
        at 
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91)
        at 
org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:75)
        at 
org.geoserver.security.filter.GeoServerCompositeFilter.doFilter(GeoServerCompositeFilter.java:92)
        at 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
        at 
org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:71)
        at 
org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119)
        at 
org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:75)
        at 
org.geoserver.security.filter.GeoServerCompositeFilter.doFilter(GeoServerCompositeFilter.java:92)
        at 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
        at 
org.geoserver.security.filter.GeoServerAnonymousAuthenticationFilter.doFilter(GeoServerAnonymousAuthenticationFilter.java:53)
        at 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
        at 
org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:71)
        at 
org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilterInternal(BasicAuthenticationFilter.java:158)
        at 
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
        at 
org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:75)
        at 
org.geoserver.security.filter.GeoServerCompositeFilter.doFilter(GeoServerCompositeFilter.java:92)
        at 
org.geoserver.security.filter.GeoServerBasicAuthenticationFilter.doFilter(GeoServerBasicAuthenticationFilter.java:81)
        at 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
        at 
org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:71)
        at 
org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105)
        at 
org.geoserver.security.filter.GeoServerSecurityContextPersistenceFilter$1.doFilter(GeoServerSecurityContextPersistenceFilter.java:52)
        at 
org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:75)
        at 
org.geoserver.security.filter.GeoServerCompositeFilter.doFilter(GeoServerCompositeFilter.java:92)
        at 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
        at 
org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:215)
        at 
org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:178)
        at 
org.geoserver.security.GeoServerSecurityFilterChainProxy.doFilter(GeoServerSecurityFilterChainProxy.java:142)
        at 
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)
        at 
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)
        at 
org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
        at 
org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
        at org.geoserver.filters.LoggingFilter.doFilter(LoggingFilter.java:102)
        at 
org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
        at 
org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
        at 
org.geoserver.filters.XFrameOptionsFilter.doFilter(XFrameOptionsFilter.java:77)
        at 
org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
        at 
org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
        at org.geoserver.filters.GZIPFilter.doFilter(GZIPFilter.java:54)
        at 
org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
        at 
org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
        at 
org.geoserver.filters.SessionDebugFilter.doFilter(SessionDebugFilter.java:49)
        at 
org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
        at 
org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
        at 
org.geoserver.filters.FlushSafeFilter.doFilter(FlushSafeFilter.java:42)
        at 
org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
        at 
org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
        at 
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
        at 
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
        at 
org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:201)
        at 
org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
        at 
org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:548)
        at 
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
        at 
org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:602)
        at 
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
        at 
org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
        at 
org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624)
        at 
org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
        at 
org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1435)
        at 
org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
        at 
org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:501)
        at 
org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594)
        at 
org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
        at 
org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1350)
        at 
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
        at 
org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:191)
        at 
org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146)
        at 
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
        at org.eclipse.jetty.server.Server.handle(Server.java:516)
        at 
org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:388)
        at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:633)
        at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:380)
        at 
org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:273)
        at 
org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
        at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
        at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
        at 
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336)
        at 
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313)
        at 
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171)
        at 
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129)
        at 
org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:375)
        at 
org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:773)
        at 
org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:905)
        at java.lang.Thread.run(Unknown Source)
Caused by: org.locationtech.jts.geom.TopologyException: found non-noded 
intersection between LINESTRING ( 737930.4267 1033205.5095, 737925.915 
1033208.5901 ) and LINESTRING ( 737933.8941 1033203.0284, 737930.4267 
1033205.5095 ) [ (737930.4267, 1033205.5095, NaN) ]
        at 
org.locationtech.jts.noding.FastNodingValidator.checkValid(FastNodingValidator.java:139)
        at 
org.locationtech.jts.geomgraph.EdgeNodingValidator.checkValid(EdgeNodingValidator.java:80)
        at 
org.locationtech.jts.geomgraph.EdgeNodingValidator.checkValid(EdgeNodingValidator.java:45)
        at 
org.locationtech.jts.operation.overlay.OverlayOp.computeOverlay(OverlayOp.java:229)
        at 
org.locationtech.jts.operation.overlay.OverlayOp.getResultGeometry(OverlayOp.java:181)
        at 
org.locationtech.jts.operation.overlay.OverlayOp.overlayOp(OverlayOp.java:84)
        at 
org.locationtech.jts.operation.overlay.snap.SnapIfNeededOverlayOp.getResultGeometry(SnapIfNeededOverlayOp.java:75)
        at 
org.locationtech.jts.operation.overlay.snap.SnapIfNeededOverlayOp.overlayOp(SnapIfNeededOverlayOp.java:37)
        at 
org.locationtech.jts.geom.GeometryOverlay.overlay(GeometryOverlay.java:76)
        at 
org.locationtech.jts.geom.GeometryOverlay.intersection(GeometryOverlay.java:119)
        at org.locationtech.jts.geom.Geometry.intersection(Geometry.java:1330)
        at 
org.geotools.feature.collection.ClippedFeatureIterator.clipGeometry(ClippedFeatureIterator.java:159)
        at 
org.geotools.feature.collection.ClippedFeatureIterator.prepareBuilderForNextFeature(ClippedFeatureIterator.java:125)
        at 
org.geotools.feature.collection.ClippedFeatureIterator.hasNext(ClippedFeatureIterator.java:106)
        at 
org.geotools.geojson.feature.FeatureJSON$FeatureCollectionEncoder.writeJSONString(FeatureJSON.java:658)
        at org.json.simple.JSONValue.writeJSONString(JSONValue.java:135)
        at org.json.simple.JSONObject.writeJSONString(JSONObject.java:67)
        at org.geotools.geojson.GeoJSONUtil.encode(GeoJSONUtil.java:297)
        at 
org.geotools.geojson.feature.FeatureJSON.writeFeatureCollection(FeatureJSON.java:307)
        at 
org.geotools.geojson.feature.FeatureJSON.writeFeatureCollection(FeatureJSON.java:338)
        at 
org.geoserver.wps.ppio.GeoJSONPPIO$FeatureCollections.encode(GeoJSONPPIO.java:67)
        at 
org.geoserver.wps.CDataEncoderDelegate.encode(CDataEncoderDelegate.java:45)
        at 
org.geoserver.wps.response.ExecuteProcessResponse.writeComplex(ExecuteProcessResponse.java:230)
        ... 113 more
_______________________________________________
Geoserver-users mailing list

Please make sure you read the following two resources before posting to this 
list:
- Earning your support instead of buying it, but Ian Turton: 
http://www.ianturton.com/talks/foss4g.html#/
- The GeoServer user list posting guidelines: 
http://geoserver.org/comm/userlist-guidelines.html

If you want to request a feature or an improvement, also see this: 
https://github.com/geoserver/geoserver/wiki/Successfully-requesting-and-integrating-new-features-and-improvements-in-GeoServer


Geoserver-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-users

Reply via email to