⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 geometry.java

📁 postGIS是一个能够使用postSQL数据库来管理GIS数据的小程序,充分发挥了该数据库的空间管理功能,非常有用哦
💻 JAVA
字号:
/* * Geometry.java *  * PostGIS extension for PostgreSQL JDBC driver - geometry model *  * (C) 2004 Paul Ramsey, pramsey@refractions.net *  * (C) 2005 Markus Schaber, markus.schaber@logix-tt.com *  * 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, either 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. *  * You should have received a copy of the GNU Lesser General Public License * along with this library; 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: Geometry.java 2495 2006-10-02 15:58:43Z mschaber $ */package org.postgis;import java.io.Serializable;/** The base class of all geometries */public abstract class Geometry implements Serializable {    /* JDK 1.5 Serialization */    private static final long serialVersionUID = 0x100;    // OpenGIS Geometry types as defined in the OGC WKB Spec    // (May we replace this with an ENUM as soon as JDK 1.5    // has gained widespread usage?)    /** Fake type for linear ring */    public static final int LINEARRING = 0;    /**     * The OGIS geometry type number for points.     */    public static final int POINT = 1;    /**     * The OGIS geometry type number for lines.     */    public static final int LINESTRING = 2;    /**     * The OGIS geometry type number for polygons.     */    public static final int POLYGON = 3;    /**     * The OGIS geometry type number for aggregate points.     */    public static final int MULTIPOINT = 4;    /**     * The OGIS geometry type number for aggregate lines.     */    public static final int MULTILINESTRING = 5;    /**     * The OGIS geometry type number for aggregate polygons.     */    public static final int MULTIPOLYGON = 6;    /**     * The OGIS geometry type number for feature collections.     */    public static final int GEOMETRYCOLLECTION = 7;    public static final String[] ALLTYPES = new String[]{        "", // internally used LinearRing does not have any text in front of it        "POINT",        "LINESTRING",        "POLYGON",        "MULTIPOINT",        "MULTILINESTRING",        "MULTIPOLYGON",        "GEOMETRYCOLLECTION"};    /**     * The Text representations of the geometry types     */    public static String getTypeString(int type) {        if (type >= 0 && type <= 7) {            return ALLTYPES[type];        } else {            throw new IllegalArgumentException("Unknown Geometry type" + type);        }    }    // Properties common to all geometries    /**     * The dimensionality of this feature (2,3)     */    public int dimension;    /**     * Do we have a measure (4th dimension)     */    public boolean haveMeasure = false;    /**     * The OGIS geometry type of this feature. this is final as it never     * changes, it is bound to the subclass of the instance.     */    public final int type;    /**     * The spacial reference system id of this geometry, default (no srid) is -1     */    public int srid = -1;    /**     * Constructor for subclasses     *      * @param type has to be given by all subclasses.     */    protected Geometry(int type) {        this.type = type;    }    /**     * java.lang.Object hashCode implementation     */    public int hashCode() {        return dimension | (type * 4) | (srid * 32);    }    /**     * java.lang.Object equals implementation     */    public boolean equals(Object other) {        return (other != null) && (other instanceof Geometry) && equals((Geometry) other);    }    /**     * geometry specific equals implementation - only defined for non-null     * values     */    public boolean equals(Geometry other) {        return (other != null)                 && (this.dimension == other.dimension)                && (this.type == other.type)                && (this.srid == other.srid)                 && (this.haveMeasure == other.haveMeasure)                 && other.getClass().equals(this.getClass())                 && this.equalsintern(other);    }    /**     * Whether test coordinates for geometry - subclass specific code     *      * Implementors can assume that dimensin, type, srid and haveMeasure are     * equal, other != null and other is the same subclass.     */    protected abstract boolean equalsintern(Geometry other);    /**     * Return the number of Points of the geometry     */    public abstract int numPoints();    /**     * Get the nth Point of the geometry     *      * @param n the index of the point, from 0 to numPoints()-1;     * @throws ArrayIndexOutOfBoundsException in case of an emtpy geometry or     *             bad index.     */    public abstract Point getPoint(int n);    /**     * Same as getPoint(0);     */    public abstract Point getFirstPoint();    /**     * Same as getPoint(numPoints()-1);     */    public abstract Point getLastPoint();    /**     * The OGIS geometry type number of this geometry.     */    public int getType() {        return this.type;    }    /**     * Return the Type as String     */    public String getTypeString() {        return getTypeString(this.type);    }    /** Returns whether we have a measure */    public boolean isMeasured() {        return haveMeasure;    }    /**     * Queries the number of geometric dimensions of this geometry. This does     * not include measures, as opposed to the server.     *      * @return The dimensionality (eg, 2D or 3D) of this geometry.     */    public int getDimension() {        return this.dimension;    }    /**     * The OGIS geometry type number of this geometry.     */    public int getSrid() {        return this.srid;    }    /**     * Recursively sets the srid on this geometry and all contained     * subgeometries     */    public void setSrid(int srid) {        this.srid = srid;    }    public String toString() {        StringBuffer sb = new StringBuffer();        if (srid != -1) {            sb.append("SRID=");            sb.append(srid);            sb.append(';');        }        outerWKT(sb, true);        return sb.toString();    }    /**     * Render the WKT version of this Geometry (without SRID) into the given     * StringBuffer.     */    public void outerWKT(StringBuffer sb, boolean putM) {        sb.append(getTypeString());        if (putM && haveMeasure && dimension == 2) {            sb.append('M');        }        mediumWKT(sb);    }    public final void outerWKT(StringBuffer sb) {        outerWKT(sb, true);    }    /**     * Render the WKT without the type name, but including the brackets into the     * StringBuffer     */    protected void mediumWKT(StringBuffer sb) {        sb.append('(');        innerWKT(sb);        sb.append(')');    }    /**     * Render the "inner" part of the WKT (inside the brackets) into the     * StringBuffer.     */    protected abstract void innerWKT(StringBuffer SB);    /**     * backwards compatibility method     */    public String getValue() {        StringBuffer sb = new StringBuffer();        mediumWKT(sb);        return sb.toString();    }    /**     * Do some internal consistency checks on the geometry.     *      * Currently, all Geometries must have a valid dimension (2 or 3) and a     * valid type. 2-dimensional Points must have Z=0.0, as well as non-measured     * Points must have m=0.0. Composed geometries must have all equal SRID,     * dimensionality and measures, as well as that they do not contain NULL or     * inconsistent subgeometries.     *      * BinaryParser and WKTParser should only generate consistent geometries.     * BinaryWriter may produce invalid results on inconsistent geometries.     *      * @return true if all checks are passed.     */    public boolean checkConsistency() {        return (dimension >= 2 && dimension <= 3) && (type >= 0 && type <= 7);    }    /**     * Splits the SRID=4711; part of a EWKT rep if present and sets the srid.     *      * @returns value without the SRID=4711; part     */    protected String initSRID(String value) {        value = value.trim();        if (value.startsWith("SRID=")) {            int index = value.indexOf(';', 5); // sridprefix length is 5            if (index == -1) {                throw new IllegalArgumentException(                        "Error parsing Geometry - SRID not delimited with ';' ");            } else {                this.srid = Integer.parseInt(value.substring(5, index));                return value.substring(index + 1).trim();            }        } else {            return value;        }    }}

⌨️ 快捷键说明

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