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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? jtsbinarywriter.java

?? postGIS是一個(gè)能夠使用postSQL數(shù)據(jù)庫(kù)來(lái)管理GIS數(shù)據(jù)的小程序,充分發(fā)揮了該數(shù)據(jù)庫(kù)的空間管理功能,非常有用哦
?? JAVA
字號(hào):
/* * 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 2555 2006-12-18 12:58:49Z mschaber $ */package org.postgis.jts;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;import org.postgis.binary.ByteSetter;import org.postgis.binary.ValueSetter;/** * 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 JtsBinaryWriter {    /**     * 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     *      * Currently, geometries with more than 2 dimensions and measures are not     * cleanly supported, but SRID is honored.     */    public 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 String writeHexed(Geometry geom) {        return writeHexed(geom, ValueSetter.NDR.NUMBER);    }    /**     * Write a binary encoded geometry.     *      * Currently, geometries with more than 2 dimensions and measures are not     * cleanly supported, but SRID is honored.     */    public 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 byte[] writeBinary(Geometry geom) {        return writeBinary(geom, ValueSetter.NDR.NUMBER);    }    /** Parse a geometry starting at offset. */    protected void writeGeometry(Geometry geom, ValueSetter dest) {        final int dimension;        if (geom == null) {            throw new NullPointerException();        } else if (geom.isEmpty()) {            // don't set any flag bits            dimension = 0;        } else {            dimension = getCoordDim(geom);            if (dimension < 2 || dimension > 4) {                throw new IllegalArgumentException("Unsupported geometry dimensionality: " + dimension);            }        }        // write endian flag        dest.setByte(dest.endian);        // write typeword        final int plaintype = getWKBType(geom);        int typeword = plaintype;        if (dimension == 3 || dimension == 4) {            typeword |= 0x80000000;        }        if (dimension == 4) {            typeword |= 0x40000000;        }        final boolean haveSrid = checkSrid(geom);        if (haveSrid) {            typeword |= 0x20000000;        }        dest.setInt(typeword);        if (haveSrid) {            dest.setInt(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) {        // We always write emtpy geometries as emtpy collections - for OpenGIS        // conformance        if (geom.isEmpty()) {            return org.postgis.Geometry.GEOMETRYCOLLECTION;        } else 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;        } 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.     */    private void writePoint(Point geom, ValueSetter dest) {        writeCoordinates(geom.getCoordinateSequence(), getCoordDim(geom), dest);    }    /**     * Write a Coordinatesequence, part of LinearRing and Linestring, but not     * MultiPoint!     */    private void writeCoordinates(CoordinateSequence seq, int dims, ValueSetter dest) {        for (int i = 0; i < seq.size(); i++) {            for (int d = 0; d < dims; d++) {                dest.setDouble(seq.getOrdinate(i, d));            }        }    }    private void writeMultiPoint(MultiPoint geom, ValueSetter dest) {        dest.setInt(geom.getNumPoints());        for (int i = 0; i < geom.getNumPoints(); i++) {            writeGeometry(geom.getGeometryN(i), dest);        }    }    private void writeLineString(LineString geom, ValueSetter dest) {        dest.setInt(geom.getNumPoints());        writeCoordinates(geom.getCoordinateSequence(), getCoordDim(geom), dest);    }    private void writePolygon(Polygon geom, ValueSetter dest) {        dest.setInt(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, ValueSetter dest) {        writeGeometryArray(geom, dest);    }    private void writeMultiPolygon(MultiPolygon geom, ValueSetter dest) {        writeGeometryArray(geom, dest);    }    private void writeCollection(GeometryCollection geom, ValueSetter dest) {        writeGeometryArray(geom, dest);    }    private void writeGeometryArray(Geometry geom, ValueSetter dest) {        dest.setInt(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) {        int result = 0;        // write endian flag        result += 1;        // write typeword        result += 4;        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 "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 4 + 8 * getCoordSequenceDim(geom.getCoordinateSequence()) * geom.getCoordinateSequence().size();        }    }    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) {        if (geom.isEmpty()) {            return 0;        }        if (geom instanceof Point) {            return getCoordSequenceDim(((Point) geom).getCoordinateSequence());        } else if (geom instanceof LineString) {            return getCoordSequenceDim(((LineString) geom).getCoordinateSequence());        } else if (geom instanceof Polygon) {            return getCoordSequenceDim(((Polygon) geom).getExteriorRing().getCoordinateSequence());        } else {            return getCoordDim(geom.getGeometryN(0));        }    }    public static final int getCoordSequenceDim(CoordinateSequence coords) {        if (coords == null || coords.size() == 0)            return 0;        // JTS has a really strange way to handle dimensions!        // Just have a look at PackedCoordinateSequence and        // CoordinateArraySequence        int dimensions = coords.getDimension();        if (dimensions == 3) {            // CoordinateArraySequence will always return 3, so we have to            // check, if            // the third ordinate contains NaN, then the geom is actually            // 2-dimensional            return Double.isNaN(coords.getOrdinate(0, CoordinateSequence.Z)) ? 2 : 3;        } else {            return dimensions;        }    }}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久久久毛片| 九九精品一区二区| 亚洲欧美一区二区三区久本道91| 日本一区二区三区国色天香 | 欧美三级日韩三级国产三级| 91原创在线视频| 91色在线porny| 色综合咪咪久久| 91日韩在线专区| 欧美天堂一区二区三区| 欧美日韩中文字幕一区| 337p亚洲精品色噜噜狠狠| 欧美一区二区大片| 精品欧美一区二区三区精品久久| 精品国产髙清在线看国产毛片| 2021久久国产精品不只是精品| 精品sm在线观看| 国产精品视频你懂的| 亚洲欧美电影院| 亚洲福利电影网| 麻豆成人av在线| 懂色av一区二区三区免费看| eeuss鲁片一区二区三区| 色婷婷av一区二区三区之一色屋| 欧美在线免费观看亚洲| 在线不卡欧美精品一区二区三区| 日韩欧美在线影院| 久久蜜臀精品av| 亚洲精品乱码久久久久久| 偷窥少妇高潮呻吟av久久免费| 免费久久99精品国产| 国产一二精品视频| 99re视频精品| 91精品国产品国语在线不卡| 精品久久久久久无| 国产精品伦理一区二区| 亚洲永久免费av| 久久激五月天综合精品| 成人网在线播放| 欧美日韩卡一卡二| 久久久国际精品| 亚洲综合精品久久| 狠狠色狠狠色合久久伊人| 99久久久免费精品国产一区二区| 欧美久久久久久久久中文字幕| 久久久影视传媒| 亚洲午夜电影网| 国产成人免费9x9x人网站视频| 91黄视频在线| 久久久www成人免费无遮挡大片| 亚洲特黄一级片| 蜜臀a∨国产成人精品| av午夜一区麻豆| 精品久久久久久久久久久久久久久久久 | 欧美精品vⅰdeose4hd| 久久精品日产第一区二区三区高清版| 亚洲精品视频观看| 狠狠久久亚洲欧美| 欧美午夜片在线看| 国产午夜精品一区二区三区四区| 亚洲综合色丁香婷婷六月图片| 国产一级精品在线| 6080日韩午夜伦伦午夜伦| 国产精品久久久久国产精品日日| 天天操天天干天天综合网| 粉嫩蜜臀av国产精品网站| 91精品黄色片免费大全| 亚洲精品免费在线观看| 国产成a人亚洲| 日韩美女一区二区三区四区| 亚洲免费伊人电影| 成人手机在线视频| 精品伦理精品一区| 午夜不卡av免费| 91麻豆国产福利精品| 国产欧美一区二区精品性| 三级影片在线观看欧美日韩一区二区| 成人91在线观看| 久久久久久麻豆| 久久精品国产精品亚洲精品| 欧美色区777第一页| 1000精品久久久久久久久| 国产自产高清不卡| 欧美一级久久久久久久大片| 亚洲一线二线三线久久久| 99riav一区二区三区| 中文字幕精品综合| 国产高清视频一区| 久久人人爽爽爽人久久久| 看片网站欧美日韩| 日韩欧美高清一区| 日韩电影在线观看网站| 欧美午夜一区二区三区免费大片| 亚洲精品一二三| 一本色道久久综合亚洲aⅴ蜜桃| 国产精品色眯眯| 成人免费毛片aaaaa**| 国产亚洲一本大道中文在线| 国产自产v一区二区三区c| 精品久久久久av影院 | 91免费版在线| 国产精品不卡一区| 成人高清在线视频| 亚洲欧洲精品一区二区精品久久久| 国产.精品.日韩.另类.中文.在线.播放| 精品久久久久一区| 在线综合+亚洲+欧美中文字幕| 亚洲成人动漫精品| 欧美手机在线视频| 亚洲少妇30p| 色综合久久中文字幕综合网| 亚洲欧美视频在线观看视频| 成年人国产精品| 最新欧美精品一区二区三区| 色哟哟精品一区| 久久网站热最新地址| 成人免费毛片嘿嘿连载视频| 亚洲与欧洲av电影| 亚洲精品一区二区在线观看| av资源网一区| 日本不卡视频在线观看| 中文字幕国产一区| 欧美日本视频在线| 成人午夜伦理影院| 婷婷开心久久网| 欧美韩国日本一区| 7777女厕盗摄久久久| 国产精品一区在线观看你懂的| 亚洲自拍偷拍欧美| 国产亚洲精品资源在线26u| 91福利在线免费观看| 国产一区在线看| 99精品国产热久久91蜜凸| 丝袜美腿亚洲一区二区图片| 欧美激情一区二区三区全黄| 欧美精品第1页| 99re8在线精品视频免费播放| 日韩中文字幕区一区有砖一区| 亚洲国产岛国毛片在线| 3atv一区二区三区| 99久久精品情趣| 久久超碰97人人做人人爱| 亚洲伊人伊色伊影伊综合网| 亚洲国产高清不卡| 欧美成人精品1314www| 欧美性猛交xxxxxxxx| 成人app软件下载大全免费| 美国一区二区三区在线播放| 一区二区三区中文字幕| 免费成人深夜小野草| 亚洲一区二区综合| 国产精品久99| 国产欧美一区二区精品秋霞影院| 欧美高清性hdvideosex| 91原创在线视频| 成人动漫av在线| 国产一区二区三区在线观看免费视频 | 亚洲国产欧美在线| 中文字幕制服丝袜成人av | 成人黄色av电影| 国产一区二区不卡在线| 青青草国产精品97视觉盛宴| 一区二区三区精密机械公司| 中文字幕亚洲不卡| 国产午夜精品一区二区三区视频 | 日韩高清一区二区| 亚洲综合激情网| 亚洲精品国产成人久久av盗摄| 欧美国产日产图区| 国产欧美日韩在线| 久久久精品欧美丰满| 精品盗摄一区二区三区| 欧美一二三区精品| 678五月天丁香亚洲综合网| 精品婷婷伊人一区三区三| 91免费观看在线| 91色九色蝌蚪| 色婷婷av一区二区三区大白胸| 波多野结衣中文字幕一区| 国产不卡高清在线观看视频| 国产精品一二三| 国产成人一区在线| 国产91丝袜在线观看| 韩国av一区二区三区在线观看| 狠狠v欧美v日韩v亚洲ⅴ| 九九九精品视频| 国产剧情一区二区三区| 国产乱色国产精品免费视频| 国产乱子轮精品视频| 国产精品一级片| 波多野结衣亚洲| 91在线云播放| 色国产综合视频| 欧美午夜精品电影| 91麻豆精品国产91久久久久久久久| 欧美日韩dvd在线观看| 欧美一级夜夜爽| 精品欧美一区二区三区精品久久 | 国产精品小仙女| 懂色av中文一区二区三区|