The message `org.locationtech.jts.geom.MultiPolygon incompatible with com.vividsolutions.jts.geom.Geometry` - suggests that you have two incompatible versions of JTS in your build.
Ian On Tue, 2 May 2023 at 17:39, Mieke Zwart <mieke.zw...@assetpeople.com> wrote: > Hello list, > > > > Unfortunately, I have to use an old version of Geotools, as my client is > reliant on software that is build in java 8 and cannot upgrade. I think the > latest version of Geotools that was working with java 8 is 20.5. > > Now I have the following problem and have not been able to find a solution > in the last week, searching various forums and this mailing list. > > I have a WKT (or Geometry or SimpleFeature) and need to convert it to GML > (to submit into a WFS insert transaction). > > I have tried using the encoder in different ways: > > - Feeding it either a SimpleFeature, Geometry derived from > SimpleFeature or Geometry derived from WKT. > - Using GML._Geometry, GML.MultiPolygon or various other QNames to > encode the feature/geometry. > > I get depending on the above, a variety of errors: > > If I try to encode a Geometry I usually get the error that gid property is > missing: > > Exception in thread "main" *java.lang.RuntimeException*: Failed to get > property: gid > > at org.geotools.xml.impl.GetPropertyExecutor.visit( > *GetPropertyExecutor.java:105*) > > at org.geotools.xml.impl.BindingWalker$BindingExecutionChain.execute( > *BindingWalker.java:220*) > > at org.geotools.xml.impl.BindingWalker.walk(*BindingWalker.java:186* > ) > > at org.geotools.xml.impl.BindingVisitorDispatch.walk( > *BindingVisitorDispatch.java:47*) > > at org.geotools.xml.impl.BindingVisitorDispatch.walk( > *BindingVisitorDispatch.java:32*) > > at org.geotools.xml.Encoder.encode(*Encoder.java:883*) > > at org.geotools.xml.Encoder.encode(*Encoder.java:584*) > > at org.geotools.tutorial.App.main(App.java) > > Caused by: *java.lang.ClassCastException*: > org.locationtech.jts.geom.MultiPolygon incompatible with > com.vividsolutions.jts.geom.Geometry > > at > org.geotools.gml3.bindings.AbstractGeometryTypeBinding.getProperty( > *AbstractGeometryTypeBinding.java:129*) > > at org.geotools.xml.impl.GetPropertyExecutor.visit( > *GetPropertyExecutor.java:103*) > > ... 7 more > > > > Code: > > String woPolygonWKT = "MULTIPOLYGON (((4 0, 2 2, 4 4, 6 2, 4 0)), ((2 1, > 1.9807852804032304 0.8049096779838718, 1.9238795325112867 > 0.6173165676349102, 1.8314696123025453 0.4444297669803978, > 1.7071067811865475 0.2928932188134525, 1.5555702330196022 > 0.1685303876974548, 1.3826834323650898 0.0761204674887133, > 1.1950903220161284 0.0192147195967696, 1 0, 0.8049096779838718 > 0.0192147195967696, 0.6173165676349103 0.0761204674887133, > 0.444429766980398 0.1685303876974547, 0.2928932188134525 > 0.2928932188134524, 0.1685303876974547 0.4444297669803978, > 0.0761204674887132 0.6173165676349106, 0.0192147195967695 > 0.8049096779838723, 0 1.0000000000000007, 0.0192147195967698 > 1.1950903220161293, 0.0761204674887137 1.382683432365091, > 0.1685303876974555 1.5555702330196035, 0.2928932188134536 > 1.7071067811865488, 0.4444297669803993 1.8314696123025462, > 0.6173165676349122 1.9238795325112874, 0.8049096779838739 > 1.9807852804032309, 1.0000000000000024 2, 1.1950903220161309 > 1.98078528040323, 1.3826834323650925 1.9238795325112856, 1.5555702330196048 > 1.8314696123025436, 1.70710678118655 1.7071067811865452, 1.8314696123025471 > 1.5555702330195993, 1.9238795325112883 1.3826834323650863, > 1.9807852804032313 1.1950903220161244, 2 1)))"; > > WKTReader wktR = *new* WKTReader(); > > Geometry geom2; > > *try* { > > geom2 = wktR.read(woPolygonWKT); > > System.*out*.println(geom2.toString()); > > //geom2.setSRID(4326); > > org.geotools.xml.Configuration configuration = *new* > org.geotools.gml3.GMLConfiguration(); > > org.geotools.xml.Encoder encoder = *new* > org.geotools.xml.Encoder( configuration ); > > ByteArrayOutputStream out = *new* ByteArrayOutputStream(); > > > > *try* { > > System.*out*.println("trying to encode"); > > encoder.encode(geom2, org.geotools.gml3.GML. > *MultiPolygon*,out); > > } *catch* (IOException e) { > > // *TODO* Auto-generated catch block > > e.printStackTrace(); > > } > > System.*out*.println(out.toString()); > > } *catch* (ParseException e1) { > > // *TODO* Auto-generated catch block > > e1.printStackTrace(); > > } > > > > I have also tried: > *public* String convertSimpleFeatureToGML(SimpleFeature > simpleFeature) { > > GMLConfiguration gmlConfiguration = *new* GMLConfiguration( > *true*); > > Geometry geom = (Geometry) simpleFeature.getDefaultGeometry(); > > > > Encoder encoder = *new* Encoder(gmlConfiguration); > > ByteArrayOutputStream boas = *new* ByteArrayOutputStream(); > > *try* { > > encoder.encode(geom, GML.*MultiPolygon*, boas); > > *return* boas.toString(); > > } *catch* (IOException e) { > > e.printStackTrace(); > > *return* ""; > > } > > > > } > > And then calling this function with a simpleFeature that contains the > multipolygon described above in the WKT. > > > > If anyone can help me, it would be greatly appreciated. > > > > Kind Regards / Met vriendelijke groet, > > *Asset People B.V.* > > > > *Mieke Zwart* > > > > M. +31 (0) 612 967 788 > > E. mieke.zw...@assetpeople.com > > > _______________________________________________ > GeoTools-GT2-Users mailing list > GeoTools-GT2-Users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users > -- Ian Turton
_______________________________________________ GeoTools-GT2-Users mailing list GeoTools-GT2-Users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users