jtstestparser.java

来自「Postgis是Postgres的Gis空间引擎,支持空间索引和空间操作,扩展了」· Java 代码 · 共 497 行 · 第 1/2 页

JAVA
497
字号
/* * 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++;                }

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?