Strabon
changeset 919:6c8b5e31d7fe
addresses bug #31 (empty literals with wktLiteral datatype are regarded as empty geometries, i.e., MULTIPOLYGON EMPTY)
author | Babis Nikolaou <charnik@di.uoa.gr> |
---|---|
date | Mon Mar 25 00:04:09 2013 +0200 (2013-03-25) |
parents | 454a685fbf10 |
children | 167bc144ef2f |
files | evaluation/src/main/java/org/openrdf/query/algebra/evaluation/function/spatial/AbstractWKT.java generaldb/src/main/java/org/openrdf/sail/generaldb/managers/LiteralManager.java |
line diff
1.1 --- a/evaluation/src/main/java/org/openrdf/query/algebra/evaluation/function/spatial/AbstractWKT.java Sun Mar 24 23:39:50 2013 +0200 1.2 +++ b/evaluation/src/main/java/org/openrdf/query/algebra/evaluation/function/spatial/AbstractWKT.java Mon Mar 25 00:04:09 2013 +0200 1.3 @@ -22,6 +22,19 @@ 1.4 */ 1.5 public class AbstractWKT { 1.6 1.7 + /** 1.8 + * WKT representation for an empty geometry 1.9 + * 1.10 + * When used with POINT instead of MULTIPOLYGON, JTS throws an 1.11 + * Illegal argument exception, since empty geometries for points 1.12 + * are not represented in WKB (see 1.13 + * http://tsusiatsoftware.net/jts/javadoc/com/vividsolutions/jts/io/WKBWriter.html). 1.14 + * 1.15 + * EMPTY_GEOM is present here to address Req. 13 of GeoSPARQL for empty geometries. 1.16 + * However, we act in the same way for strdf:WKT. 1.17 + */ 1.18 + protected final String EMPTY_GEOM = "MULTIPOLYGON EMPTY"; 1.19 + 1.20 /** 1.21 * The datatype of this WKT literal 1.22 * 1.23 @@ -67,6 +80,10 @@ 1.24 * @param literalValue 1.25 */ 1.26 private void parsestRDFWKT(String literalValue) { 1.27 + if (wkt.trim().length() == 0) { 1.28 + wkt = EMPTY_GEOM; 1.29 + } 1.30 + 1.31 // we already have this case in {@link WKTHelper} 1.32 wkt = WKTHelper.getWithoutSRID(literalValue); 1.33 srid = WKTHelper.getSRID(literalValue); 1.34 @@ -77,6 +94,10 @@ 1.35 // FIXME: the default value for wktLiteral 1.36 srid = GeoConstants.defaultSRID; 1.37 1.38 + if (wkt.length() == 0) { // empty geometry 1.39 + wkt = EMPTY_GEOM; 1.40 + } 1.41 + 1.42 if (wkt.charAt(0) == '<') {// if a CRS URI is specified 1.43 int uriIndx = wkt.indexOf('>'); 1.44 URI crs = URI.create(wkt.substring(1, uriIndx));
2.1 --- a/generaldb/src/main/java/org/openrdf/sail/generaldb/managers/LiteralManager.java Sun Mar 24 23:39:50 2013 +0200 2.2 +++ b/generaldb/src/main/java/org/openrdf/sail/generaldb/managers/LiteralManager.java Mon Mar 25 00:04:09 2013 +0200 2.3 @@ -17,8 +17,6 @@ 2.4 import org.openrdf.sail.generaldb.model.XMLGSDatatypeUtil; 2.5 import org.openrdf.sail.generaldb.schema.LiteralTable; 2.6 import org.openrdf.sail.rdbms.model.RdbmsLiteral; 2.7 -import org.slf4j.Logger; 2.8 -import org.slf4j.LoggerFactory; 2.9 2.10 /** 2.11 * Manages RDBMS Literals. Including creation, id lookup, and inserting them 2.12 @@ -29,7 +27,7 @@ 2.13 */ 2.14 public class LiteralManager extends ValueManagerBase<RdbmsLiteral> { 2.15 2.16 - private static Logger logger = LoggerFactory.getLogger(org.openrdf.sail.generaldb.managers.LiteralManager.class); 2.17 + //private static Logger logger = LoggerFactory.getLogger(org.openrdf.sail.generaldb.managers.LiteralManager.class); 2.18 2.19 private static TimeZone Z = TimeZone.getTimeZone("GMT"); 2.20 2.21 @@ -97,9 +95,6 @@ 2.22 2.23 try { 2.24 if (XMLGSDatatypeUtil.isNumericDatatype(datatype)) { 2.25 -// if (logger.isDebugEnabled()) { 2.26 -// logger.debug("about to insert double value: {}", literal.doubleValue()); 2.27 -// } 2.28 table.insertNumeric(id, label, dt, literal.doubleValue()); 2.29 } 2.30 else if (XMLGSDatatypeUtil.isCalendarDatatype(datatype)) {