/** * Parse a hex encoded geometry * @param value String containing the hex data to be parsed * @return the resulting parsed geometry */ public Geometry parse(String value) { StringByteGetter bytes = new ByteGetter.StringByteGetter(value); return parseGeometry(valueGetterForEndian(bytes)); }
switch (realtype) { case org.postgis.Geometry.POINT: result = parsePoint(data, haveZ, haveM); break; case org.postgis.Geometry.LINESTRING: result = parseLineString(data, haveZ, haveM); break; case org.postgis.Geometry.POLYGON: result = parsePolygon(data, haveZ, haveM, srid); break; case org.postgis.Geometry.MULTIPOINT: result = parseMultiPoint(data, srid); break; case org.postgis.Geometry.MULTILINESTRING: result = parseMultiLineString(data, srid); break; case org.postgis.Geometry.MULTIPOLYGON: result = parseMultiPolygon(data, srid); break; case org.postgis.Geometry.GEOMETRYCOLLECTION: result = parseCollection(data, srid); break; default:
private GeometryCollection parseCollection(ValueGetter data, int srid) { int count = data.getInt(); Geometry[] geoms = new Geometry[count]; parseGeometryArray(data, geoms, srid); return jtsFactory.getGeometryFactory().createGeometryCollection(geoms); } }
/** * Parse a geometry starting at offset. * @param data ValueGetter for the data to be parsed * @return The resulting Geometry */ protected Geometry parseGeometry(ValueGetter data) { return parseGeometry(data, 0, false); }
private LineString parseLineString(ValueGetter data, boolean haveZ, boolean haveM) { return jtsFactory.getGeometryFactory().createLineString(parseCS(data, haveZ, haveM)); }
public static Geometry geomFromString(String value) throws SQLException { try { value = value.trim(); if (value.startsWith("00") || value.startsWith("01")) { return bp.parse(value); } else { Geometry result; // no srid := 0 in JTS world int srid = 0; // break up geometry into srid and wkt if (value.startsWith("SRID=")) { String[] temp = value.split(";"); value = temp[1].trim(); srid = Integer.parseInt(temp[0].substring(5)); } result = reader.read(value); setSridRecurse(result, srid); return result; } } catch (Exception E) { E.printStackTrace(); throw new SQLException("Error parsing SQL data:" + E); } }
private Polygon parsePolygon(ValueGetter data, boolean haveZ, boolean haveM, int srid) { int holecount = data.getInt() - 1; LinearRing[] rings = new LinearRing[holecount]; LinearRing shell = parseLinearRing(data, haveZ, haveM); shell.setSRID(srid); for (int i = 0; i < holecount; i++) { rings[i] = parseLinearRing(data, haveZ, haveM); rings[i].setSRID(srid); } return jtsFactory.getGeometryFactory().createPolygon(shell, rings); }
private MultiPoint parseMultiPoint(ValueGetter data, int srid) { Point[] points = new Point[data.getInt()]; parseGeometryArray(data, points, srid); return jtsFactory.getGeometryFactory().createMultiPoint(points); }
/** Parse an Array of "full" Geometries */ private void parseGeometryArray(ValueGetter data, Geometry[] container, int srid) { for (int i = 0; i < container.length; i++) { container[i] = parseGeometry(data, srid, true); } }
private LinearRing parseLinearRing(ValueGetter data, boolean haveZ, boolean haveM) { return jtsFactory.getGeometryFactory().createLinearRing(parseCS(data, haveZ, haveM)); }
/** * Parse a binary encoded geometry. * @param value byte array containing the binary encoded geometru * @return the resulting parsed geometry */ public Geometry parse(byte[] value) { BinaryByteGetter bytes = new ByteGetter.BinaryByteGetter(value); return parseGeometry(valueGetterForEndian(bytes)); }
private MultiPolygon parseMultiPolygon(ValueGetter data, int srid) { int count = data.getInt(); Polygon[] polys = new Polygon[count]; parseGeometryArray(data, polys, srid); return jtsFactory.getGeometryFactory().createMultiPolygon(polys); }
private MultiLineString parseMultiLineString(ValueGetter data, int srid) { int count = data.getInt(); LineString[] strings = new LineString[count]; parseGeometryArray(data, strings, srid); return jtsFactory.getGeometryFactory().createMultiLineString(strings); }