Author: jdeolive Date: 2012-06-29 07:30:32 -0700 (Fri, 29 Jun 2012) New Revision: 38850 Modified: trunk/modules/library/jdbc/src/test/java/org/geotools/jdbc/JDBCDataStoreTest.java trunk/modules/plugin/jdbc/jdbc-oracle/src/main/java/org/geotools/data/oracle/OracleDialect.java trunk/modules/plugin/jdbc/jdbc-sqlserver/src/main/java/org/geotools/data/sqlserver/SQLServerDialect.java Log: GEOT-4183, handling createSchema with crs with infinate bounds Modified: trunk/modules/library/jdbc/src/test/java/org/geotools/jdbc/JDBCDataStoreTest.java =================================================================== --- trunk/modules/library/jdbc/src/test/java/org/geotools/jdbc/JDBCDataStoreTest.java 2012-06-29 13:23:33 UTC (rev 38849) +++ trunk/modules/library/jdbc/src/test/java/org/geotools/jdbc/JDBCDataStoreTest.java 2012-06-29 14:30:32 UTC (rev 38850) @@ -28,6 +28,7 @@ import org.geotools.data.*; import org.geotools.data.simple.SimpleFeatureCollection; import org.geotools.data.simple.SimpleFeatureSource; +import org.geotools.feature.NameImpl; import org.geotools.feature.simple.SimpleFeatureTypeBuilder; import org.geotools.referencing.CRS; import org.opengis.feature.simple.SimpleFeature; @@ -41,6 +42,7 @@ import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.GeometryFactory; import com.vividsolutions.jts.geom.Point; +import com.vividsolutions.jts.io.WKTReader; /** @@ -166,6 +168,43 @@ w.close(); } + public void testCreateSchemaUTMCRS() throws Exception { + SimpleFeatureTypeBuilder builder = new SimpleFeatureTypeBuilder(); + builder.setName(tname("ft2")); + builder.setNamespaceURI(dataStore.getNamespaceURI()); + builder.setCRS(CRS.decode("EPSG:26713")); + builder.add(aname("geometry"), Point.class); + builder.add(aname("intProperty"), Integer.class); + builder.add(aname("stringProperty"), String.class); + + SimpleFeatureType featureType = builder.buildFeatureType(); + dataStore.createSchema(featureType); + + SimpleFeatureType ft2 = dataStore.getSchema(tname("ft2")); + assertNotNull(ft2); + + FeatureWriter w = dataStore.getFeatureWriter( tname("ft2"),Transaction.AUTO_COMMIT); + w.hasNext(); + + //write out a feature with a geomety in teh srs, basically accomodate databases that have + // to query the first feature in order to get the srs for the feature type + SimpleFeature f = (SimpleFeature) w.next(); + + Geometry g = new WKTReader().read("POINT(593493 4914730)"); + g.setSRID(26713); + + f.setAttribute(0, g); + f.setAttribute( 1, new Integer(0)); + f.setAttribute( 2, "hello"); + w.write(); + w.close(); + + //clear out the feature type cache + dataStore.getEntry(new NameImpl(dataStore.getNamespaceURI(), tname("ft2"))).dispose(); + ft2 = dataStore.getSchema(tname("ft2")); + assertTrue(CRS.equalsIgnoreMetadata(CRS.decode("EPSG:26713"), ft2.getCoordinateReferenceSystem())); + } + void assertEqualsLax( SimpleFeatureType e, SimpleFeatureType a ) { if ( e.equals( a ) ) { return; Modified: trunk/modules/plugin/jdbc/jdbc-oracle/src/main/java/org/geotools/data/oracle/OracleDialect.java =================================================================== --- trunk/modules/plugin/jdbc/jdbc-oracle/src/main/java/org/geotools/data/oracle/OracleDialect.java 2012-06-29 13:23:33 UTC (rev 38849) +++ trunk/modules/plugin/jdbc/jdbc-oracle/src/main/java/org/geotools/data/oracle/OracleDialect.java 2012-06-29 14:30:32 UTC (rev 38850) @@ -80,7 +80,7 @@ */ public class OracleDialect extends PreparedStatementSQLDialect { - private static final int DEFAULT_AXIS_MAX = 1000000; + private static final int DEFAULT_AXIS_MAX = 10000000; private static final int DEFAULT_AXIS_MIN = -10000000; Modified: trunk/modules/plugin/jdbc/jdbc-sqlserver/src/main/java/org/geotools/data/sqlserver/SQLServerDialect.java =================================================================== --- trunk/modules/plugin/jdbc/jdbc-sqlserver/src/main/java/org/geotools/data/sqlserver/SQLServerDialect.java 2012-06-29 13:23:33 UTC (rev 38849) +++ trunk/modules/plugin/jdbc/jdbc-sqlserver/src/main/java/org/geotools/data/sqlserver/SQLServerDialect.java 2012-06-29 14:30:32 UTC (rev 38850) @@ -38,6 +38,7 @@ import org.opengis.feature.type.GeometryDescriptor; import org.opengis.referencing.crs.CoordinateReferenceSystem; import org.opengis.referencing.cs.CoordinateSystem; +import org.opengis.referencing.cs.CoordinateSystemAxis; import com.vividsolutions.jts.geom.Envelope; import com.vividsolutions.jts.geom.Geometry; @@ -58,6 +59,9 @@ */ public class SQLServerDialect extends BasicSQLDialect { + private static final int DEFAULT_AXIS_MAX = 10000000; + private static final int DEFAULT_AXIS_MIN = -10000000; + public SQLServerDialect(JDBCDataStore dataStore) { super(dataStore); } @@ -120,9 +124,19 @@ CoordinateReferenceSystem crs = gd.getCoordinateReferenceSystem(); CoordinateSystem cs = crs.getCoordinateSystem(); if (cs.getDimension() == 2) { - bbox = "("+cs.getAxis(0).getMinimumValue()+", "+cs.getAxis(1).getMinimumValue(); - bbox += ", "+cs.getAxis(0).getMaximumValue()+", "+cs.getAxis(1).getMaximumValue()+")"; - + CoordinateSystemAxis a0 = cs.getAxis(0); + CoordinateSystemAxis a1 = cs.getAxis(1); + bbox = "("; + bbox += (Double.isInfinite(a0.getMinimumValue()) ? + DEFAULT_AXIS_MIN : a0.getMinimumValue()) + ", "; + bbox += (Double.isInfinite(a1.getMinimumValue()) ? + DEFAULT_AXIS_MIN : a1.getMinimumValue()) + ", "; + + bbox += (Double.isInfinite(a0.getMaximumValue()) ? + DEFAULT_AXIS_MAX : a0.getMaximumValue()) + ", "; + bbox += Double.isInfinite(a1.getMaximumValue()) ? + DEFAULT_AXIS_MAX : a1.getMaximumValue(); + bbox += ")"; } } |