Hello Andrea & Geoserver team,
I’ve seen a somewhat related WMS rendering error with our Oracle and App-Shema service when we switched from 2D GDA94 to the 3D GDA2020 EPSG 7843.
06 023 22:23:41 ERROR [geoserver.ows] -
org.opengis.geometry.MismatchedDimensionException: Argument “GDA2020” has 3 dimensions, while 2 was expected.
at org.geotools.geometry.jts.ReferencedEnvelope.checkCoordinateReferenceSystemDimension(ReferencedEnvelope.java:316)
at org.geotools.geometry.jts.ReferencedEnvelope.(ReferencedEnvelope.java:278)
at org.geoserver.wms.GetMap.executeInternal(GetMap.java:230)
at org.geoserver.wms.GetMap.run(GetMap.java:203)
at org.geoserver.wms.GetMap.run(GetMap.java:113)
at org.geoserver.wms.DefaultWebMapService.getMap(DefaultWebMapService.java:250)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
Switching to the 2D GDA2020 EPSG 7844 code resolved the issue, so I never really looked into it much further.
A few things I observed at the time…
At first I thought it might be due to an issue interpreting the 3D ellipsoid axis values from the updated EPSG database work done in GeoServer v2.16, but then noticed app schema was having issues encoding the geometries in WFS.
This example oracle geometry MDSYS.SDO_GEOMETRY(3001, 7843, MDSYS.SDO_POINT_TYPE(132.1435042, -30.8517789, 78.487), NULL, NULL)
Encodes ok as WFS 1.1.0
gsmlp:shape
<gml:Point srsDimension=“3” srsName=http://www.opengis.net/def/crs/EPSG/0/7843>
gml:pos-30.8517789 132.1435042 78.487</gml:pos>
</gml:Point>
</gsmlp:shape>
But looks like this in WFS 2.0.0, just a XY (Looking at this now I realise there is no dimension or epsg info for 2.0.0, another bug?)
gsmlp:shapePOINT (-30.8517789 132.1435042)</gsmlp:shape>
And to further complicate things, I did have some missing elevations, so some geoms had a null Z - ie MDSYS.SDO_GEOMETRY(3001, 7843, MDSYS.SDO_POINT_TYPE(128.9389034, -26.0539556, NULL), NULL, NULL)
And they were encoding to NaN
gsmlp:shape
<gml:Point srsDimension=“1” srsName=http://www.opengis.net/def/crs/EPSG/0/7843>
gml:posNaN NaN</gml:pos>
</gml:Point>
</gsmlp:shape>
&
gsmlp:shapePOINT (NaN NaN)</gsmlp:shape>
If app schema was able to handle the odd null elevation, I’m not sure that the null is allowed in GML, so in the end I just reverted back to 2D points using EPSG 7844 and all works ok with just the XY.
Not sure if this helps with Hans’ issue though.
Kind regards,
Ursula
···
From: Andrea Aime <andrea.aime@…10949…>
Sent: Tuesday, 6 December 2022 7:14 PM
To: Hans Yperman <hans.yperman@…1715…>
Cc: Geoserver-users geoserver-users@lists.sourceforge.net
Subject: Re: [Geoserver-users] Output dimension must be 2 or 3
Hi,
looks like it’s happening as the code is preparing to write a geometry literal for a filter in a prepared statement…
and it does not work because the WKB writer for it does not know how to write geometries with 4 dimensions.
Maybe it would be ok to lower the geometry used for the filter to 2 or 3 dimensions but… not sure how PostGIS would
react to that.
Cheers
Andrea
On Mon, Dec 5, 2022 at 1:57 PM Hans Yperman <hans.yperman@…1715…> wrote:
Hello everybody,
after upgrading from geoserver 2.11 to geoserver 2.22, we have a few postgis layers that refuse to render in the preview.
Here is a simplified example, in postgis:
create table testhy(
geometry geometry constraint enforce_dims_the_geom check (st_ndims(geometry) = 4)
);
We get this exception:
Caused by: java.lang.IllegalArgumentException: Output dimension must be 2 or 3
at org.locationtech.jts.io.WKBWriter.(WKBWriter.java:291)
at org.locationtech.jts.io.WKBWriter.(WKBWriter.java:270)
at org.locationtech.jts.io.WKBWriter.(WKBWriter.java:240)
at org.geotools.data.postgis.PostGISPSDialect.setGeometryValue(PostGISPSDialect.java:253)
at org.geotools.jdbc.JDBCDataStore.setPreparedFilterValues(JDBCDataStore.java:3810)
at org.geotools.jdbc.JDBCDataStore.selectSQLPS(JDBCDataStore.java:3728)
at org.geotools.jdbc.JDBCFeatureSource.getReaderInternal(JDBCFeatureSource.java:609)
I browsed the code. geoserver gets dimension 4 based on a variant of this query (PostGISDialect.java):
SELECT * FROM GEOMETRY_COLUMNS WHERE coord_dimension not in (2,3);
but the query generated by geoserver to fetch the data is :
SELECT ST_AsBinary(ST_Force2D(“geometry”)) as “geometry” FROM “public”.“testhy” WHERE […]
Note the ST_Force2D that removes the Z and M dimension, so there are only 2 dimensions, not 4.
Hans Yperman
Department IT
Vlaams Instituut voor de Zee vzw
InnovOcean Campus, Jacobsenstraat 1
8400 Oostende, België
+32 (0) 59 33 61 13
hans.yperman@…1715…
www.vliz.be
Geoserver-users mailing list
Please make sure you read the following two resources before posting to this list:
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
–
Regards,
Andrea Aime
==
GeoServer Professional Services from the experts!
Ing. Andrea Aime
@geowolf
Technical Lead
GeoSolutions Group
phone: +39 0584 962313
fax: +39 0584 1660272
mob: +39 339 8844549
https://www.geosolutionsgroup.com/
http://twitter.com/geosolutions_it
Con riferimento alla normativa sul trattamento dei dati personali (Reg. UE 2016/679 - Regolamento generale sulla protezione dei dati “GDPR”), si precisa che ogni circostanza inerente alla presente email (il suo contenuto, gli eventuali allegati, etc.) è un dato la cui conoscenza è riservata al/i solo/i destinatario/i indicati dallo scrivente. Se il messaggio Le è giunto per errore, è tenuta/o a cancellarlo, ogni altra operazione è illecita. Le sarei comunque grato se potesse darmene notizia.
This email is intended only for the person or entity to which it is addressed and may contain information that is privileged, confidential or otherwise protected from disclosure. We remind that - as provided by European Regulation 2016/679 “GDPR” - copying, dissemination or use of this e-mail or the information herein by anyone other than the intended recipient is prohibited. If you have received this email by mistake, please notify us immediately by telephone or e-mail