Package org.geotools.data.oracle.sdo

Source Code of org.geotools.data.oracle.sdo.GeometryFixture

/*
*    GeoTools - The Open Source Java GIS Toolkit
*    http://geotools.org
*
*    (C) 2003-2008, Open Source Geospatial Foundation (OSGeo)
*   
*    This library is free software; you can redistribute it and/or
*    modify it under the terms of the GNU Lesser General Public
*    License as published by the Free Software Foundation;
*    version 2.1 of the License.
*
*    This library 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
*    Lesser General Public License for more details.
*
*    Refractions Research Inc. Can be found on the web at:
*    http://www.refractions.net/
*/
package org.geotools.data.oracle.sdo;

import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.CoordinateSequence;
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.geom.GeometryCollection;
import com.vividsolutions.jts.geom.GeometryFactory;
import com.vividsolutions.jts.geom.LineString;
import com.vividsolutions.jts.geom.LinearRing;
import com.vividsolutions.jts.geom.MultiLineString;
import com.vividsolutions.jts.geom.MultiPoint;
import com.vividsolutions.jts.geom.MultiPolygon;
import com.vividsolutions.jts.geom.Point;
import com.vividsolutions.jts.geom.Polygon;
import com.vividsolutions.jts.geom.PrecisionModel;

/**
* Construct geometry used by test cases.
* <p>
* Several examples are from the the Oracle Spatial Geometry Spec.
* </p>
*
* @see net.refractions.jspatial.jts
* @author jgarnett, Refractions Reasearch Inc.
*
* @source $URL$
* @version CVS Version
*/
public class GeometryFixture {
    GeometryFactory gf;

    /**
     * Geometry Example "2.3.1 Rectangle".
     * <p>
     * A simple rectangle as used with CAD applications
     * </p>
     * <code><pre>
     * (1,7)         (5,7)
     *   +-------------+
     *   |             |
     *   |             |
     *   +-------------+
     * (1,1)          (5,1)
     * </pre><code>
     */
    public Polygon rectangle;

    /** Polygon used for testing */
    public Polygon polygon;

    /**
     * Geometry Example "2.3.2 Polygon with Hole".
     * <p>
     * A Polygon with a Hole as follows:
     * </p>
     * <code><pre>
     *   5,13+-------------+   11,13
     *      /               \
     * 2,11+                 \
     *     | 7,10+----+10,10  \
     *     |     |    |       +13,9
     *     |     |    |       |
     *     |     |    |       |
     *     |  7,5+----+10,5   +13,5
     *  2,4+                  /
     *      \                /
     *   4,3+---------------+10,3
     * </pre></code>
     */
    public Polygon polygonWithHole;

    /**
     * Geometry Example "2.3.5 Point".
     * <p>
     * Simple Point used to test POINT_TYPE array use.
     * </p>
     * <code><pre>
     *   +   12,14
     * </pre></code>
     */
    public Point point;

    /** LineString used for testing */
    public LineString lineString;

    /** MultiPoint used for testing */
    public MultiPoint multiPoint;

    /** MultiLineString used for testing */
    public MultiLineString multiLineString;

    /** MultiPolygon used for testing */
    public MultiPolygon multiPolygon;

    /** MultiPolygon used for testing */
    public MultiPolygon multiPolygonWithHole;

    /** GeometryCollection used for testing */
    public GeometryCollection geometryCollection;

    /**
     * Construct Fixture for use with default GeometryFactory.
     */
    public GeometryFixture() {
        this(new GeometryFactory(new PrecisionModel(), -1));
    }

    /**
     * Construct Fixture for use with provided <code>GeometryFactory</code>.
     */
    public GeometryFixture(GeometryFactory geometryFactory) {
        gf = geometryFactory;
        rectangle = createRectangle();
        polygon = createPolygon();
        polygonWithHole = createPolygonWithHole();
        point = createPoint();
        lineString = createLineString();
        multiPoint = createMultiPoint();
        multiLineString = createMultiLineString();
        multiPolygon = createMultiPolygon();
        multiPolygonWithHole = createMultiPolygonWithHole();
        geometryCollection = createGeometryCollection();
    }

    /**
     * Construct a rectangle according to Geometry Examples "2.3.1 Rectangle".
     * <p>
     * A simple rectangle as used with CAD applications
     * </p>
     * <code><pre>
     * (1,7)         (5,7)
     *   +-------------+
     *   |             |
     *   |             |
     *   +-------------+
     * (1,1)          (5,1)
     * </pre><code>
     * <p>The polygon is not consturcted with an SRID (ie srid == -1)</p>
     * A Rectangle with expected encoding:</p>
     * <ul>
     * <li><b>SDO_GTYPE:</b><code>2003</code><br/>
     * 2 dimensional polygon </li> <li><b>SDO_SRID:</b><code>NULL</code></li> <li><b>SDO_POINT:</b>NULL></li> <li><b>SDO_ELEM_INFO:</b>
     * <code>(1,1003,3)</code><br/>
     * 03 indicates this is a rectangle</li> <li><b>SDO_ORDINATES:</b><code>(1,1,5,7)</code><br/>
     * bottom left and upper right</li> </ul>
     * <p>
     * SQL:
     * </p>
     * <code><pre>
     * MDSYS.SDO_GEOMETRY(
     *   2003,
     *   NULL,
     *   NULL,
     *   MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,3),
     *   MDSYS.SDO_ORDINATE_ARRAY(1,1,5,7)
     * )
     * </pre></code>
     *
     * @see GeometryFixture.rectangle
     */
    protected Polygon createRectangle() {
        Polygon rect = gf.createPolygon(ring(new double[] { 1, 1, 5, 1, 5, 7, 1, 7, 1, 1 }), null);
        return rect;
    }

    /**
     * Construct a polygon of a triangle.
     * <p>
     * Used to illustrate polyugon encoding.
     * </p>
     * <code><pre>
     *        +11,8
     *       / \
     *      /   \
     *     /     \
     * 9,5+-------+13,5
     * </pre></code>
     * <p>
     * A Rectangle with expected encoding:
     * </p>
     * <ul>
     * <li><b>SDO_GTYPE:</b><code>2003</code><br/>
     * 2 dimensional polygon</li>
     * <li><b>SDO_SRID:</b><code>NULL</code></li>
     * <li><b>SDO_POINT:</b>NULL></li>
     * <li><b>SDO_ELEM_INFO:</b><code>(1,1003,1)</code><br/>
     * 1000 for external, 03 for polygon, 1 indicates this polygon uses strait edges</li>
     * <li><b>SDO_ORDINATES:</b><code>(1,1,5,7)</code><br/>
     * bottom left and upper right</li>
     * </ul>
     * <p>
     * SQL:
     * </p>
     * <code><pre>
     * MDSYS.SDO_GEOMETRY(
     *   2003,
     *   NULL,
     *   NULL,
     *   MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1),
     *   MDSYS.SDO_ORDINATE_ARRAY(9,5, 13,5, 11,8, 9,5)
     * )
     * </pre></code>
     */
    protected Polygon createPolygon() {
        Polygon poly = gf.createPolygon(ring(new double[] { 9, 5, 13, 5, 11, 8, 9, 5 }), null);
        poly.setSRID(-1); // don't have an SRID number
        return poly;
    }

    /**
     * Construct a polygon with hole according to Geometry Examples 2.3.2.
     * <p>
     * Polygon examples used to illustrate compound encoding.
     * </p>
     * <code><pre>
     *   5,13+-------------+   11,13
     *      /               \
     * 2,11+                 \
     *     | 7,10+----+10,10  \
     *     |     |    |       +13,9
     *     |     |    |       |
     *     |     |    |       |
     *     |  7,5+----+10,5   +13,5
     *  2,4+                  /
     *      \                /
     *   4,3+---------------+10,3
     * </pre></code>
     * <p>
     * A Polygon with expected encoding:
     * </p>
     * <ul>
     * <li><b>SDO_GTYPE:</b><code>2003</code><br/>
     * 2 dimensional polygon, 3 for polygon</li>
     * <li><b>SDO_SRID:</b><code>NULL</code></li>
     * <li><b>SDO_POINT:</b>NULL></li>
     * <li><b>SDO_ELEM_INFO:</b><code>(1,1003,1,19,2003,1)</code><br/>
     * Two triplets
     * <ul>
     * <li>(1,1003,1): exterior polygon ring starting at 1</li>
     *
     * <li>(19,2003,1): interior polygon ring starting at 19</li>
     * </ul>
     * </li>
     * <li><b>SDO_ORDINATES:</b> <code><pre>
     *        (2,4, 4,3, 10,3, 13,5, 13,9, 11,13, 5,13, 2,11, 2,4,
     *         7,5, 7,10, 10,10, 10,5, 7,5)
     *     </code>
     *
     * <pre/></li>
     * </ul>
     * <p>
     * SQL:
     * </p>
     * <code><pre>
     * MDSYS.SDO_GEOMETRY(
     *   2003,
     *   NULL,
     *   NULL,
     *   MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1, 19,2003,1),
     *   MDSYS.SDO_ORDINATE_ARRAY(2,4, 4,3, 10,3, 13,5, 13,9, 11,13, 5,13, 2,11, 2,4,
     *       7,5, 7,10, 10,10, 10,5, 7,5)
     * )
     * </pre></code>
     */
    protected Polygon createPolygonWithHole() {
        Polygon poly = gf.createPolygon(ring(new double[] { 2, 4, 4, 3, 10, 3, 13, 5, 13, 9, 11,
                13, 5, 13, 2, 11, 2, 4 }), new LinearRing[] { ring(new double[] { 7, 5, 7, 10, 10,
                10, 10, 5, 7, 5 }), });
        poly.setSRID(-1); // don't have an SRID number
        return poly;
    }

    /**
     * Geometry Example "2.3.5 Point".
     * <p>
     * Simple Point used to test POINT_TYPE array use.
     * </p>
     * <code><pre>
     *   +   12,14
     * </pre></code>
     * <p>
     * Expected Encoding:
     * </p>
     * <ul>
     * <li><b>SDO_GTYPE:</b><code>2001</code><br/>
     * 2 dimensional, 0 measures, 01 for point</li>
     * <li><b>SDO_SRID:</b><code>NULL</code></li>
     * <li><b>SDO_POINT:</b><code>(12,14,NULL)</code></li>
     * <li><b>SDO_ELEM_INFO:</b><code>(1,1,1)</code></li>
     * <li><b>SDO_ORDINATES:</b><code>(12,14)</code></li>
     * </ul>
     * <p>
     * SQL:
     * </p>
     * <code><pre>
     * MDSYS.SDO_GEOMETRY(
     *   2001,
     *   NULL,
     *   MDSYS.SDO_POINT_TYPE(12, 14, NULL),
     *   NULL,
     *   NULL
     * )
     * </pre></code>
     */
    protected Point createPoint() {
        Point point = gf.createPoint(coords(new double[] { 12, 14 }));
        return point;
    }

    /**
     * LineString geometry for testing fixture. <code><pre>
     *        +4,7
     *        |
     *        |
     *        |
     * 1,2+   +4,2
     *    \   /
     *  2,1+-+3,1
     * </pre></code>
     * <p>
     * Expected Encoding:
     * </p>
     * <ul>
     * <li><b>SDO_GTYPE:</b><code>2002</code><br/>
     * 2 dimensional, 0 measures, 02 for Line</li>
     * <li><b>SDO_SRID:</b><code>NULL</code></li>
     * <li><b>SDO_POINT:</b><code>NULL</code></li>
     * <li><b>SDO_ELEM_INFO:</b><code>(1,2,5)</code></li>
     * <li><b>SDO_ORDINATES:</b><code>(1,2, 2,1, 3,1, 4,2 4,7)</code></li>
     * </ul>
     * <p>
     * SQL:
     * </p>
     * <code><pre>
     * MDSYS.SDO_GEOMETRY(
     *   2002,
     *   NULL,
     *   NULL,
     *   (1,2,5),
     *   (1,2, 2,1, 3,1, 4,2 4,7)
     * )
     * </pre></code>
     */
    protected LineString createLineString() {
        LineString lineString = gf.createLineString(coords(new double[] { 1, 2, 2, 1, 3, 1, 4, 2,
                4, 7 }));
        return lineString;
    }

    /**
     * MultiPoint geometry for testing fixture. <code><pre>
     *
     *      5,5+
     *
     *    3,3+
     *
     *  2,2+
     * 1,1+
     * </pre></code>
     * <p>
     * Expected Encoding:
     * </p>
     * <ul>
     * <li><b>SDO_GTYPE:</b><code>2004</code><br/>
     * 2 dimensional, 0 measures, 05 for MultiPoint</li>
     * <li><b>SDO_SRID:</b><code>NULL</code></li>
     * <li><b>SDO_POINT:</b><code>NULL</code></li>
     * <li><b>SDO_ELEM_INFO:</b><code>(1,1,4)</code></li>
     * <li><b>SDO_ORDINATES:</b><code>(1,1, 2,2, 3,3, 5,5)</code></li>
     * </ul>
     * <p>
     * SQL:
     * </p>
     * <code><pre>
     * MDSYS.SDO_GEOMETRY(
     *   2005,
     *   NULL,
     *   NULL,
     *   (1,1,4),
     *   (1,1, 2,2, 3,3, 5,5)
     * )
     * </pre></code>
     */
    protected MultiPoint createMultiPoint() {
        MultiPoint multiPoint = gf
                .createMultiPoint(coords(new double[] { 1, 1, 2, 2, 3, 3, 5, 5 }));
        return multiPoint;
    }

    /**
     * MultiLineString geometry for testing fixture. <code><pre>
     *  2,7+==+==+5,7
     *        |4,7
     *        |
     *        |
     * 1,2+   +4,2
     *    \   /
     *  2,1+-+3,1
     * </pre></code>
     * <p>
     * Expected Encoding:
     * </p>
     * <ul>
     * <li><b>SDO_GTYPE:</b><code>2005</code><br/>
     * 2 dimensional, 0 measures, 05 for MultiLine</li>
     * <li><b>SDO_SRID:</b><code>NULL</code></li>
     * <li><b>SDO_POINT:</b><code>NULL</code></li>
     * <li><b>SDO_ELEM_INFO:</b><code>(1,2,1,11,2,1)</code><br/>
     * Two triplets
     * <ul>
     * <li>(1,2,1): linestring(2) of straight lines(1) starting at 1</li>
     *
     * <li>(11,2,1): linestring(2) of straight lines(1) starting at 1</li>
     * </ul>
     * </li>
     * <li><b>SDO_ORDINATES:</b><code>(1,2, 2,1, 3,1, 4,2 4,7,
     *                                 2,7, 4,7, 5,7)</code></li>
     * </ul>
     * <p>
     * SQL:
     * </p>
     * <code><pre>
     * MDSYS.SDO_GEOMETRY(
     *   2005,
     *   NULL,
     *   NULL,
     *   (1,2,1,11,2,1),
     *   (1,2, 2,1, 3,1, 4,2 4,7, 2,7, 4,7, 5,7)
     * )
     * </pre></code>
     */
    protected MultiLineString createMultiLineString() {
        LineString line1 = gf
                .createLineString(coords(new double[] { 1, 2, 2, 1, 3, 1, 4, 2, 4, 7 }));
        LineString line2 = gf.createLineString(coords(new double[] { 2, 7, 4, 7, 5, 7 }));
        MultiLineString multiLineString = gf
                .createMultiLineString(new LineString[] { line1, line2 });

        return multiLineString;
    }

    /**
     * Construct a multipolyugon with a square and a triangle.
     * <p>
     * Used to illustrate multi polyugon encoding.
     * </p>
     * <code><pre>
     *
     * 2,9+------+7,9  
     *    |      |      +11,8
     *    |      |     / \
     *    |      |    /   \
     *    |      |9,5-----+13,5
     *    |      |
     * 2,3+------+7,3
     * </pre></code>
     * <p>
     * A MultiPolygon with expected encoding:
     * </p>
     * <ul>
     * <li><b>SDO_GTYPE:</b><code>2006</code><br/>
     * 2 dimensional polygon, 6 for multi polygon</li>
     * <li><b>SDO_SRID:</b><code>NULL</code></li>
     * <li><b>SDO_POINT:</b>NULL></li>
     * <li><b>SDO_ELEM_INFO:</b><code>(1,1003,1,11,1003,1)</code><br/>
     * Three triplets
     * <ul>
     * <li>(1,1003,1): exterior(1000) polygon(3) starting at 1 with straight edges(1)</li>
     *
     * <li>(11,1003,1): exterior(1000) polygon(3) starting at 11 with straight edges(1)</li>
     * </ul>
     * </li>
     * <li><b>SDO_ORDINATES:</b> <code><pre>
     *        (2,3, 7,3, 7,9, 2,9, 2,3,
     *         9,5, 13,5, 11,5, 9,5)
     *     </code>
     *
     * <pre/></li>
     * </ul>
     * <p>
     * SQL:
     * </p>
     * <code><pre>
     * MDSYS.SDO_GEOMETRY(
     *   2006,
     *   NULL,
     *   NULL,
     *   MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1, 11,1003,1),
     *   MDSYS.SDO_ORDINATE_ARRAY(2,3, 7,3, 7,9, 2,9, 2,3,
     *         9,5, 13,5, 11,5, 9,5)
     * )
     * </pre></code>
     */
    protected MultiPolygon createMultiPolygon() {
        Polygon poly1 = gf.createPolygon(ring(new double[] { 2, 3, 7, 3, 7, 9, 2, 9, 2, 3 }), null);
        Polygon poly2 = gf.createPolygon(ring(new double[] { 9, 5, 13, 5, 11, 8, 9, 5 }), null);
        MultiPolygon multiPolygon = gf.createMultiPolygon(new Polygon[] { poly1, poly2 });
        return multiPolygon;
    }

    /**
     * Construct a multipolyugon with a square with a hole and a triangle.
     * <p>
     * Used to illustrate multi polyugon encoding.
     * </p>
     * <code><pre>
     *
     * 2,9+-------+7,9  
     *    |3,8 6,8|        +11,8
     *    | +---+ |      / \
     *    | |  /  |     /   \
     *    | | /   |    /     \
     *    | +     |9,5+-------+13,5
     *    |3,4    |
     * 2,3+-------+7,3
     * </pre></code>
     * <p>
     * A MultiPolygon with expected encoding:
     * </p>
     * <ul>
     * <li><b>SDO_GTYPE:</b><code>2007</code><br/>
     * 2 dimensional, 6 for multipolygon</li>
     * <li><b>SDO_SRID:</b><code>0</code></li>
     * <li><b>SDO_POINT:</b>NULL></li>
     * <li><b>SDO_ELEM_INFO:</b><code>(1,1003,1,11,2003,1,19,1003,1)</code><br/>
     * Two triplets
     * <ul>
     * <li>(1,1003,1): exterior(1000) polygon(3) starting at 1 with straight edges(1)
     * <ul>
     * <li>(1,2003,1): interior(2000) polygon(3) starting at 11 with straight edges(1)</li>
     * </ul>
     * </li>
     *
     * <li>(11,1003,1): exterior(1000) polygon(3) starting at 19 with straight edges(1)</li>
     * </ul>
     * </li>
     * <li><b>SDO_ORDINATES:</b> <code><pre>
     *        (2,3, 7,3, 7,9, 2,9, 2,3,
     *         3,4, 3,8, 6,8, 3,4,
     *         9,5, 13,5, 11,8, 9,5)
     *     </code>
     *
     * <pre/></li>
     * </ul>
     * <p>
     * SQL:
     * </p>
     * <code><pre>
     * MDSYS.SDO_GEOMETRY(
     *   2006,
     *   NULL,
     *   NULL,
     *   MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1,11,2003,1,19,1003,1),
     *   MDSYS.SDO_ORDINATE_ARRAY(2,3, 7,3, 7,9, 2,9, 2,3,
     *         3,4, 3,8, 6,8, 3,4,
     *         9,5, 13,5, 11,8, 9,5)
     * )
     * </pre></code>
     */
    protected MultiPolygon createMultiPolygonWithHole() {
        Polygon poly1 = gf.createPolygon(ring(new double[] { 2, 3, 7, 3, 7, 9, 2, 9, 2, 3 }),
                new LinearRing[] { ring(new double[] { 3, 4, 6, 8, 3, 8, 3, 4 }), });
        Polygon poly2 = gf.createPolygon(ring(new double[] { 9, 5, 11, 8, 13, 5, 9, 5 }), null);
        MultiPolygon multiPolygon = gf.createMultiPolygon(new Polygon[] { poly1, poly2 });
        return multiPolygon;
    }

    /**
     * General Geometry Collection - with point, line, polygon, and a polygonWithHole. <code><pre>
     *                         
     *                5,5+-------+9,5
     *                   |  +6,4/
     *                   | /|  /
     *                   |/ | /
     *  2,3 +---+3,3  5,3+--+/6,3
     *      |2,2|        |  /
     * 1,2+ +---+3,2     | /
     *     \             |/
     * 1,1+ +2,1      5,1+
     * </pre></code> A GeometryCollection with expected encoding:</p>
     * <ul>
     * <li><b>SDO_GTYPE:</b><code>2004</code><br/>
     * 2000 dimensional polygon, 000 for no LRS, 4 for geometry collection</li>
     * <li><b>SDO_SRID:</b><code>0</code></li>
     * <li><b>SDO_POINT:</b>NULL></li>
     * <li><b>SDO_ELEM_INFO:</b> <code>(1,1,1, 3,2,1, 7,1003,1, 15,1003,1, 23,2003,1)</code><br/>
     * Two triplets
     * <ul>
     * <li>(1,1,1): starting at 1, a point(1) (single(1))</li>
     * <li>(3,2,1): starting at 3, a line(2) with straight segments(1)</li>
     * <li>(7,1003,1): starting at 5, an exterior(1000), polygon(3)</li>
     *
     * <li>(15,1003,1, 23,2003,1) polygon with:
     * <ul>
     * <li>starting at 15 and exterior(1003) and straight edges 1</li>
     * <li>starting at 23 and interior(2003) and straight edges 1</li>
     * </ul>
     * </li>
     * </ul>
     * <li><b>SDO_ORDINATES:</b> <code><pre>
     *        (1,1,
     *         1,2, 2,1,
     *         2,2, 3,2, 3,3, 2,3, 2,2
     *         5,1, 5,5, 9,5, 5,1,
     *         5,3, 6,4, 6,3, 5,3)
     *     </code>
     *
     * <pre/></li>
     * </ul>
     * <p>
     * SQL:
     * </p>
     * <code><pre>
     * MDSYS.SDO_GEOMETRY(
     *   2004,
     *   NULL,
     *   NULL,
     *   MDSYS.SDO_ELEM_INFO_ARRAY(1,1,1, 3,2,1, 7,1003,1, 17,1003,1, 25,2003,1),
     *   MDSYS.SDO_ORDINATE_ARRAY(
     *         1,1,
     *         1,2, 2,1,
     *         2,2, 3,2, 3,3, 2,3, 2,2,
     *         5,1, 5,5, 9,5, 5,1,
     *         5,3, 6,4, 6,3, 5,3
     *   )
     * )
     * </pre></code>
     */
    protected GeometryCollection createGeometryCollection() {
        return gf.createGeometryCollection(new Geometry[] {
                gf.createPoint(coords(new double[] { 1, 1 })),
                gf.createLineString(coords(new double[] { 1, 2, 2, 1 })),
                gf.createPolygon(ring(new double[] { 2, 2, 3, 2, 3, 3, 2, 3, 2, 2 }), null),
                gf.createPolygon(ring(new double[] { 5, 1, 9, 5, 5, 5, 5, 1 }),
                        new LinearRing[] { ring(new double[] { 5, 3, 6, 4, 6, 3, 5, 3, }) }) });
    }

    //
    // Utility Methods
    //
    protected LinearRing ring(double coords[]) {
        CoordinateSequence seq = coords(coords);
        return gf.createLinearRing(seq);
    }

    protected CoordinateSequence coords(double coords[]) {
        Coordinate array[] = new Coordinate[coords.length / 2];
        for (int i = 0; i < array.length; i++) {
            array[i] = new Coordinate(coords[i * 2], coords[i * 2 + 1]);
        }
        return gf.getCoordinateSequenceFactory().create(array);
    }
}
TOP

Related Classes of org.geotools.data.oracle.sdo.GeometryFixture

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.