@Override public Point pointXYZ(double x, double y, double z) { if (!useJtsPoint()) return super.pointXY(x, y);// ignore z //A Jts Point is fairly heavyweight! TODO could/should we optimize this? SingleCoordinateSequence verifyX(x); verifyY(y); verifyZ(z); // verifyZ(z)? Coordinate coord = Double.isNaN(x) ? null : new Coordinate(x, y, z); return new JtsPoint(geometryFactory.createPoint(coord), (JtsSpatialContext) ctx); }
/** * Reads WKT from the {@code str} via JTS's {@link org.locationtech.jts.io.WKTReader}. * @param str * @param reader <pre>new WKTReader(ctx.getGeometryFactory()))</pre> * @return Non-Null */ protected Shape parseIfSupported(String str, WKTReader reader) throws ParseException { try { Geometry geom = reader.read(str); //Normalizes & verifies coordinates checkCoordinates(geom); if (geom instanceof org.locationtech.jts.geom.Point) { org.locationtech.jts.geom.Point ptGeom = (org.locationtech.jts.geom.Point) geom; if (getShapeFactory().useJtsPoint()) return new JtsPoint(ptGeom, (JtsSpatialContext) ctx); else return getShapeFactory().pointXY(ptGeom.getX(), ptGeom.getY()); } else if (geom.isRectangle()) { return getShapeFactory().makeRectFromRectangularPoly(geom); } else { return getShapeFactory().makeShapeFromGeometry(geom); } } catch (InvalidShapeException e) { throw e; } catch (Exception e) { throw new InvalidShapeException("error reading WKT: "+e.toString(), e); } }