GEOS 3.2.1
|
00001 /********************************************************************** 00002 * $Id: WKBWriter.h 2579 2009-06-15 14:03:52Z strk $ 00003 * 00004 * GEOS - Geometry Engine Open Source 00005 * http://geos.refractions.net 00006 * 00007 * Copyright (C) 2005-2006 Refractions Research Inc. 00008 * Copyright (C) 2001-2002 Vivid Solutions Inc. 00009 * 00010 * This is free software; you can redistribute and/or modify it under 00011 * the terms of the GNU Lesser General Public Licence as published 00012 * by the Free Software Foundation. 00013 * See the COPYING file for more information. 00014 * 00015 ********************************************************************** 00016 * 00017 * Last port: io/WKBWriter.java rev. 1.1 (JTS-1.7) 00018 * 00019 **********************************************************************/ 00020 00021 #ifndef GEOS_IO_WKBWRITER_H 00022 #define GEOS_IO_WKBWRITER_H 00023 00024 #include <geos/export.h> 00025 00026 #include <geos/platform.h> // for getMachineByteOrder 00027 #include <iosfwd> 00028 00029 // Forward declarations 00030 namespace geos { 00031 namespace geom { 00032 00033 class CoordinateSequence; 00034 class Geometry; 00035 class GeometryCollection; 00036 class Point; 00037 class LineString; 00038 class LinearRing; 00039 class Polygon; 00040 class MultiPoint; 00041 class MultiLineString; 00042 class MultiPolygon; 00043 class PrecisionModel; 00044 00045 } // namespace geom 00046 } // namespace geos 00047 00048 namespace geos { 00049 namespace io { 00050 00073 class GEOS_DLL WKBWriter { 00074 00075 public: 00076 /* 00077 * \brief 00078 * Initializes writer with target coordinate dimention, endianness flag 00079 * and SRID value. 00080 * <code>WKBWriter</code>. 00081 */ 00082 WKBWriter(int dims=2, int bo=getMachineByteOrder(), bool includeSRID=false); 00083 00084 /* 00085 * \brief 00086 * Destructor. 00087 */ 00088 virtual ~WKBWriter(); 00089 00090 /* 00091 * \brief 00092 * Returns the output dimension used by the 00093 * <code>WKBWriter</code>. 00094 */ 00095 virtual int getOutputDimension() const { return outputDimension; } 00096 00097 /* 00098 * Sets the output dimension used by the 00099 * <code>WKBWriter</code>. 00100 */ 00101 virtual void setOutputDimension(int newOutputDimension) { outputDimension=newOutputDimension; } 00102 00103 /* 00104 * \brief 00105 * Returns the byte order used by the 00106 * <code>WKBWriter</code>. 00107 */ 00108 virtual int getByteOrder() const { return byteOrder; } 00109 00110 /* 00111 * Sets the byte order used by the 00112 * <code>WKBWriter</code>. 00113 */ 00114 virtual void setByteOrder(int newByteOrder) { byteOrder=newByteOrder; } 00115 00116 /* 00117 * \brief 00118 * Returns whether SRID values are output by the 00119 * <code>WKBWriter</code>. 00120 */ 00121 virtual int getIncludeSRID() const { return includeSRID; } 00122 00123 /* 00124 * Sets whether SRID values should be output by the 00125 * <code>WKBWriter</code>. 00126 */ 00127 virtual void setIncludeSRID(int newIncludeSRID) { includeSRID = (0 == newIncludeSRID ? false : true); } 00128 00136 void write(const geom::Geometry &g, std::ostream &os); 00137 // throws IOException, ParseException 00138 00146 void writeHEX(const geom::Geometry &g, std::ostream &os); 00147 // throws IOException, ParseException 00148 00149 private: 00150 00151 int outputDimension; 00152 00153 int byteOrder; 00154 00155 bool includeSRID; 00156 00157 std::ostream *outStream; 00158 00159 unsigned char buf[8]; 00160 00161 void writePoint(const geom::Point &p); 00162 // throws IOException 00163 00164 void writeLineString(const geom::LineString &ls); 00165 // throws IOException 00166 00167 void writePolygon(const geom::Polygon &p); 00168 // throws IOException 00169 00170 void writeGeometryCollection(const geom::GeometryCollection &c, int wkbtype); 00171 // throws IOException, ParseException 00172 00173 void writeCoordinateSequence(const geom::CoordinateSequence &cs, bool sized); 00174 // throws IOException 00175 00176 void writeCoordinate(const geom::CoordinateSequence &cs, int idx, bool is3d); 00177 // throws IOException 00178 00179 void writeGeometryType(int geometryType, int SRID); 00180 // throws IOException 00181 00182 void writeSRID(int SRID); 00183 // throws IOException 00184 00185 void writeByteOrder(); 00186 // throws IOException 00187 00188 void writeInt(int intValue); 00189 // throws IOException 00190 00191 }; 00192 00193 } // namespace io 00194 } // namespace geos 00195 00196 #endif // #ifndef GEOS_IO_WKBWRITER_H 00197 00198 /********************************************************************** 00199 * $Log$ 00200 * Revision 1.2 2006/03/28 11:26:13 strk 00201 * ByteOrderDataInStream inlines moved to .inl file, updated 00202 * implementation files includes. 00203 * 00204 * Revision 1.1 2006/03/20 18:18:14 strk 00205 * io.h header split 00206 * 00207 **********************************************************************/