亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? pljtswriter.java

?? Postgis是Postgres的Gis空間引擎,支持空間索引和空間操作,擴展了很多空間類型
?? JAVA
字號:
/* * JtsBinaryWriter.java *  * PostGIS extension for PostgreSQL JDBC driver - Binary Writer *  * (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: JtsBinaryWriter.java 2410 2006-07-19 13:31:18Z mschaber $ */package org.postgis.pljava;import java.sql.SQLException;import java.sql.SQLOutput;import com.vividsolutions.jts.geom.CoordinateSequence;import com.vividsolutions.jts.geom.Geometry;import com.vividsolutions.jts.geom.GeometryCollection;import com.vividsolutions.jts.geom.LineString;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;/** * Create binary representation of geometries. Currently, only text rep (hexed) * implementation is tested. Supports only 2 dimensional geometries. *  * It should be easy to add char[] and CharSequence ByteGetter instances, * although the latter one is not compatible with older jdks. *  * I did not implement real unsigned 32-bit integers or emulate them with long, * as both java Arrays and Strings currently can have only 2^31-1 elements * (bytes), so we cannot even get or build Geometries with more than approx. * 2^28 coordinates (8 bytes each). *  * @author markus.schaber@logi-track.com *  */public class PLJtsWriter {    public void writeBinary(Geometry geom, SQLOutput dest) throws SQLException {        writeGeometry(geom, dest);    }    /** Parse a geometry starting at offset.      * @throws SQLException */    protected void writeGeometry(Geometry geom, SQLOutput dest) throws SQLException {        // TODO: Add bbox        // TODO: Add proper handling of Measures                        final int dimension = getCoordDim(geom);        if (dimension < 2 || dimension > 4) {            throw new IllegalArgumentException("Unsupported geometry dimensionality: " + dimension);        }                // write typeword        final int plaintype = getWKBType(geom);        byte typeword = (byte)plaintype;        if (dimension == 3 || dimension == 4) {            typeword |= 0x20;        }        if (dimension == 4) {            typeword |= 0x10;        }        if (checkSrid(geom)) {            typeword |= 0x40;        }        dest.writeByte(typeword);        if (checkSrid(geom)) {            dest.writeInt(geom.getSRID());        }        switch (plaintype) {        case org.postgis.Geometry.POINT:            writePoint((Point) geom, dest);            break;        case org.postgis.Geometry.LINESTRING:            writeLineString((LineString) geom, dest);            break;        case org.postgis.Geometry.POLYGON:            writePolygon((Polygon) geom, dest);            break;        case org.postgis.Geometry.MULTIPOINT:            writeMultiPoint((MultiPoint) geom, dest);            break;        case org.postgis.Geometry.MULTILINESTRING:            writeMultiLineString((MultiLineString) geom, dest);            break;        case org.postgis.Geometry.MULTIPOLYGON:            writeMultiPolygon((MultiPolygon) geom, dest);            break;        case org.postgis.Geometry.GEOMETRYCOLLECTION:            writeCollection((GeometryCollection) geom, dest);            break;        default:            throw new IllegalArgumentException("Unknown Geometry Type: " + plaintype);        }    }    public static int getWKBType(Geometry geom) {        if (geom instanceof Point) {            return org.postgis.Geometry.POINT;        } else if (geom instanceof com.vividsolutions.jts.geom.LineString) {            return org.postgis.Geometry.LINESTRING;        } else if (geom instanceof com.vividsolutions.jts.geom.Polygon) {            return org.postgis.Geometry.POLYGON;        } else if (geom instanceof MultiPoint) {            return org.postgis.Geometry.MULTIPOINT;        } else if (geom instanceof MultiLineString) {            return org.postgis.Geometry.MULTILINESTRING;        } else if (geom instanceof com.vividsolutions.jts.geom.MultiPolygon) {            return org.postgis.Geometry.MULTIPOLYGON;        } else if (geom instanceof com.vividsolutions.jts.geom.GeometryCollection) {            return org.postgis.Geometry.GEOMETRYCOLLECTION;        } else {            throw new IllegalArgumentException("Unknown Geometry Type: " + geom.getClass().getName());        }    }    /**     * Writes a "slim" Point (without endiannes, srid ant type, only the     * ordinates and measure. Used by writeGeometry.     * @throws SQLException      */    private void writePoint(Point geom, SQLOutput dest) throws SQLException {        writeCoordinates(geom.getCoordinateSequence(), getCoordDim(geom), dest);    }    /**     * Write a Coordinatesequence, part of LinearRing and Linestring, but not     * MultiPoint!     * @throws SQLException      */    private void writeCoordinates(CoordinateSequence seq, int dims, SQLOutput dest) throws SQLException {        for (int i = 0; i < seq.size(); i++) {            for (int d = 0; d < dims; d++) {                dest.writeDouble(seq.getOrdinate(i, d));            }        }    }    private void writeMultiPoint(MultiPoint geom, SQLOutput dest) throws SQLException {        dest.writeInt(geom.getNumPoints());        for (int i = 0; i < geom.getNumPoints(); i++) {            writeGeometry(geom.getGeometryN(i), dest);        }    }    private void writeLineString(LineString geom, SQLOutput dest) throws SQLException {        dest.writeInt(geom.getNumPoints());        writeCoordinates(geom.getCoordinateSequence(), getCoordDim(geom), dest);    }    private void writePolygon(Polygon geom, SQLOutput dest) throws SQLException {        dest.writeInt(geom.getNumInteriorRing() + 1);        writeLineString(geom.getExteriorRing(), dest);        for (int i = 0; i < geom.getNumInteriorRing(); i++) {            writeLineString(geom.getInteriorRingN(i), dest);        }    }    private void writeMultiLineString(MultiLineString geom, SQLOutput dest) throws SQLException {        writeGeometryArray(geom, dest);    }    private void writeMultiPolygon(MultiPolygon geom, SQLOutput dest) throws SQLException {        writeGeometryArray(geom, dest);    }    private void writeCollection(GeometryCollection geom, SQLOutput dest) throws SQLException {        writeGeometryArray(geom, dest);    }    private void writeGeometryArray(Geometry geom, SQLOutput dest) throws SQLException {        dest.writeInt(geom.getNumGeometries());        for (int i = 0; i < geom.getNumGeometries(); i++) {            writeGeometry(geom.getGeometryN(i), dest);        }    }    /** Estimate how much bytes a geometry will need in WKB. */    protected int estimateBytes(Geometry geom) {        // Todo: include bbox        int result = 0;        // write type byte        result += 1;        if (checkSrid(geom)) {            result += 4;        }        switch (getWKBType(geom)) {        case org.postgis.Geometry.POINT:            result += estimatePoint((Point) geom);            break;        case org.postgis.Geometry.LINESTRING:            result += estimateLineString((LineString) geom);            break;        case org.postgis.Geometry.POLYGON:            result += estimatePolygon((Polygon) geom);            break;        case org.postgis.Geometry.MULTIPOINT:            result += estimateMultiPoint((MultiPoint) geom);            break;        case org.postgis.Geometry.MULTILINESTRING:            result += estimateMultiLineString((MultiLineString) geom);            break;        case org.postgis.Geometry.MULTIPOLYGON:            result += estimateMultiPolygon((MultiPolygon) geom);            break;        case org.postgis.Geometry.GEOMETRYCOLLECTION:            result += estimateCollection((GeometryCollection) geom);            break;        default:            throw new IllegalArgumentException("Unknown Geometry Type: " + getWKBType(geom));        }        return result;    }    private boolean checkSrid(Geometry geom) {        final int srid = geom.getSRID();        // SRID is default 0 with jts geometries        return (srid != -1) && (srid != 0);    }    private int estimatePoint(Point geom) {        return 8 * getCoordDim(geom);    }    /** Write an Array of "full" Geometries */    private int estimateGeometryArray(Geometry container) {        int result = 0;        for (int i = 0; i < container.getNumGeometries(); i++) {            result += estimateBytes(container.getGeometryN(i));        }        return result;    }    /**     * Estimate an Array of "slim" Points (without endianness and type, part of     * LinearRing and Linestring, but not MultiPoint!     */    private int estimatePointArray(int length, Point example) {        // number of points        int result = 4;        // And the amount of the points itsself, in consistent geometries        // all points have equal size.        if (length > 0) {            result += length * estimatePoint(example);        }        return result;    }    /** Estimate an array of "fat" Points */    private int estimateMultiPoint(MultiPoint geom) {        // int size        int result = 4;        if (geom.getNumGeometries() > 0) {            // We can shortcut here, compared to estimateGeometryArray, as all            // subgeoms have the same fixed size            result += geom.getNumGeometries() * estimateBytes(geom.getGeometryN(0));        }        return result;    }    private int estimateLineString(LineString geom) {        if (geom == null || geom.getNumGeometries() == 0) {            return 0;        } else {            return estimatePointArray(geom.getNumPoints(), geom.getStartPoint());        }    }    private int estimatePolygon(Polygon geom) {        // int length        int result = 4;        result += estimateLineString(geom.getExteriorRing());        for (int i = 0; i < geom.getNumInteriorRing(); i++) {            result += estimateLineString(geom.getInteriorRingN(i));        }        return result;    }    private int estimateMultiLineString(MultiLineString geom) {        // 4-byte count + subgeometries        return 4 + estimateGeometryArray(geom);    }    private int estimateMultiPolygon(MultiPolygon geom) {        // 4-byte count + subgeometries        return 4 + estimateGeometryArray(geom);    }    private int estimateCollection(GeometryCollection geom) {        // 4-byte count + subgeometries        return 4 + estimateGeometryArray(geom);    }    public static final int getCoordDim(Geometry geom) {        // TODO: Fix geometries with more dimensions        // geom.getFactory().getCoordinateSequenceFactory()        if (geom == null) {            return 0;        } else {            return 2;        }    }}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色婷婷av一区二区三区之一色屋| 亚洲精品一区二区三区精华液| 欧美肥胖老妇做爰| 国产精品久久一级| 九一久久久久久| 欧美人与z0zoxxxx视频| 国产精品久久久久婷婷| 国模娜娜一区二区三区| 欧美日韩一区三区| 日韩理论片一区二区| 国产一区二区三区四区五区美女| 欧美调教femdomvk| 中文字幕一区二区三区av| 国产一区在线精品| 欧美成人精品1314www| 日韩在线卡一卡二| 欧美亚洲动漫制服丝袜| 亚洲精品中文字幕在线观看| 国产成人综合在线观看| 精品国产伦一区二区三区观看方式| 亚洲bdsm女犯bdsm网站| 欧美丝袜第三区| 亚洲精品国产精品乱码不99| 粉嫩13p一区二区三区| 欧美精品一区二区三区很污很色的 | 亚洲欧美一区二区三区久本道91| 国产专区欧美精品| 26uuu成人网一区二区三区| 蜜桃av一区二区三区| 欧美一级片在线看| 日韩激情在线观看| 日韩西西人体444www| 蜜臀av性久久久久蜜臀aⅴ流畅 | 国产99久久久精品| 国产午夜亚洲精品不卡| 国产精品18久久久久久vr| 久久日一线二线三线suv| 国产中文一区二区三区| 国产亚洲人成网站| 成人黄色小视频| 亚洲靠逼com| 欧美精品一二三四| 乱一区二区av| 国产精品沙发午睡系列990531| 99久久综合精品| 亚洲男女一区二区三区| 欧美午夜精品电影| 美女在线观看视频一区二区| 久久久.com| 91浏览器打开| 亚洲成人自拍一区| 日韩免费电影一区| 成人午夜视频网站| 一区二区三区免费网站| 欧美一区二区免费视频| 国产一区二区网址| 亚洲欧美国产77777| 777a∨成人精品桃花网| 国产曰批免费观看久久久| 亚洲欧洲av在线| 欧美猛男gaygay网站| 国产美女一区二区三区| 亚洲色图19p| 欧美一级精品大片| 不卡av免费在线观看| 五月综合激情婷婷六月色窝| 2021久久国产精品不只是精品| 99精品热视频| 日韩电影在线观看一区| 国产精品乱人伦中文| 欧美日韩国产大片| 国产高清成人在线| 日日摸夜夜添夜夜添亚洲女人| 日本一区二区免费在线观看视频| 91成人国产精品| 国产一区二区三区综合| 亚洲高清视频的网址| 欧美国产一区二区| 欧美一区二区三区性视频| av电影天堂一区二区在线 | 国产激情91久久精品导航| 亚洲卡通动漫在线| 国产亚洲自拍一区| 欧美日韩不卡视频| 色综合久久88色综合天天免费| 美国十次综合导航| 亚洲图片一区二区| 日韩伦理免费电影| 久久久不卡影院| 日韩午夜小视频| 欧美日韩一卡二卡| 99久久伊人久久99| 国产电影一区二区三区| 久久精品久久精品| 丝袜美腿亚洲一区二区图片| 亚洲欧洲日本在线| 欧美国产一区二区在线观看| 欧美电影免费提供在线观看| 欧美日韩精品专区| 在线观看视频一区| 色悠久久久久综合欧美99| www.欧美.com| 波多野结衣一区二区三区 | 亚洲国产精品ⅴa在线观看| 欧美一级免费大片| 7777精品久久久大香线蕉| 欧美体内she精高潮| 色综合久久久久| 色综合中文综合网| 国产99久久久国产精品免费看 | 成人毛片在线观看| 豆国产96在线|亚洲| 国产99久久久国产精品潘金| 国产激情视频一区二区三区欧美| 国内精品国产成人国产三级粉色| 久久99精品国产.久久久久 | 日韩国产欧美三级| 午夜成人在线视频| 美女国产一区二区三区| 久久成人精品无人区| 国产最新精品免费| 国产激情一区二区三区| 成人激情av网| 色婷婷综合久色| 91福利视频久久久久| 欧美色爱综合网| 欧美一卡2卡3卡4卡| 久久久精品黄色| 亚洲欧美自拍偷拍| 一级做a爱片久久| 亚洲成a天堂v人片| 美女免费视频一区| 丁香另类激情小说| 在线一区二区三区四区五区 | 一本在线高清不卡dvd| 色呦呦一区二区三区| 欧美久久久久久久久| 日韩欧美综合一区| 中文字幕不卡在线| 亚洲国产精品视频| 激情文学综合丁香| 色综合久久九月婷婷色综合| 91精品午夜视频| 国产网站一区二区| 亚洲成av人片在www色猫咪| 久久精品国产一区二区三区免费看| 国产激情一区二区三区桃花岛亚洲| 99久久精品99国产精品| 欧美妇女性影城| 国产精品日韩精品欧美在线| 亚洲成人一二三| 国产成人免费高清| 欧美性欧美巨大黑白大战| 26uuu国产日韩综合| 一区二区三区在线观看网站| 黄网站免费久久| 欧日韩精品视频| 久久久精品免费观看| 亚洲第一电影网| 国产99久久久国产精品潘金 | 午夜精品久久久久影视| 国产成人av一区二区三区在线 | 欧美在线视频你懂得| 久久久久久影视| 丝袜亚洲另类丝袜在线| 99精品视频一区二区三区| 精品国产欧美一区二区| 亚洲国产一二三| 福利91精品一区二区三区| 欧美一区二区三区白人| 亚洲尤物在线视频观看| 成人高清视频在线| 精品国产成人系列| 图片区小说区区亚洲影院| eeuss鲁一区二区三区| 日韩欧美一区二区视频| 一级做a爱片久久| 9i在线看片成人免费| 精品成a人在线观看| 无吗不卡中文字幕| 在线亚洲一区二区| 国产精品卡一卡二| 国产a级毛片一区| 久久综合一区二区| 久久福利视频一区二区| 91麻豆精品国产91久久久资源速度| 亚洲欧美在线视频观看| 粉嫩一区二区三区性色av| 久久久久久久综合日本| 久久草av在线| 日韩美女视频在线| 美女视频黄a大片欧美| 7777精品久久久大香线蕉| 婷婷久久综合九色综合伊人色| 色欧美片视频在线观看| 国产专区综合网| 日韩精品一区二区三区中文精品| 日韩国产精品91| 欧美一级日韩免费不卡| 久久激情五月婷婷|