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

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

?? binarywriter.java

?? postGIS是一個能夠使用postSQL數據庫來管理GIS數據的小程序,充分發揮了該數據庫的空間管理功能,非常有用哦
?? JAVA
字號:
/* * BinaryWriter.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: BinaryWriter.java 2497 2006-10-02 23:26:34Z mschaber $ */package org.postgis.binary;import org.postgis.Geometry;import org.postgis.GeometryCollection;import org.postgis.LineString;import org.postgis.LinearRing;import org.postgis.MultiLineString;import org.postgis.MultiPoint;import org.postgis.MultiPolygon;import org.postgis.Point;import org.postgis.Polygon;/** * Create binary representation of geometries. Currently, only text rep (hexed) * implementation is tested. *  * 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 BinaryWriter {    /**     * Get the appropriate ValueGetter for my endianness     *      * @param bytes The appropriate Byte Getter     *      * @return the ValueGetter     */    public static ValueSetter valueSetterForEndian(ByteSetter bytes, byte endian) {        if (endian == ValueSetter.XDR.NUMBER) { // XDR            return new ValueSetter.XDR(bytes);        } else if (endian == ValueSetter.NDR.NUMBER) {            return new ValueSetter.NDR(bytes);        } else {            throw new IllegalArgumentException("Unknown Endian type:" + endian);        }    }    /**     * Write a hex encoded geometry     *      * Is synchronized to protect offset counter. (Unfortunately, Java does not     * have neither call by reference nor multiple return values.) This is a     * TODO item.     *      * The geometry you put in must be consistent, geom.checkConsistency() must     * return true. If not, the result may be invalid WKB.     *      * @see Geometry#checkConsistency() the consistency checker     */    public synchronized String writeHexed(Geometry geom, byte REP) {        int length = estimateBytes(geom);        ByteSetter.StringByteSetter bytes = new ByteSetter.StringByteSetter(length);        writeGeometry(geom, valueSetterForEndian(bytes, REP));        return bytes.result();    }    public synchronized String writeHexed(Geometry geom) {        return writeHexed(geom, ValueSetter.NDR.NUMBER);    }    /**     * Write a binary encoded geometry.     *      * Is synchronized to protect offset counter. (Unfortunately, Java does not     * have neither call by reference nor multiple return values.) This is a     * TODO item.     *      * The geometry you put in must be consistent, geom.checkConsistency() must     * return true. If not, the result may be invalid WKB.     *      * @see Geometry#checkConsistency()     */    public synchronized byte[] writeBinary(Geometry geom, byte REP) {        int length = estimateBytes(geom);        ByteSetter.BinaryByteSetter bytes = new ByteSetter.BinaryByteSetter(length);        writeGeometry(geom, valueSetterForEndian(bytes, REP));        return bytes.result();    }    public synchronized byte[] writeBinary(Geometry geom) {        return writeBinary(geom, ValueSetter.NDR.NUMBER);    }    /** Parse a geometry starting at offset. */    protected void writeGeometry(Geometry geom, ValueSetter dest) {        // write endian flag        dest.setByte(dest.endian);        // write typeword        int typeword = geom.type;        if (geom.dimension == 3) {            typeword |= 0x80000000;        }        if (geom.haveMeasure) {            typeword |= 0x40000000;        }        if (geom.srid != -1) {            typeword |= 0x20000000;        }        dest.setInt(typeword);        if (geom.srid != -1) {            dest.setInt(geom.srid);        }        switch (geom.type) {        case Geometry.POINT :            writePoint((Point) geom, dest);            break;        case Geometry.LINESTRING :            writeLineString((LineString) geom, dest);            break;        case Geometry.POLYGON :            writePolygon((Polygon) geom, dest);            break;        case Geometry.MULTIPOINT :            writeMultiPoint((MultiPoint) geom, dest);            break;        case Geometry.MULTILINESTRING :            writeMultiLineString((MultiLineString) geom, dest);            break;        case Geometry.MULTIPOLYGON :            writeMultiPolygon((MultiPolygon) geom, dest);            break;        case Geometry.GEOMETRYCOLLECTION :            writeCollection((GeometryCollection) geom, dest);            break;        default :            throw new IllegalArgumentException("Unknown Geometry Type: " + geom.type);        }    }    /**     * Writes a "slim" Point (without endiannes, srid ant type, only the     * ordinates and measure. Used by writeGeometry as ell as writePointArray.     */    private void writePoint(Point geom, ValueSetter dest) {        dest.setDouble(geom.x);        dest.setDouble(geom.y);        if (geom.dimension == 3) {            dest.setDouble(geom.z);        }        if (geom.haveMeasure) {            dest.setDouble(geom.m);        }    }    /** Write an Array of "full" Geometries */    private void writeGeometryArray(Geometry[] container, ValueSetter dest) {        for (int i = 0; i < container.length; i++) {            writeGeometry(container[i], dest);        }    }    /**     * Write an Array of "slim" Points (without endianness, srid and type, part     * of LinearRing and Linestring, but not MultiPoint!     */    private void writePointArray(Point[] geom, ValueSetter dest) {        // number of points        dest.setInt(geom.length);        for (int i = 0; i < geom.length; i++) {            writePoint(geom[i], dest);        }    }    private void writeMultiPoint(MultiPoint geom, ValueSetter dest) {        dest.setInt(geom.numPoints());        writeGeometryArray(geom.getPoints(), dest);    }    private void writeLineString(LineString geom, ValueSetter dest) {        writePointArray(geom.getPoints(), dest);    }    private void writeLinearRing(LinearRing geom, ValueSetter dest) {        writePointArray(geom.getPoints(), dest);    }    private void writePolygon(Polygon geom, ValueSetter dest) {        dest.setInt(geom.numRings());        for (int i = 0; i < geom.numRings(); i++) {            writeLinearRing(geom.getRing(i), dest);        }    }    private void writeMultiLineString(MultiLineString geom, ValueSetter dest) {        dest.setInt(geom.numLines());        writeGeometryArray(geom.getLines(), dest);    }    private void writeMultiPolygon(MultiPolygon geom, ValueSetter dest) {        dest.setInt(geom.numPolygons());        writeGeometryArray(geom.getPolygons(), dest);    }    private void writeCollection(GeometryCollection geom, ValueSetter dest) {        dest.setInt(geom.numGeoms());        writeGeometryArray(geom.getGeometries(), dest);    }    /** Estimate how much bytes a geometry will need in WKB. */    protected int estimateBytes(Geometry geom) {        int result = 0;        // write endian flag        result += 1;        // write typeword        result += 4;        if (geom.srid != -1) {            result += 4;        }        switch (geom.type) {        case Geometry.POINT :            result += estimatePoint((Point) geom);            break;        case Geometry.LINESTRING :            result += estimateLineString((LineString) geom);            break;        case Geometry.POLYGON :            result += estimatePolygon((Polygon) geom);            break;        case Geometry.MULTIPOINT :            result += estimateMultiPoint((MultiPoint) geom);            break;        case Geometry.MULTILINESTRING :            result += estimateMultiLineString((MultiLineString) geom);            break;        case Geometry.MULTIPOLYGON :            result += estimateMultiPolygon((MultiPolygon) geom);            break;        case Geometry.GEOMETRYCOLLECTION :            result += estimateCollection((GeometryCollection) geom);            break;        default :            throw new IllegalArgumentException("Unknown Geometry Type: " + geom.type);        }        return result;    }    private int estimatePoint(Point geom) {        // x, y both have 8 bytes        int result = 16;        if (geom.dimension == 3) {            result += 8;        }        if (geom.haveMeasure) {            result += 8;        }        return result;    }    /** Write an Array of "full" Geometries */    private int estimateGeometryArray(Geometry[] container) {        int result = 0;        for (int i = 0; i < container.length; i++) {            result += estimateBytes(container[i]);        }        return result;    }    /**     * Write an Array of "slim" Points (without endianness and type, part of     * LinearRing and Linestring, but not MultiPoint!     */    private int estimatePointArray(Point[] geom) {        // number of points        int result = 4;        // And the amount of the points itsself, in consistent geometries        // all points have equal size.        if (geom.length > 0) {            result += geom.length * estimatePoint(geom[0]);        }        return result;    }    private int estimateMultiPoint(MultiPoint geom) {        // int size        int result = 4;        if (geom.numPoints() > 0) {            // We can shortcut here, as all subgeoms have the same fixed size            result += geom.numPoints() * estimateBytes(geom.getFirstPoint());        }        return result;    }    private int estimateLineString(LineString geom) {        return estimatePointArray(geom.getPoints());    }    private int estimateLinearRing(LinearRing geom) {        return estimatePointArray(geom.getPoints());    }    private int estimatePolygon(Polygon geom) {        // int length        int result = 4;        for (int i = 0; i < geom.numRings(); i++) {            result += estimateLinearRing(geom.getRing(i));        }        return result;    }    private int estimateMultiLineString(MultiLineString geom) {        // 4-byte count + subgeometries        return 4 + estimateGeometryArray(geom.getLines());    }    private int estimateMultiPolygon(MultiPolygon geom) {        // 4-byte count + subgeometries        return 4 + estimateGeometryArray(geom.getPolygons());    }    private int estimateCollection(GeometryCollection geom) {        // 4-byte count + subgeometries        return 4 + estimateGeometryArray(geom.getGeometries());    }}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区激情在线| 国产精品亚洲第一| 亚洲欧美福利一区二区| 精品国产免费人成在线观看| 欧美成人aa大片| 在线不卡欧美精品一区二区三区| 欧美亚洲免费在线一区| 欧美性猛交一区二区三区精品| 91亚洲国产成人精品一区二区三| 99久久久精品免费观看国产蜜| 成人涩涩免费视频| 91丨porny丨首页| 在线日韩国产精品| 88在线观看91蜜桃国自产| 日韩视频在线观看一区二区| 久久久久99精品国产片| 国产精品久久久久四虎| 一区二区三区日韩精品| 日韩电影在线免费看| 精品一区二区三区免费视频| 国产成a人无v码亚洲福利| 成人av先锋影音| 欧美日韩一区国产| 2020国产精品| 亚洲男人的天堂在线aⅴ视频| 亚洲午夜日本在线观看| 美国十次了思思久久精品导航| 韩国在线一区二区| 色8久久精品久久久久久蜜| 884aa四虎影成人精品一区| 久久免费精品国产久精品久久久久| 国产欧美久久久精品影院| 伊人色综合久久天天人手人婷| 免费在线观看精品| 成人爱爱电影网址| 日韩一级大片在线观看| 国产精品电影一区二区| 6080日韩午夜伦伦午夜伦| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 欧日韩精品视频| 欧美一级久久久| 亚洲天堂av一区| 精品在线一区二区三区| 91美女在线观看| 精品国产1区二区| 亚洲精品自拍动漫在线| 国产精品一区专区| 91精品国模一区二区三区| 国产精品成人午夜| 精品一区免费av| 欧美日韩www| 国产精品久久国产精麻豆99网站 | 在线观看一区不卡| 久久99久久久欧美国产| 欧美午夜一区二区三区免费大片| 久久久久久久久免费| 青青国产91久久久久久| 亚洲色图在线播放| 国产在线视频精品一区| 欧美日韩成人综合天天影院| 综合电影一区二区三区| 高潮精品一区videoshd| 精品国产一区二区三区av性色| 偷拍自拍另类欧美| 欧美三级一区二区| 亚洲尤物视频在线| 色婷婷精品久久二区二区蜜臂av | 国产清纯在线一区二区www| 婷婷综合在线观看| 欧美无砖专区一中文字| 亚洲精品视频一区| av激情综合网| 亚洲欧洲无码一区二区三区| www.成人网.com| 丁香五精品蜜臀久久久久99网站 | 精品一区二区三区免费观看| 日韩一区二区三区视频在线观看| 洋洋av久久久久久久一区| 色欧美乱欧美15图片| 一区二区在线观看免费视频播放| 99re视频这里只有精品| 国产精品久久免费看| 99久免费精品视频在线观看| 一区免费观看视频| 在线观看日韩国产| 亚洲va欧美va天堂v国产综合| 欧美日韩精品欧美日韩精品| 午夜精品福利视频网站| 91精品国产综合久久精品麻豆| 麻豆精品视频在线| 久久久青草青青国产亚洲免观| 国产iv一区二区三区| 亚洲视频 欧洲视频| 一本久久a久久免费精品不卡| 亚洲第一成年网| 久久综合av免费| eeuss影院一区二区三区| 尤物av一区二区| 日韩视频在线你懂得| 成人免费视频网站在线观看| 一区二区三区国产精华| 日韩欧美一区二区不卡| 丁香婷婷综合激情五月色| 亚洲精品写真福利| 日韩欧美成人午夜| a亚洲天堂av| 日韩在线卡一卡二| 国产欧美日韩久久| 欧美男男青年gay1069videost | 国产精品福利一区二区| 欧美久久久一区| 国产一区免费电影| 亚洲国产精品一区二区www在线| 精品电影一区二区| 在线视频你懂得一区| 激情av综合网| 亚洲高清免费视频| 国产精品福利影院| 精品处破学生在线二十三| 欧美最新大片在线看| 国产成人在线网站| 日本在线播放一区二区三区| 中文字幕在线免费不卡| 欧美电影免费提供在线观看| 色域天天综合网| 国产成人8x视频一区二区| 午夜精品久久久久久不卡8050| 国产欧美精品一区二区色综合朱莉 | 成人听书哪个软件好| 青娱乐精品视频在线| 亚洲一二三四久久| 中文字幕免费不卡| 精品久久久久久久久久久院品网 | 一本色道a无线码一区v| 国产jizzjizz一区二区| 久久99热狠狠色一区二区| 午夜成人免费电影| 亚洲免费观看高清完整版在线 | 91国偷自产一区二区三区成为亚洲经典| 激情亚洲综合在线| 免费黄网站欧美| 蜜臀久久99精品久久久画质超高清| 亚洲精品乱码久久久久久| 一区精品在线播放| 中文字幕亚洲一区二区av在线 | 欧美老人xxxx18| 欧美色图激情小说| 欧美在线影院一区二区| 色av成人天堂桃色av| 欧美综合在线视频| 欧美色老头old∨ideo| 欧美体内she精高潮| 欧美在线观看一区二区| 在线观看国产91| 欧美日韩亚洲综合| 欧美日本一区二区三区四区| 欧美日韩激情一区二区三区| 在线看国产日韩| 欧美人与z0zoxxxx视频| 欧美一区欧美二区| 精品少妇一区二区三区日产乱码 | 欧美bbbbb| 国产一区二区在线观看免费| 国产一区二区在线影院| 国产成人a级片| 99re热这里只有精品视频| 色综合久久综合中文综合网| 在线观看免费一区| 日韩精品在线看片z| 国产校园另类小说区| 国产精品视频免费| 亚洲黄色性网站| 日韩高清在线不卡| 经典三级一区二区| av电影天堂一区二区在线| 欧美无人高清视频在线观看| 日韩午夜激情免费电影| 中文字幕av免费专区久久| 亚洲视频在线一区| 视频一区视频二区中文| 美国十次综合导航| 99精品在线观看视频| 欧美一区二区三区免费视频| 久久综合九色综合97婷婷女人| 中文字幕日本不卡| 午夜精品久久久久久久| 国产成+人+日韩+欧美+亚洲| 一本一本大道香蕉久在线精品| 91精品国产全国免费观看| 国产网站一区二区| 亚洲成人动漫在线免费观看| 国产一区中文字幕| 欧美欧美欧美欧美| 国产精品美日韩| 视频一区在线播放| 色综合久久久网| 久久噜噜亚洲综合| 亚洲成人av电影在线| 成人国产精品视频| 精品久久久久久最新网址|