![]() |
TerraLib 4.1
|
00001 /************************************************************************************ 00002 TerraLib - a library for developing GIS applications. 00003 Copyright © 2001-2007 INPE and Tecgraf/PUC-Rio. 00004 00005 This code is part of the TerraLib library. 00006 This library is free software; you can redistribute it and/or 00007 modify it under the terms of the GNU Lesser General Public 00008 License as published by the Free Software Foundation; either 00009 version 2.1 of the License, or (at your option) any later version. 00010 00011 You should have received a copy of the GNU Lesser General Public 00012 License along with this library. 00013 00014 The authors reassure the license terms regarding the warranties. 00015 They specifically disclaim any warranties, including, but not limited to, 00016 the implied warranties of merchantability and fitness for a particular purpose. 00017 The library provided hereunder is on an "as is" basis, and the authors have no 00018 obligation to provide maintenance, support, updates, enhancements, or modifications. 00019 In no event shall INPE and Tecgraf / PUC-Rio be held liable to any party for direct, 00020 indirect, special, incidental, or consequential damages arising out of the use 00021 of this library and its documentation. 00022 *************************************************************************************/ 00026 #ifndef __TERRALIB_INTERNAL_LAYER_H 00027 #define __TERRALIB_INTERNAL_LAYER_H 00028 00029 #include "TeGeometry.h" 00030 #include "TeDataTypes.h" 00031 #include "TeTable.h" 00032 #include "TeRepresentation.h" 00033 00034 #include <string> 00035 #include <list> 00036 #include <map> 00037 00038 class TeRaster; 00039 class TeDatabase; 00040 class TeRasterParams; 00041 class TeProjection; 00042 00044 00053 class TL_DLL TeLayer { 00054 00055 public: 00056 00058 TeLayer(): 00059 id_(-1), 00060 db_(0), 00061 projection_ ( 0 ), 00062 raster_(0) 00063 { } 00064 00065 00067 /* 00068 \param name layer name (should be unique) 00069 \param db a TerraLib database connection w 00070 \param proj layer projection 00071 \note 00072 \par If no database is informed, layer will exist only in memory. 00073 \par If a layer with this name doesn´t exist a layer will be 00074 created and stored. If no projection is informed a default TeNoProjection 00075 will be used as layer projection. 00076 \par If a layer with this name already exists it will be retrieved 00077 */ 00078 TeLayer(const string& name, TeDatabase* db=0, TeProjection* proj=0); 00079 00081 /* 00082 \param name layer name (should be unique) 00083 \param db TerraLib database connection where layer will be stored 00084 \param box layer bounding box 00085 \param proj layer projection 00086 \note 00087 \par If no database is informed, layer will exist only in memory. 00088 \par If a layer with this name doesn´t exist a layer will be 00089 created and stored. If no projection is informed a default TeNoProjection 00090 will be used as layer projection. 00091 \par If a layer with this name already exists it will be retrieved 00092 */ 00093 TeLayer(const string& name, TeDatabase* db, TeBox& box, TeProjection* proj = 0); 00094 00096 virtual ~TeLayer(); 00097 00099 TeLayer ( const TeLayer& other ); 00100 00102 TeLayer& operator= ( const TeLayer& other ); 00103 00105 virtual TeDatabase* const database() 00106 { return db_; } 00107 00109 virtual void setDatabase(TeDatabase* db) 00110 { db_ = db; } 00111 00113 virtual int id() 00114 { return id_; } 00115 00117 virtual void id(int id) 00118 { id_ = id; } 00119 00121 virtual string name() 00122 { return name_; } 00123 00125 virtual void name(const string &name) 00126 { name_ = name; } 00127 00129 virtual void setProjection ( TeProjection* proj ); 00130 00132 virtual TeProjection* projection() 00133 { return projection_; } 00134 00136 virtual TeBox& box() 00137 { return box_; } 00138 00140 virtual void setLayerBox ( const TeBox& box ); 00141 00143 virtual void updateLayerBox(const TeBox& box); 00144 00146 virtual void updateLayerBox(); 00147 00149 virtual int getNewObjectId(); 00150 00155 00157 virtual int nObjects(const string& tName); 00158 00160 virtual TeAttrTableVector& attrTables () 00161 { return attTables_; } 00162 00164 virtual const TeAttrTableVector& attrTables () const 00165 { return attTables_; } 00166 00168 virtual bool createAttributeTable(TeTable& table); 00169 00171 virtual bool addAttributeTable(TeTable& table); 00172 00174 virtual bool removeAttributeTable(string tableName); 00175 00177 virtual void updateAttributeTable(TeTable& table); 00178 00180 virtual bool loadLayerTables(); 00181 00183 virtual bool saveAttributeTable(TeTable& table); 00184 00186 virtual bool getAttrTables(TeAttrTableVector& atts, TeAttrTableType attType = TeAllAttrTypes); 00187 00189 /* 00190 \param tableNames a vector that contains the name of the tables that are being searched 00191 \param attType type of table that is being searched 00192 \param atts returns a vector of tables found 00193 \return true if at least one table was found and false otherwise 00194 */ 00195 virtual bool getAttrTablesByName(vector<string> &tableNames, TeAttrTableVector& atts, TeAttrTableType attType = TeAllAttrTypes); 00196 00198 /* 00199 \param tableName name of the table being searched 00200 \param attType type of table being searched 00201 \param table returns the table found 00202 \return true if table was found and false otherwise 00203 */ 00204 virtual bool getAttrTablesByName(const string& tableName, TeTable& table, TeAttrTableType attType = TeAllAttrTypes); 00205 00207 virtual string mediaTable(); 00208 00210 virtual void mediaTable(const string& name); 00212 00216 00217 00222 virtual TeRaster* raster(const string& objectId="",const char& mode = 'r'); 00223 00225 virtual void raster( TeRaster* raster); 00226 00228 virtual bool getPolygons(TePolygonSet &ps, const string& whereClause = ""); 00229 00231 virtual bool getLines(TeLineSet &ls, const string& whereClause = ""); 00232 00234 virtual bool getPoints(TePointSet &ps, const string& whereClause = ""); 00235 00237 virtual bool getText(TeTextSet &ts, const string& whereClause = ""); 00238 00240 virtual bool getCells(TeCellSet &cs, const string& whereClause = ""); 00241 00243 virtual bool locatePolygon(TeCoord2D &pt, TePolygon &polygon, const double& tol = 0.0); 00244 00246 virtual bool locateLine(TeCoord2D &pt, TeLine2D &line, const double& tol = 0.0); 00247 00249 virtual bool locatePoint(TeCoord2D &pt, TePoint &point, const double& tol = 0.0); 00250 00252 virtual bool locateText(TeCoord2D &pt, TeText &text, const double& tol = 0.0); 00253 00255 virtual bool locateCell(TeCoord2D &pt, TeCell &cell, const double& tol = 0.0); 00256 00258 virtual bool loadGeometrySet (const string& geoid, TePolygonSet &ps); 00259 00261 virtual bool loadGeometrySet (const string& geoid, TeLineSet &ls); 00262 00264 virtual bool loadGeometrySet (const string& geoid, TePointSet &ps); 00265 00267 virtual bool loadGeometrySet (const string& geoid, TeCellSet &cs); 00268 00270 virtual bool loadGeometrySet (const string& geoid, TeTextSet &cs); 00271 00273 virtual bool addGeometrySet(TePolygonSet& polySet, const string& /* tName */ = "") 00274 { return addPolygons(polySet); } 00275 00277 virtual bool addGeometrySet(TeLineSet& lineSet, const string& /* tName */ = "") 00278 { return addLines(lineSet); } 00279 00281 virtual bool addGeometrySet(TePointSet& pointSet, const string& /* tName */ = "") 00282 { return addPoints(pointSet); } 00283 00285 virtual bool addGeometrySet(TeTextSet& textSet, const string& tName = "") 00286 { return addText(textSet,tName); } 00287 00289 virtual bool addGeometrySet(TeCellSet& cellSet, const string& /* tName */ = "") 00290 { return addCells(cellSet); } 00291 00293 virtual bool addPolygons(TePolygonSet& polySet); 00294 00296 virtual bool addLines (TeLineSet& lineSet); 00297 00299 virtual bool addPoints (TePointSet& pointSet); 00300 00302 virtual bool addText (TeTextSet& textSet,const string& tName); 00303 00305 virtual bool addCells(TeCellSet& cellSet); 00306 00308 virtual bool updatePolygons(TePolygonSet& polySet); 00309 00311 virtual bool updateLines (TeLineSet& lineSet); 00312 00314 virtual bool updatePoints (TePointSet& pointSet); 00315 00317 virtual bool updateText (TeTextSet& textSet,const string& tName); 00318 00320 virtual bool updateCells(TeCellSet& cellSet); 00321 00323 virtual bool removeGeometries(const std::vector<int>& vecGeomIds, const TeGeomRep& rep); 00324 00326 00330 00331 virtual bool removeGeometry (TeGeomRep repType, const string& tName=""); 00332 00334 virtual bool hasGeometry (TeGeomRep rep); 00335 00337 00341 virtual string tableName(TeGeomRep rep); 00342 00344 00347 virtual int nGeometries(TeGeomRep rep); 00348 00350 virtual bool getRepresentation(TeGeomRep repType, TeRepresPointerVector& result); 00351 00353 00359 virtual TeRepresentation* getRepresentation(TeGeomRep repType, const string& tableName=""); 00360 00362 /* 00363 \param repType the geometrical representation being searched 00364 \param tableName name of the table that will stored the geometries 00365 \param desc description of the representation 00366 \return true if success and false otherwise 00367 */ 00368 virtual bool addGeometry ( TeGeomRep repType, const string& tableName="", const string& desc = ""); 00369 00371 /* 00372 \param par raster parameters 00373 \param objectId identifier of the object that has the raster geometry 00374 \param tableName name of the table that will stored the geometries 00375 \param desc description of the representation 00376 \return true if success and false otherwise 00377 */ 00378 virtual bool addRasterGeometry(TeRasterParams& par, const string& objectId, 00379 const string& tableName="", const string& desc=""); 00380 00382 /* 00383 \param raster a pointer to a raster object 00384 \param objectId identifier of the object that has the raster geometry 00385 \param tableName the name of the table that will store the geometry (optional) 00386 \return true if success and false otherwise 00387 \note if there is already raster geometry associated to the object with id 00388 object id, this reference is deleted. 00389 */ 00390 bool addRasterGeometry(TeRaster* raster, const string& objectId=""); 00391 00393 /* 00394 \param raster a pointer to a raster object 00395 \param objectId identifier of the object that has the raster geometry 00396 \param desc the description of the geometry (optional) 00397 \return true if success and false otherwise 00398 \note if there is already raster geometry associated to the object with id 00399 object id, this reference is deleted. 00400 */ 00401 bool addRasterFileGeometry(TeRaster* raster, const string& objectId="", const string& desc=""); 00402 00403 00405 /* 00406 \param objectIds a vector to return the identification of the objects with a raster representation 00407 \param tilingType used to express that only some types of representations are looked for: 00408 0 any kind, 1 only the expansible and 2 only the non-expansible 00409 \param box box spatial restriction 00410 \return true if layer has at least one raster object and false otherwise 00411 */ 00412 virtual bool getRasterGeometries(vector<string>& objectIds, unsigned int tilingType=0, const TeBox& box = TeBox()); 00413 00415 virtual int geomRep(); 00416 00418 virtual void addVectRepres(TeRepresentation* rep) 00419 { repVector_.push_back(rep); } 00420 00422 virtual TeRepresPointerVector& vectRepres() 00423 { return repVector_; } 00424 00425 virtual const TeRepresPointerVector& vectRepres() const 00426 { return repVector_; } 00427 00429 virtual TeTime getEditionTime() const; 00430 00432 virtual void setEditionTime(const TeTime& editionTime); 00433 00435 virtual bool updateLayerEditionTime(const bool& setEditionToNow = true); 00436 00438 virtual bool reloadLayerEditionTime(); 00439 00441 00442 private: 00443 00444 // -- Members 00445 00446 // -- General Description of a layer 00447 00448 string name_; 00449 int id_; 00450 TeDatabase* db_; 00451 TeProjection* projection_; 00452 TeBox box_; 00453 TeRaster* raster_; 00454 00455 TeAttrTableVector attTables_; 00456 TeRepresPointerVector repVector_; 00457 TeTime editionTime_; 00458 }; 00459 00461 typedef map<int,TeLayer*> TeLayerMap; 00462 00470 #endif 00471 00472 00473