From b29b4ebad53a14b99c7bb7c8c0dc2817eab0d28b Mon Sep 17 00:00:00 2001 From: Sandro Santilli Date: Tue, 20 Dec 2011 19:35:35 +0000 Subject: [PATCH] Convert java components to SRID<=0 being unknown and 0 being the official one [#1221] NOTE: this is untested, as "make" didn't know what to do and so neither do I git-svn-id: http://svn.osgeo.org/postgis/trunk@8481 b70326c6-7e19-0410-871a-916f4a2858ee --- .../org/postgis/jts/JtsBinaryParser.java | 4 ++-- .../org/postgis/jts/JtsBinaryWriter.java | 3 +-- java/jdbc/src/org/postgis/Geometry.java | 22 ++++++++++++++++--- java/jdbc/src/org/postgis/PGboxbase.java | 6 ++--- java/jdbc/src/org/postgis/PGgeometry.java | 6 ++--- .../src/org/postgis/binary/BinaryParser.java | 6 ++--- .../src/org/postgis/binary/BinaryWriter.java | 6 ++--- .../org/postgis/java2d/PGShapeGeometry.java | 2 +- .../org/postgis/java2d/ShapeBinaryParser.java | 8 +++---- .../src/org/postgis/pljava/PLJtsParser.java | 2 +- .../src/org/postgis/pljava/PLJtsWriter.java | 2 +- 11 files changed, 41 insertions(+), 26 deletions(-) diff --git a/java/jdbc/jtssrc/org/postgis/jts/JtsBinaryParser.java b/java/jdbc/jtssrc/org/postgis/jts/JtsBinaryParser.java index b7edf4d1f..5718d9ec9 100644 --- a/java/jdbc/jtssrc/org/postgis/jts/JtsBinaryParser.java +++ b/java/jdbc/jtssrc/org/postgis/jts/JtsBinaryParser.java @@ -102,14 +102,14 @@ public class JtsBinaryParser { boolean haveS = (typeword & 0x20000000) != 0; if (haveS) { - int newsrid = data.getInt(); + int newsrid = Geometry.parseSRID(data.getInt()); if (inheritSrid && newsrid != srid) { throw new IllegalArgumentException("Inconsistent srids in complex geometry: " + srid + ", " + newsrid); } else { srid = newsrid; } } else if (!inheritSrid) { - srid = -1; + srid = Geometry.UNKNOWN_SRID; } Geometry result; diff --git a/java/jdbc/jtssrc/org/postgis/jts/JtsBinaryWriter.java b/java/jdbc/jtssrc/org/postgis/jts/JtsBinaryWriter.java index 74b3c9270..b77c51f4a 100644 --- a/java/jdbc/jtssrc/org/postgis/jts/JtsBinaryWriter.java +++ b/java/jdbc/jtssrc/org/postgis/jts/JtsBinaryWriter.java @@ -297,8 +297,7 @@ public class JtsBinaryWriter { private boolean checkSrid(Geometry geom) { final int srid = geom.getSRID(); - // SRID is default 0 with jts geometries - return (srid != -1) && (srid != 0); + return (srid > 0); } private int estimatePoint(Point geom) { diff --git a/java/jdbc/src/org/postgis/Geometry.java b/java/jdbc/src/org/postgis/Geometry.java index de1390030..bcca446b4 100644 --- a/java/jdbc/src/org/postgis/Geometry.java +++ b/java/jdbc/src/org/postgis/Geometry.java @@ -113,9 +113,25 @@ public abstract class Geometry implements Serializable { public final int type; /** - * The spacial reference system id of this geometry, default (no srid) is -1 + * Official UNKNOWN srid value */ - public int srid = -1; + public final final int UNKNOWN_SRID = 0; + + /** + * The spacial reference system id of this geometry, default is no srid + */ + public int srid = UNKNOWN_SRID; + + /** + * Parse a SRID value, anything <= 0 is unknown + */ + public static int parseSRID(int srid) { + if ( srid < 0 ) { + /* TODO: raise a warning ? */ + srid = 0; + } + return srid; + } /** * Constructor for subclasses @@ -232,7 +248,7 @@ public abstract class Geometry implements Serializable { public String toString() { StringBuffer sb = new StringBuffer(); - if (srid != -1) { + if (srid != UNKNOWN_SRID) { sb.append("SRID="); sb.append(srid); sb.append(';'); diff --git a/java/jdbc/src/org/postgis/PGboxbase.java b/java/jdbc/src/org/postgis/PGboxbase.java index 5766555eb..10aeaae71 100644 --- a/java/jdbc/src/org/postgis/PGboxbase.java +++ b/java/jdbc/src/org/postgis/PGboxbase.java @@ -81,12 +81,12 @@ public abstract class PGboxbase extends PGobject { } public void setValue(String value) throws SQLException { - int srid = -1; + int srid = Geometry.UNKNOWN_SRID; value = value.trim(); if (value.startsWith("SRID=")) { String[] temp = PGgeometry.splitSRID(value); value = temp[1].trim(); - srid = Integer.parseInt(temp[0].substring(5)); + srid = Geometry.parseSRID(Integer.parseInt(temp[0].substring(5))); } String myPrefix = getPrefix(); if (value.startsWith(myPrefix)) { @@ -95,7 +95,7 @@ public abstract class PGboxbase extends PGobject { PGtokenizer t = new PGtokenizer(PGtokenizer.removePara(value), ','); llb = new Point(t.getToken(0)); urt = new Point(t.getToken(1)); - if (srid != -1) { + if (srid != Geometry.UNKNOWN_SRID) { llb.setSrid(srid); urt.setSrid(srid); } diff --git a/java/jdbc/src/org/postgis/PGgeometry.java b/java/jdbc/src/org/postgis/PGgeometry.java index 4f877d91e..db0000ee1 100644 --- a/java/jdbc/src/org/postgis/PGgeometry.java +++ b/java/jdbc/src/org/postgis/PGgeometry.java @@ -77,13 +77,13 @@ public class PGgeometry extends PGobject { throws SQLException { value = value.trim(); - int srid = -1; + int srid = Geometry.UNKNOWN_SRID; if (value.startsWith(SRIDPREFIX)) { // break up geometry into srid and wkt String[] parts = PGgeometry.splitSRID(value); value = parts[1].trim(); - srid = Integer.parseInt(parts[0].substring(5)); + srid = Geometry.parseSRID(Integer.parseInt(parts[0].substring(5))); } Geometry result; @@ -111,7 +111,7 @@ public class PGgeometry extends PGobject { throw new SQLException("Unknown type: " + value); } - if (srid != -1) { + if (srid != Geometry.UNKNOWN_SRID) { result.srid = srid; } diff --git a/java/jdbc/src/org/postgis/binary/BinaryParser.java b/java/jdbc/src/org/postgis/binary/BinaryParser.java index 3454a213e..255e1a9b4 100644 --- a/java/jdbc/src/org/postgis/binary/BinaryParser.java +++ b/java/jdbc/src/org/postgis/binary/BinaryParser.java @@ -104,10 +104,10 @@ public class BinaryParser { boolean haveM = (typeword & 0x40000000) != 0; boolean haveS = (typeword & 0x20000000) != 0; - int srid = -1; + int srid = Geometry.UNKNOWN_SRID; if (haveS) { - srid = data.getInt(); + srid = Geometry.parseSRID(data.getInt()); } Geometry result1; switch (realtype) { @@ -138,7 +138,7 @@ public class BinaryParser { Geometry result = result1; - if (haveS) { + if (srid != Geometry.UNKONWN_SRID) { result.setSrid(srid); } return result; diff --git a/java/jdbc/src/org/postgis/binary/BinaryWriter.java b/java/jdbc/src/org/postgis/binary/BinaryWriter.java index cf136b6be..c9b56cec1 100644 --- a/java/jdbc/src/org/postgis/binary/BinaryWriter.java +++ b/java/jdbc/src/org/postgis/binary/BinaryWriter.java @@ -126,13 +126,13 @@ public class BinaryWriter { if (geom.haveMeasure) { typeword |= 0x40000000; } - if (geom.srid != -1) { + if (geom.srid != Geometry.UNKNOWN_SRID) { typeword |= 0x20000000; } dest.setInt(typeword); - if (geom.srid != -1) { + if (geom.srid != Geometry.UNKNOWN_SRID) { dest.setInt(geom.srid); } @@ -244,7 +244,7 @@ public class BinaryWriter { // write typeword result += 4; - if (geom.srid != -1) { + if (geom.srid != Geometry.UNKNOWN_SRID) { result += 4; } diff --git a/java/jdbc/src/org/postgis/java2d/PGShapeGeometry.java b/java/jdbc/src/org/postgis/java2d/PGShapeGeometry.java index 1f2ee20af..327ffd911 100644 --- a/java/jdbc/src/org/postgis/java2d/PGShapeGeometry.java +++ b/java/jdbc/src/org/postgis/java2d/PGShapeGeometry.java @@ -118,7 +118,7 @@ public class PGShapeGeometry extends PGobject implements Shape { return false; } - /** Return the SRID or -1 if none was available */ + /** Return the SRID or Geometry.UNKNOWN_SRID if none was available */ public int getSRID() { return srid; } diff --git a/java/jdbc/src/org/postgis/java2d/ShapeBinaryParser.java b/java/jdbc/src/org/postgis/java2d/ShapeBinaryParser.java index 783634d24..73c897965 100644 --- a/java/jdbc/src/org/postgis/java2d/ShapeBinaryParser.java +++ b/java/jdbc/src/org/postgis/java2d/ShapeBinaryParser.java @@ -70,7 +70,7 @@ public class ShapeBinaryParser { * Is synchronized to protect offset counter. (Unfortunately, Java does not * have neither call by reference nor multiple return values.) * - * @return a potential SRID or -1 if not present + * @return a potential SRID or Geometry.UNKNOWN_SRID if not present */ public synchronized int parse(String value, GeneralPath path) { StringByteGetter bytes = new ByteGetter.StringByteGetter(value); @@ -83,7 +83,7 @@ public class ShapeBinaryParser { * Is synchronized to protect offset counter. (Unfortunately, Java does not * have neither call by reference nor multiple return values.) * - * @return a potential SRID or -1 if not present + * @return a potential SRID or Geometry.UNKNOWN_SRID if not present */ public synchronized int parse(byte[] value, GeneralPath path) { BinaryByteGetter bytes = new ByteGetter.BinaryByteGetter(value); @@ -108,10 +108,10 @@ public class ShapeBinaryParser { boolean haveM = (typeword & 0x40000000) != 0; boolean haveS = (typeword & 0x20000000) != 0; - int srid = -1; + int srid = Geometry.UNKNOWN_SRID; if (haveS) { - srid = data.getInt(); + srid = Geometry.parseSRID(data.getInt()); } switch (realtype) { diff --git a/java/pljava/src/org/postgis/pljava/PLJtsParser.java b/java/pljava/src/org/postgis/pljava/PLJtsParser.java index db535095f..7496197df 100644 --- a/java/pljava/src/org/postgis/pljava/PLJtsParser.java +++ b/java/pljava/src/org/postgis/pljava/PLJtsParser.java @@ -91,7 +91,7 @@ public class PLJtsParser { srid = newsrid; } } else if (!inheritSrid) { - srid = -1; + srid = Geometry.UNKNOWN_SRID; } Geometry result; diff --git a/java/pljava/src/org/postgis/pljava/PLJtsWriter.java b/java/pljava/src/org/postgis/pljava/PLJtsWriter.java index d2ec8100f..c83029533 100644 --- a/java/pljava/src/org/postgis/pljava/PLJtsWriter.java +++ b/java/pljava/src/org/postgis/pljava/PLJtsWriter.java @@ -240,7 +240,7 @@ public class PLJtsWriter { private boolean checkSrid(Geometry geom) { final int srid = geom.getSRID(); // SRID is default 0 with jts geometries - return (srid != -1) && (srid != 0); + return (srid > 0); } private int estimatePoint(Point geom) { -- 2.40.0