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

📄 point.java

📁 postGIS是一个能够使用postSQL数据库来管理GIS数据的小程序,充分发挥了该数据库的空间管理功能,非常有用哦
💻 JAVA
字号:
/* * Point.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: Point.java 2345 2006-05-10 10:47:35Z mschaber $ */package org.postgis;import org.postgresql.util.PGtokenizer;import java.sql.SQLException;public class Point extends Geometry {    /* JDK 1.5 Serialization */    private static final long serialVersionUID = 0x100;    public static final boolean CUTINTS = true;    public int hashCode() {        return super.hashCode() ^ hashCode(x) ^ hashCode(y) ^ hashCode(z) ^ hashCode(m);    }    public static int hashCode(double value) {        long v = Double.doubleToLongBits(value);        return (int) (v ^ (v >>> 32));    }    protected boolean equalsintern(Geometry otherg) {        Point other = (Point) otherg;        return equals(other);    }    public final boolean equals(Point other) {        boolean xequals = x == other.x;        boolean yequals = y == other.y;        boolean zequals = ((dimension == 2) || (z == other.z));        boolean mequals = ((haveMeasure == false) || (m == other.m));        boolean result = xequals && yequals && zequals && mequals;        return result;    }    public Point getPoint(int index) {        if (index == 0) {            return this;        } else {            throw new ArrayIndexOutOfBoundsException("Point only has a single Point! " + index);        }    }    /** Optimized versions for this special case */    public Point getFirstPoint() {        return this;    }    /** Optimized versions for this special case */    public Point getLastPoint() {        return this;    }    public int numPoints() {        return 1;    }    /**     * The X coordinate of the point.     * In most long/lat systems, this is the longitude.     */    public double x;    /**     * The Y coordinate of the point.     * In most long/lat systems, this is the latitude.     */    public double y;    /**     * The Z coordinate of the point.     * In most long/lat systems, this is a radius from the      * center of the earth, or the height / elevation over     * the ground.     */    public double z;    /**     * The measure of the point.     */    public double m = 0.0;    public Point() {        super(POINT);    }    /** Constructs a new Point     * @param x the longitude / x ordinate     * @param y the latitude / y ordinate     * @param z the radius / height / elevation / z ordinate     */    public Point(double x, double y, double z) {        this();        this.x = x;        this.y = y;        this.z = z;        dimension = 3;    }    /** Constructs a new Point     * @param x the longitude / x ordinate     * @param y the latitude / y ordinate     */    public Point(double x, double y) {        this();        this.x = x;        this.y = y;        this.z = 0.0;        dimension = 2;    }    /**     * Construct a Point from EWKT.     *      * (3D and measures are legal, but SRID is not allowed).     */    public Point(String value) throws SQLException {        this(value, false);    }    /**     * Construct a Point     *      * @param value The text representation of this point     * @param haveM Hint whether we have a measure. This is used by other     *            geometries parsing inner points where we only get "1 2 3 4"     *            like strings without the "POINT(" and ")" stuff. If there     *            acutally is a POINTM prefix, this overrides the given value.     *            However, POINT does not set it to false, as they can be     *            contained in measured collections, as in     *            "GEOMETRYCOLLECTIONM(POINT(0 0 0))".     */    protected Point(String value, boolean haveM) throws SQLException {        this();        value = initSRID(value);        if (value.indexOf("POINTM") == 0) {            haveM = true;            value = value.substring(6).trim();        } else if (value.indexOf("POINT") == 0) {            value = value.substring(5).trim();        }        PGtokenizer t = new PGtokenizer(PGtokenizer.removePara(value), ' ');        try {            x = Double.valueOf(t.getToken(0)).doubleValue();            y = Double.valueOf(t.getToken(1)).doubleValue();            haveM |= t.getSize() == 4;            if ((t.getSize() == 3 && !haveM) || (t.getSize() == 4)) {                z = Double.valueOf(t.getToken(2)).doubleValue();                dimension = 3;            } else {                dimension = 2;            }            if (haveM) {                m = Double.valueOf(t.getToken(dimension)).doubleValue();            }        } catch (NumberFormatException e) {            throw new SQLException("Error parsing Point: " + e.toString());        }        haveMeasure = haveM;    }    public void innerWKT(StringBuffer sb) {        sb.append(x);        if (CUTINTS)            cutint(sb);        sb.append(' ');        sb.append(y);        if (CUTINTS)            cutint(sb);        if (dimension == 3) {            sb.append(' ');            sb.append(z);            if (CUTINTS)                cutint(sb);        }        if (haveMeasure) {            sb.append(' ');            sb.append(m);            if (CUTINTS)                cutint(sb);        }    }    private static void cutint(StringBuffer sb) {        int l = sb.length() - 2;        if ((sb.charAt(l + 1) == '0') && (sb.charAt(l) == '.')) {            sb.setLength(l);        }    }    public double getX() {        return x;    }    public double getY() {        return y;    }    public double getZ() {        return z;    }    public double getM() {        return m;    }    public void setX(double x) {        this.x = x;    }    public void setY(double y) {        this.y = y;    }    public void setZ(double z) {        this.z = z;    }    public void setM(double m) {        haveMeasure = true;        this.m = m;    }    public void setX(int x) {        this.x = x;    }    public void setY(int y) {        this.y = y;    }    public void setZ(int z) {        this.z = z;    }    public double distance(Point other) {        double tx, ty, tz;        if (this.dimension != other.dimension) {            throw new IllegalArgumentException("Points have different dimensions!");        }        tx = this.x - other.x;        switch (this.dimension) {        case 1 :            return Math.sqrt(tx * tx);        case 2 :            ty = this.y - other.y;            return Math.sqrt(tx * tx + ty * ty);        case 3 :            ty = this.y - other.y;            tz = this.z - other.z;            return Math.sqrt(tx * tx + ty * ty + tz * tz);        default :            throw new IllegalArgumentException("Illegal dimension of Point" + this.dimension);        }    }    public boolean checkConsistency() {        return super.checkConsistency() && (this.dimension == 3 || this.z == 0.0)                && (this.haveMeasure || this.m == 0.0);    }}

⌨️ 快捷键说明

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