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;
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) {
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
public String toString() {
StringBuffer sb = new StringBuffer();
- if (srid != -1) {
+ if (srid != UNKNOWN_SRID) {
sb.append("SRID=");
sb.append(srid);
sb.append(';');
}
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)) {
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);
}
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;
throw new SQLException("Unknown type: " + value);
}
- if (srid != -1) {
+ if (srid != Geometry.UNKNOWN_SRID) {
result.srid = srid;
}
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) {
Geometry result = result1;
- if (haveS) {
+ if (srid != Geometry.UNKONWN_SRID) {
result.setSrid(srid);
}
return result;
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);
}
// write typeword
result += 4;
- if (geom.srid != -1) {
+ if (geom.srid != Geometry.UNKNOWN_SRID) {
result += 4;
}
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;
}
* 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);
* 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);
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) {
srid = newsrid;
}
} else if (!inheritSrid) {
- srid = -1;
+ srid = Geometry.UNKNOWN_SRID;
}
Geometry result;
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) {