This sounds like https://osgeo-org.atlassian.net/browse/GEOT-6599 which is marked as fixed, but your points should have a dimension of 3 (X,Y,Z) not 2 so I guess that is probably what causes the problem - if you can provide a test case I can look at more fixing when I get some free time. If it's a show stopper for you then there are commercial support options available.
Ian On Wed, 6 Oct 2021 at 14:05, Peter Friess <pk.fri...@t-online.de> wrote: > Hi All, > > Yesterday, I replaced in our application Geotools 21.2 with 25.2. After > the replacement certain features I implemented, unfortunately, do not work > any longer. When displaying a shapefile, I get the following exception: > > *"Must have at least 2 spatial dimensions" * which is throws by > PackedCoordinateSequence.I therefore started debugging to figure out what > happens. > > The shapefile's geometry is a point given in east, north, height: > builder.add(gf.createPoint(new > Coordinate(enh.getX(), enh.getY(), enh.getZ()))); > > I need a 3D point as we have implemented a viewer (independent from > GeoTools) which can display our shapefiles in 3D (actually perspective > view). When I create the shapefile with easting and northing only, the > above exception is not thrown, But, this is not a solution as I need a 3D > point. The coordinate reference system is EPSG:32617, i.e. WGS84 UTM zone > 17 . > > We have pure shapefile viewers and we have shapefile editors. When > allowing for editing, I keep the features in memory, i.e. I create a > SimpleFeatureSource as: > > SimpleFeatureCollection collection = > DataUtilities.collection(source.getFeatures()); > return DataUtilities.source(collection); > > Now, for the SimpleFeatureSource created by DataUtilities the hints are > null. Thus, when rendering the features StreamingRenderer calls > getTransformedShape > which than clones the geometry by calling > LiteCoordinateSequence.cloneGeometry(geom, > dim). The dimension dim is 2, received from CRS (UTM 17). > > cloneGeometry checks the type which is in my case a Point and calls > cloneGeometry(Point > geom, int dimension) which calls > > geomFac.createPoint(new > LiteCoordinateSequence(geom.getCoordinateSequence(), dimension)); > > new LiteCoordinateSequence calls super(dimension, cs.getMeasures()), > because it is of type PackedCoordinateSequence. The code looks as: > > protected PackedCoordinateSequence(int dimension, int measures ) { > if (dimension - measures < 2) { > throw new IllegalArgumentException("Must have at least 2 spatial > dimensions"); > } > this.dimension = dimension; > this.measures = measures; > } > > And here is the problem: dimension is 2 as provided by the CRS, and the > measures (whatever this is) is 1. This measures is derived from Point somehow. > The Point is turned into a CoordinateSequence and this has for whatever > reason a mesasures of 1. And the cloning fails. > > As said before: with GeoTools 21.2 it all worked fine. Now I am screwed. > Is there any solution to this? A different version of the jts-core-xx.jar. > I am using jts-core-1.18.1. Well, I did not choose it myself, Maven > downloaded it. > > Going back to Geotools 21.2, is in my opinion also not a solution. We > would like to stay as close as possible to the most recent version of > Geotools. > > Any help is very much appreciated is this issue blocks our development. > > Regards, > > Peter > > > > > _______________________________________________ > 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