?? jtstestparser.java
字號:
/* * JtsTestParser.java * * PostGIS extension for PostgreSQL JDBC driver - example and test classes * * (C) 2004 Paul Ramsey, pramsey@refractions.net * * (C) 2005 Markus Schaber, markus.schaber@logix-tt.com * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License as published by the Free Software * Foundation; either version 2 of the License. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License along with * this program; if not, write to the Free Software Foundation, Inc., 59 Temple * Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: JtsTestParser.java 1730 2005-05-25 10:12:54Z mschaber $ */package examples;import org.postgis.binary.ValueSetter;import org.postgis.jts.JtsBinaryParser;import org.postgis.jts.JtsBinaryWriter;import org.postgis.jts.JtsGeometry;import org.postgresql.util.PGtokenizer;import com.vividsolutions.jts.geom.Geometry;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.sql.Types;public class JtsTestParser { public static String ALL = "ALL", ONLY10 = "ONLY10", EQUAL10 = "EQUAL10"; /** * Our set of geometries to test. */ public static final String[][] testset = new String[][]{ { ALL, // 2D "POINT(10 10)"}, { ALL, // 3D with 3rd coordinate set to 0 "POINT(10 10 0)"}, { ALL, // 3D "POINT(10 10 20)"}, { ALL, "MULTIPOINT(11 12, 20 20)"}, { ALL, "MULTIPOINT(11 12 13, 20 20 20)"}, { ALL, "LINESTRING(10 10,20 20,50 50,34 34)"}, { ALL, "LINESTRING(10 10 20,20 20 20,50 50 50,34 34 34)"}, { ALL, "POLYGON((10 10,20 10,20 20,20 10,10 10),(5 5,5 6,6 6,6 5,5 5))"}, { ALL, "POLYGON((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0))"}, { ALL, "MULTIPOLYGON(((10 10,20 10,20 20,20 10,10 10),(5 5,5 6,6 6,6 5,5 5)),((10 10,20 10,20 20,20 10,10 10),(5 5,5 6,6 6,6 5,5 5)))"}, { ALL, "MULTIPOLYGON(((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0)),((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0)))"}, { ALL, "MULTILINESTRING((10 10,20 10,20 20,20 10,10 10),(5 5,5 6,6 6,6 5,5 5))"}, { ALL, "MULTILINESTRING((10 10 5,20 10 5,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0))"}, { ALL, "GEOMETRYCOLLECTION(POINT(10 10),POINT(20 20))"}, { ALL, "GEOMETRYCOLLECTION(POINT(10 10 20),POINT(20 20 20))"}, { ALL, "GEOMETRYCOLLECTION(LINESTRING(10 10 20,20 20 20, 50 50 50, 34 34 34),LINESTRING(10 10 20,20 20 20, 50 50 50, 34 34 34))"}, { ALL, "GEOMETRYCOLLECTION(POLYGON((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0)),POLYGON((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0)))"}, { ONLY10, // Cannot be parsed by 0.X servers "GEOMETRYCOLLECTION(MULTIPOINT(10 10 10, 20 20 20),MULTIPOINT(10 10 10, 20 20 20))"}, { EQUAL10, // PostGIs 0.X "flattens" this geometry, so it is not // equal after reparsing. "GEOMETRYCOLLECTION(MULTILINESTRING((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0)))"}, { EQUAL10,// PostGIs 0.X "flattens" this geometry, so it is not equal // after reparsing. "GEOMETRYCOLLECTION(MULTIPOLYGON(((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0)),((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0))),MULTIPOLYGON(((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0)),((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0))))"}, { ALL, "GEOMETRYCOLLECTION(POINT(10 10 20),LINESTRING(10 10 20,20 20 20, 50 50 50, 34 34 34),POLYGON((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0)))"}, { ONLY10, // Collections that contain both X and MultiX do not work on // PostGIS 0.x "GEOMETRYCOLLECTION(POINT(10 10 20),MULTIPOINT(10 10 10, 20 20 20),LINESTRING(10 10 20,20 20 20, 50 50 50, 34 34 34),POLYGON((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0)),MULTIPOLYGON(((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0)),((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0))),MULTILINESTRING((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0)))"}, { ALL,// new (correct) representation "GEOMETRYCOLLECTION EMPTY"}, // end }; /** The srid we use for the srid tests */ public static final int SRID = 4326; /** The string prefix we get for the srid tests */ public static final String SRIDPREFIX = "SRID=" + SRID + ";"; /** How much tests did fail? */ public static int failcount = 0; private static JtsBinaryParser bp = new JtsBinaryParser(); private static final JtsBinaryWriter bw = new JtsBinaryWriter(); /** The actual test method */ public static void test(String WKT, Connection[] conns, String flags) throws SQLException { System.out.println("Original: " + WKT); Geometry geom = JtsGeometry.geomFromString(WKT); String parsed = geom.toString(); System.out.println("Parsed: " + parsed); Geometry regeom = JtsGeometry.geomFromString(parsed); String reparsed = regeom.toString(); System.out.println("Re-Parsed: " + reparsed); if (!geom.equalsExact(regeom)) { System.out.println("--- Geometries are not equal!"); failcount++; } else if (!reparsed.equals(parsed)) { System.out.println("--- Text Reps are not equal!"); failcount++; } else { System.out.println("Equals: yes"); } String hexNWKT = bw.writeHexed(regeom, ValueSetter.NDR.NUMBER); System.out.println("NDRHex: " + hexNWKT); regeom = JtsGeometry.geomFromString(hexNWKT); System.out.println("ReNDRHex: " + regeom.toString()); if (!geom.equalsExact(regeom)) { System.out.println("--- Geometries are not equal!"); failcount++; } else { System.out.println("Equals: yes"); } String hexXWKT = bw.writeHexed(regeom, ValueSetter.XDR.NUMBER); System.out.println("XDRHex: " + hexXWKT); regeom = JtsGeometry.geomFromString(hexXWKT); System.out.println("ReXDRHex: " + regeom.toString()); if (!geom.equalsExact(regeom)) { System.out.println("--- Geometries are not equal!"); failcount++; } else { System.out.println("Equals: yes"); } byte[] NWKT = bw.writeBinary(regeom, ValueSetter.NDR.NUMBER); regeom = bp.parse(NWKT); System.out.println("NDR: " + regeom.toString()); if (!geom.equalsExact(regeom)) { System.out.println("--- Geometries are not equal!"); failcount++; } else { System.out.println("Equals: yes"); } byte[] XWKT = bw.writeBinary(regeom, ValueSetter.XDR.NUMBER); regeom = bp.parse(XWKT); System.out.println("XDR: " + regeom.toString()); if (!geom.equalsExact(regeom)) { System.out.println("--- Geometries are not equal!"); failcount++; } else { System.out.println("Equals: yes"); } for (int i = 0; i < conns.length; i++) { Connection connection = conns[i]; Statement statement = connection.createStatement(); int serverPostgisMajor = TestAutoregister.getPostgisMajor(statement); if ((flags == ONLY10) && serverPostgisMajor < 1) { System.out.println("PostGIS server too old, skipping test on connection " + i + ": " + connection.getCatalog()); } else { System.out.println("Testing on connection " + i + ": " + connection.getCatalog()); try { Geometry sqlGeom = viaSQL(WKT, statement); System.out.println("SQLin : " + sqlGeom.toString()); if (!geom.equalsExact(sqlGeom)) { System.out.println("--- Geometries after SQL are not equal!"); if (flags == EQUAL10 && serverPostgisMajor < 1) { System.out.println("--- This is expected with PostGIS " + serverPostgisMajor + ".X"); } else { failcount++; } } else { System.out.println("Eq SQL in: yes"); } } catch (SQLException e) { System.out.println("--- Server side error: " + e.toString()); failcount++; } try { Geometry sqlreGeom = viaSQL(parsed, statement); System.out.println("SQLout : " + sqlreGeom.toString()); if (!geom.equalsExact(sqlreGeom)) { System.out.println("--- reparsed Geometries after SQL are not equal!"); if (flags == EQUAL10 && serverPostgisMajor < 1) { System.out.println("--- This is expected with PostGIS " + serverPostgisMajor + ".X"); } else { failcount++; } } else { System.out.println("Eq SQLout: yes"); } } catch (SQLException e) { System.out.println("--- Server side error: " + e.toString()); failcount++; }
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -