metadata.py 60 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746
  1. """!@package grass.temporal
  2. @brief GRASS Python scripting module (temporal GIS functions)
  3. Temporal GIS related metadata functions to be used in Python scripts and tgis packages.
  4. Usage:
  5. @code
  6. >>> import grass.temporal as tgis
  7. >>> tgis.init()
  8. >>> meta = tgis.RasterMetadata()
  9. >>> meta = tgis.Raster3DMetadata()
  10. >>> meta = tgis.VectorMetadata()
  11. >>> meta = tgis.STRDSMetadata()
  12. >>> meta = tgis.STR3DSMetadata()
  13. >>> meta = tgis.STVDSMetadata()
  14. @endcode
  15. (C) 2008-2011 by the GRASS Development Team
  16. This program is free software under the GNU General Public
  17. License (>=v2). Read the file COPYING that comes with GRASS
  18. for details.
  19. @author Soeren Gebbert
  20. """
  21. from base import *
  22. ###############################################################################
  23. class RasterMetadataBase(SQLDatabaseInterface):
  24. """!This is the metadata base class for time stamped raster and raster3d maps
  25. Usage:
  26. @code
  27. >>> init()
  28. >>> meta = RasterMetadataBase(table="metadata", ident="soil@PERMANENT",
  29. ... datatype="CELL", cols=100, rows=100, number_of_cells=10000, nsres=0.1,
  30. ... ewres=0.1, min=0, max=100)
  31. >>> meta.datatype
  32. 'CELL'
  33. >>> meta.cols
  34. 100
  35. >>> meta.rows
  36. 100
  37. >>> meta.number_of_cells
  38. 10000
  39. >>> meta.nsres
  40. 0.1
  41. >>> meta.ewres
  42. 0.1
  43. >>> meta.min
  44. 0.0
  45. >>> meta.max
  46. 100.0
  47. >>> meta.print_info()
  48. | Datatype:................... CELL
  49. | Number of columns:.......... 100
  50. | Number of rows:............. 100
  51. | Number of cells:............ 10000
  52. | North-South resolution:..... 0.1
  53. | East-west resolution:....... 0.1
  54. | Minimum value:.............. 0.0
  55. | Maximum value:.............. 100.0
  56. >>> meta.print_shell_info()
  57. datatype=CELL
  58. cols=100
  59. rows=100
  60. number_of_cells=10000
  61. nsres=0.1
  62. ewres=0.1
  63. min=0.0
  64. max=100.0
  65. @endcode
  66. """
  67. def __init__(self, table=None, ident=None, datatype=None, cols=None,
  68. rows=None, number_of_cells=None, nsres=None, ewres=None,
  69. min=None, max=None):
  70. SQLDatabaseInterface.__init__(self, table, ident)
  71. self.set_id(ident)
  72. self.set_datatype(datatype)
  73. self.set_cols(cols)
  74. self.set_rows(rows)
  75. self.set_number_of_cells(number_of_cells)
  76. self.set_nsres(nsres)
  77. self.set_ewres(ewres)
  78. self.set_min(min)
  79. self.set_max(max)
  80. def set_id(self, ident):
  81. """!Convenient method to set the unique identifier (primary key)"""
  82. self.ident = ident
  83. self.D["id"] = ident
  84. def set_datatype(self, datatype):
  85. """!Set the datatype"""
  86. self.D["datatype"] = datatype
  87. def set_cols(self, cols):
  88. """!Set the number of cols"""
  89. if cols is not None:
  90. self.D["cols"] = int(cols)
  91. else:
  92. self.D["cols"] = None
  93. def set_rows(self, rows):
  94. """!Set the number of rows"""
  95. if rows is not None:
  96. self.D["rows"] = int(rows)
  97. else:
  98. self.D["rows"] = None
  99. def set_number_of_cells(self, number_of_cells):
  100. """!Set the number of cells"""
  101. if number_of_cells is not None:
  102. self.D["number_of_cells"] = int(number_of_cells)
  103. else:
  104. self.D["number_of_cells"] = None
  105. def set_nsres(self, nsres):
  106. """!Set the north-south resolution"""
  107. if nsres is not None:
  108. self.D["nsres"] = float(nsres)
  109. else:
  110. self.D["nsres"] = None
  111. def set_ewres(self, ewres):
  112. """!Set the east-west resolution"""
  113. if ewres is not None:
  114. self.D["ewres"] = float(ewres)
  115. else:
  116. self.D["ewres"] = None
  117. def set_min(self, min):
  118. """!Set the minimum raster value"""
  119. if min is not None:
  120. self.D["min"] = float(min)
  121. else:
  122. self.D["min"] = None
  123. def set_max(self, max):
  124. """!Set the maximum raster value"""
  125. if max is not None:
  126. self.D["max"] = float(max)
  127. else:
  128. self.D["max"] = None
  129. def get_id(self):
  130. """!Convenient method to get the unique identifier (primary key)
  131. @return None if not found
  132. """
  133. if "id" in self.D:
  134. return self.D["id"]
  135. else:
  136. return None
  137. def get_datatype(self):
  138. """!Get the map type
  139. @return None if not found"""
  140. if "datatype" in self.D:
  141. return self.D["datatype"]
  142. else:
  143. return None
  144. def get_cols(self):
  145. """!Get number of cols
  146. @return None if not found"""
  147. if "cols" in self.D:
  148. return self.D["cols"]
  149. else:
  150. return None
  151. def get_rows(self):
  152. """!Get number of rows
  153. @return None if not found"""
  154. if "rows" in self.D:
  155. return self.D["rows"]
  156. else:
  157. return None
  158. def get_number_of_cells(self):
  159. """!Get number of cells
  160. @return None if not found"""
  161. if "number_of_cells" in self.D:
  162. return self.D["number_of_cells"]
  163. else:
  164. return None
  165. def get_nsres(self):
  166. """!Get the north-south resolution
  167. @return None if not found"""
  168. if "nsres" in self.D:
  169. return self.D["nsres"]
  170. else:
  171. return None
  172. def get_ewres(self):
  173. """!Get east-west resolution
  174. @return None if not found"""
  175. if "ewres" in self.D:
  176. return self.D["ewres"]
  177. else:
  178. return None
  179. def get_min(self):
  180. """!Get the minimum cell value
  181. @return None if not found"""
  182. if "min" in self.D:
  183. return self.D["min"]
  184. else:
  185. return None
  186. def get_max(self):
  187. """!Get the maximum cell value
  188. @return None if not found"""
  189. if "max" in self.D:
  190. return self.D["max"]
  191. else:
  192. return None
  193. # Properties
  194. datatype = property(fget=get_datatype, fset=set_datatype)
  195. cols = property(fget=get_cols, fset=set_cols)
  196. rows = property(fget=get_rows, fset=set_rows)
  197. number_of_cells = property(fget=get_number_of_cells, fset=set_number_of_cells)
  198. nsres = property(fget=get_nsres, fset=set_nsres)
  199. ewres = property(fget=get_ewres, fset=set_ewres)
  200. min = property(fget=get_min, fset=set_min)
  201. max = property(fget=get_max, fset=set_max)
  202. def print_info(self):
  203. """!Print information about this class in human readable style"""
  204. # 0123456789012345678901234567890
  205. print " | Datatype:................... " + str(self.get_datatype())
  206. print " | Number of columns:.......... " + str(self.get_cols())
  207. print " | Number of rows:............. " + str(self.get_rows())
  208. print " | Number of cells:............ " + str(
  209. self.get_number_of_cells())
  210. print " | North-South resolution:..... " + str(self.get_nsres())
  211. print " | East-west resolution:....... " + str(self.get_ewres())
  212. print " | Minimum value:.............. " + str(self.get_min())
  213. print " | Maximum value:.............. " + str(self.get_max())
  214. def print_shell_info(self):
  215. """!Print information about this class in shell style"""
  216. print "datatype=" + str(self.get_datatype())
  217. print "cols=" + str(self.get_cols())
  218. print "rows=" + str(self.get_rows())
  219. print "number_of_cells=" + str(self.get_number_of_cells())
  220. print "nsres=" + str(self.get_nsres())
  221. print "ewres=" + str(self.get_ewres())
  222. print "min=" + str(self.get_min())
  223. print "max=" + str(self.get_max())
  224. ###############################################################################
  225. class RasterMetadata(RasterMetadataBase):
  226. """!This is the raster metadata class
  227. This class is the interface to the raster_metadata table in the
  228. temporal database that stores the metadata of all registered raster maps.
  229. The metadata includes the datatype, number of cols, rows and cells and
  230. the north-south and east west resolution of the map. Additionally the
  231. minimum and maximum values and the name of the space time raster dataset
  232. register table is stored.
  233. Usage:
  234. @code
  235. >>> init()
  236. >>> meta = RasterMetadata(ident="soil@PERMANENT",
  237. ... datatype="CELL", cols=100, rows=100, number_of_cells=10000, nsres=0.1,
  238. ... ewres=0.1, min=0, max=100)
  239. >>> meta.datatype
  240. 'CELL'
  241. >>> meta.cols
  242. 100
  243. >>> meta.rows
  244. 100
  245. >>> meta.number_of_cells
  246. 10000
  247. >>> meta.nsres
  248. 0.1
  249. >>> meta.ewres
  250. 0.1
  251. >>> meta.min
  252. 0.0
  253. >>> meta.max
  254. 100.0
  255. >>> meta.strds_register
  256. >>> meta.print_info()
  257. +-------------------- Metadata information ----------------------------------+
  258. | Datatype:................... CELL
  259. | Number of columns:.......... 100
  260. | Number of rows:............. 100
  261. | Number of cells:............ 10000
  262. | North-South resolution:..... 0.1
  263. | East-west resolution:....... 0.1
  264. | Minimum value:.............. 0.0
  265. | Maximum value:.............. 100.0
  266. | STRDS register table ....... None
  267. >>> meta.print_shell_info()
  268. datatype=CELL
  269. cols=100
  270. rows=100
  271. number_of_cells=10000
  272. nsres=0.1
  273. ewres=0.1
  274. min=0.0
  275. max=100.0
  276. strds_register=None
  277. @endcode
  278. """
  279. def __init__(self, ident=None, strds_register=None, datatype=None,
  280. cols=None, rows=None, number_of_cells=None, nsres=None,
  281. ewres=None, min=None, max=None):
  282. RasterMetadataBase.__init__(self, "raster_metadata", ident, datatype,
  283. cols, rows, number_of_cells, nsres,
  284. ewres, min, max)
  285. self.set_strds_register(strds_register)
  286. def set_strds_register(self, strds_register):
  287. """!Set the space time raster dataset register table name"""
  288. self.D["strds_register"] = strds_register
  289. def get_strds_register(self):
  290. """!Get the space time raster dataset register table name
  291. @return None if not found"""
  292. if "strds_register" in self.D:
  293. return self.D["strds_register"]
  294. else:
  295. return None
  296. strds_register = property(fget=get_strds_register, fset=set_strds_register)
  297. def print_info(self):
  298. """!Print information about this class in human readable style"""
  299. print " +-------------------- Metadata information ----------------------------------+"
  300. # 0123456789012345678901234567890
  301. RasterMetadataBase.print_info(self)
  302. print " | STRDS register table ....... " + str(
  303. self.get_strds_register())
  304. def print_shell_info(self):
  305. """!Print information about this class in shell style"""
  306. RasterMetadataBase.print_shell_info(self)
  307. print "strds_register=" + str(self.get_strds_register())
  308. ###############################################################################
  309. class Raster3DMetadata(RasterMetadataBase):
  310. """!This is the raster3d metadata class
  311. This class is the interface to the raster3d_metadata table in the
  312. temporal database that stores the metadata of all registered
  313. 3D raster maps.
  314. The metadata includes all raster metadata variables and additional
  315. the number of depths, the top-bottom resolution and the space time 3D
  316. raster dataset register table is stored.
  317. Usage:
  318. @code
  319. >>> init()
  320. >>> meta = Raster3DMetadata(ident="soil@PERMANENT",
  321. ... datatype="FCELL", cols=100, rows=100, depths=100,
  322. ... number_of_cells=1000000, nsres=0.1, ewres=0.1, tbres=0.1,
  323. ... min=0, max=100)
  324. >>> meta.datatype
  325. 'FCELL'
  326. >>> meta.cols
  327. 100
  328. >>> meta.rows
  329. 100
  330. >>> meta.depths
  331. 100
  332. >>> meta.number_of_cells
  333. 1000000
  334. >>> meta.nsres
  335. 0.1
  336. >>> meta.ewres
  337. 0.1
  338. >>> meta.tbres
  339. 0.1
  340. >>> meta.min
  341. 0.0
  342. >>> meta.max
  343. 100.0
  344. >>> meta.str3ds_register
  345. >>> meta.print_info()
  346. +-------------------- Metadata information ----------------------------------+
  347. | Datatype:................... FCELL
  348. | Number of columns:.......... 100
  349. | Number of rows:............. 100
  350. | Number of cells:............ 1000000
  351. | North-South resolution:..... 0.1
  352. | East-west resolution:....... 0.1
  353. | Minimum value:.............. 0.0
  354. | Maximum value:.............. 100.0
  355. | Number of depths:........... 100
  356. | Top-Bottom resolution:...... 0.1
  357. | STR3DS register table ...... None
  358. >>> meta.print_shell_info()
  359. datatype=FCELL
  360. cols=100
  361. rows=100
  362. number_of_cells=1000000
  363. nsres=0.1
  364. ewres=0.1
  365. min=0.0
  366. max=100.0
  367. str3ds_register=None
  368. depths=100
  369. tbres=0.1
  370. @endcode
  371. """
  372. def __init__(self, ident=None, str3ds_register=None, datatype=None,
  373. cols=None, rows=None, depths=None, number_of_cells=None,
  374. nsres=None, ewres=None, tbres=None, min=None, max=None):
  375. RasterMetadataBase.__init__(self, "raster3d_metadata", ident,
  376. datatype, cols, rows, number_of_cells, nsres,
  377. ewres, min, max)
  378. self.set_str3ds_register(str3ds_register)
  379. self.set_tbres(tbres)
  380. self.set_depths(depths)
  381. def set_str3ds_register(self, str3ds_register):
  382. """!Set the space time raster3d dataset register table name"""
  383. self.D["str3ds_register"] = str3ds_register
  384. def set_depths(self, depths):
  385. """!Set the number of depths"""
  386. if depths is not None:
  387. self.D["depths"] = int(depths)
  388. else:
  389. self.D["depths"] = None
  390. def set_tbres(self, tbres):
  391. """!Set the top-bottom resolution"""
  392. if tbres is not None:
  393. self.D["tbres"] = float(tbres)
  394. else:
  395. self.D["tbres"] = None
  396. def get_str3ds_register(self):
  397. """!Get the space time raster3d dataset register table name
  398. @return None if not found"""
  399. if "str3ds_register" in self.D:
  400. return self.D["str3ds_register"]
  401. else:
  402. return None
  403. def get_depths(self):
  404. """!Get number of depths
  405. @return None if not found"""
  406. if "depths" in self.D:
  407. return self.D["depths"]
  408. else:
  409. return None
  410. def get_tbres(self):
  411. """!Get top-bottom resolution
  412. @return None if not found"""
  413. if "tbres" in self.D:
  414. return self.D["tbres"]
  415. else:
  416. return None
  417. depths = property(fget=get_depths, fset=set_depths)
  418. tbres = property(fget=get_tbres, fset=set_tbres)
  419. str3ds_register = property(fget=get_str3ds_register, fset=set_str3ds_register)
  420. def print_info(self):
  421. """!Print information about this class in human readable style"""
  422. print " +-------------------- Metadata information ----------------------------------+"
  423. # 0123456789012345678901234567890
  424. RasterMetadataBase.print_info(self)
  425. # 0123456789012345678901234567890
  426. print " | Number of depths:........... " + str(self.get_depths())
  427. print " | Top-Bottom resolution:...... " + str(self.get_tbres())
  428. print " | STR3DS register table ...... " + str(
  429. self.get_str3ds_register())
  430. def print_shell_info(self):
  431. """!Print information about this class in shell style"""
  432. RasterMetadataBase.print_shell_info(self)
  433. print "str3ds_register=" + str(self.get_str3ds_register())
  434. print "depths=" + str(self.get_depths())
  435. print "tbres=" + str(self.get_tbres())
  436. ###############################################################################
  437. class VectorMetadata(SQLDatabaseInterface):
  438. """!This is the vector metadata class
  439. This class is the interface to the vector_metadata table in the
  440. temporal database that stores the metadata of all registered
  441. vector maps.
  442. Usage:
  443. @code
  444. >>> init()
  445. >>> meta = VectorMetadata(ident="lidar@PERMANENT", is_3d=True,
  446. ... number_of_points=1, number_of_lines=2, number_of_boundaries=3,
  447. ... number_of_centroids=4, number_of_faces=5, number_of_kernels=6,
  448. ... number_of_primitives=7, number_of_nodes=8, number_of_areas=9,
  449. ... number_of_islands=10, number_of_holes=11, number_of_volumes=12)
  450. >>> meta.id
  451. 'lidar@PERMANENT'
  452. >>> meta.is_3d
  453. True
  454. >>> meta.number_of_points
  455. 1
  456. >>> meta.number_of_lines
  457. 2
  458. >>> meta.number_of_boundaries
  459. 3
  460. >>> meta.number_of_centroids
  461. 4
  462. >>> meta.number_of_faces
  463. 5
  464. >>> meta.number_of_kernels
  465. 6
  466. >>> meta.number_of_primitives
  467. 7
  468. >>> meta.number_of_nodes
  469. 8
  470. >>> meta.number_of_areas
  471. 9
  472. >>> meta.number_of_islands
  473. 10
  474. >>> meta.number_of_holes
  475. 11
  476. >>> meta.number_of_volumes
  477. 12
  478. >>> meta.print_info()
  479. +-------------------- Metadata information ----------------------------------+
  480. | STVDS register table ....... None
  481. | Is map 3d .................. True
  482. | Number of points ........... 1
  483. | Number of lines ............ 2
  484. | Number of boundaries ....... 3
  485. | Number of centroids ........ 4
  486. | Number of faces ............ 5
  487. | Number of kernels .......... 6
  488. | Number of primitives ....... 7
  489. | Number of nodes ............ 8
  490. | Number of areas ............ 9
  491. | Number of islands .......... 10
  492. | Number of holes ............ 11
  493. | Number of volumes .......... 12
  494. >>> meta.print_shell_info()
  495. stvds_register=None
  496. is_3d=True
  497. points=1
  498. lines=2
  499. boundaries=3
  500. centroids=4
  501. faces=5
  502. kernels=6
  503. primitives=7
  504. nodes=8
  505. areas=9
  506. islands=10
  507. holes=11
  508. volumes=12
  509. @endcode
  510. """
  511. def __init__(
  512. self, ident=None, stvds_register=None, is_3d=False,
  513. number_of_points=None, number_of_lines=None, number_of_boundaries=None,
  514. number_of_centroids=None, number_of_faces=None, number_of_kernels=None,
  515. number_of_primitives=None, number_of_nodes=None, number_of_areas=None,
  516. number_of_islands=None, number_of_holes=None, number_of_volumes=None):
  517. SQLDatabaseInterface.__init__(self, "vector_metadata", ident)
  518. self.set_id(ident)
  519. self.set_stvds_register(stvds_register)
  520. self.set_3d_info(is_3d)
  521. self.set_number_of_points(number_of_points)
  522. self.set_number_of_lines(number_of_lines)
  523. self.set_number_of_boundaries(number_of_boundaries)
  524. self.set_number_of_centroids(number_of_centroids)
  525. self.set_number_of_faces(number_of_faces)
  526. self.set_number_of_kernels(number_of_kernels)
  527. self.set_number_of_primitives(number_of_primitives)
  528. self.set_number_of_nodes(number_of_nodes)
  529. self.set_number_of_areas(number_of_areas)
  530. self.set_number_of_islands(number_of_islands)
  531. self.set_number_of_holes(number_of_holes)
  532. self.set_number_of_volumes(number_of_volumes)
  533. def set_id(self, ident):
  534. """!Convenient method to set the unique identifier (primary key)"""
  535. self.ident = ident
  536. self.D["id"] = ident
  537. def set_stvds_register(self, stvds_register):
  538. """!Set the space time vector dataset register table name"""
  539. self.D["stvds_register"] = stvds_register
  540. def set_3d_info(self, is_3d):
  541. """!Set True if the vector map is three dimensional"""
  542. self.D["is_3d"] = is_3d
  543. def set_number_of_points(self, number_of_points):
  544. """!Set the number of points of the vector map"""
  545. self.D["points"] = number_of_points
  546. def set_number_of_lines(self, number_of_lines):
  547. """!Set the number of lines of the vector map"""
  548. self.D["lines"] = number_of_lines
  549. def set_number_of_boundaries(self, number_of_boundaries):
  550. """!Set the number of boundaries of the vector map"""
  551. self.D["boundaries"] = number_of_boundaries
  552. def set_number_of_centroids(self, number_of_centroids):
  553. """!Set the number of centroids of the vector map"""
  554. self.D["centroids"] = number_of_centroids
  555. def set_number_of_faces(self, number_of_faces):
  556. """!Set the number of faces of the vector map"""
  557. self.D["faces"] = number_of_faces
  558. def set_number_of_kernels(self, number_of_kernels):
  559. """!Set the number of kernels of the vector map"""
  560. self.D["kernels"] = number_of_kernels
  561. def set_number_of_primitives(self, number_of_primitives):
  562. """!Set the number of primitives of the vector map"""
  563. self.D["primitives"] = number_of_primitives
  564. def set_number_of_nodes(self, number_of_nodes):
  565. """!Set the number of nodes of the vector map"""
  566. self.D["nodes"] = number_of_nodes
  567. def set_number_of_areas(self, number_of_areas):
  568. """!Set the number of areas of the vector map"""
  569. self.D["areas"] = number_of_areas
  570. def set_number_of_islands(self, number_of_islands):
  571. """!Set the number of islands of the vector map"""
  572. self.D["islands"] = number_of_islands
  573. def set_number_of_holes(self, number_of_holes):
  574. """!Set the number of holes of the vector map"""
  575. self.D["holes"] = number_of_holes
  576. def set_number_of_volumes(self, number_of_volumes):
  577. """!Set the number of volumes of the vector map"""
  578. self.D["volumes"] = number_of_volumes
  579. def get_id(self):
  580. """!Convenient method to get the unique identifier (primary key)
  581. @return None if not found
  582. """
  583. if "id" in self.D:
  584. return self.D["id"]
  585. else:
  586. return None
  587. def get_stvds_register(self):
  588. """!Get the space time vector dataset register table name
  589. @return None if not found"""
  590. if "stvds_register" in self.D:
  591. return self.D["stvds_register"]
  592. else:
  593. return None
  594. def get_3d_info(self):
  595. """!Return True if the map is three dimensional,
  596. False if not and None if not info was found"""
  597. if "is_3d" in self.D:
  598. return self.D["is_3d"]
  599. else:
  600. return None
  601. def get_number_of_points(self):
  602. """!Get the number of points of the vector map
  603. @return None if not found"""
  604. if "points" in self.D:
  605. return self.D["points"]
  606. else:
  607. return None
  608. def get_number_of_lines(self):
  609. """!Get the number of lines of the vector map
  610. @return None if not found"""
  611. if "lines" in self.D:
  612. return self.D["lines"]
  613. else:
  614. return None
  615. def get_number_of_boundaries(self):
  616. """!Get the number of boundaries of the vector map
  617. @return None if not found"""
  618. if "boundaries" in self.D:
  619. return self.D["boundaries"]
  620. else:
  621. return None
  622. def get_number_of_centroids(self):
  623. """!Get the number of centroids of the vector map
  624. @return None if not found"""
  625. if "centroids" in self.D:
  626. return self.D["centroids"]
  627. else:
  628. return None
  629. def get_number_of_faces(self):
  630. """!Get the number of faces of the vector map
  631. @return None if not found"""
  632. if "faces" in self.D:
  633. return self.D["faces"]
  634. else:
  635. return None
  636. def get_number_of_kernels(self):
  637. """!Get the number of kernels of the vector map
  638. @return None if not found"""
  639. if "kernels" in self.D:
  640. return self.D["kernels"]
  641. else:
  642. return None
  643. def get_number_of_primitives(self):
  644. """!Get the number of primitives of the vector map
  645. @return None if not found"""
  646. if "primitives" in self.D:
  647. return self.D["primitives"]
  648. else:
  649. return None
  650. def get_number_of_nodes(self):
  651. """!Get the number of nodes of the vector map
  652. @return None if not found"""
  653. if "nodes" in self.D:
  654. return self.D["nodes"]
  655. else:
  656. return None
  657. def get_number_of_areas(self):
  658. """!Get the number of areas of the vector map
  659. @return None if not found"""
  660. if "areas" in self.D:
  661. return self.D["areas"]
  662. else:
  663. return None
  664. def get_number_of_islands(self):
  665. """!Get the number of islands of the vector map
  666. @return None if not found"""
  667. if "islands" in self.D:
  668. return self.D["islands"]
  669. else:
  670. return None
  671. def get_number_of_holes(self):
  672. """!Get the number of holes of the vector map
  673. @return None if not found"""
  674. if "holes" in self.D:
  675. return self.D["holes"]
  676. else:
  677. return None
  678. def get_number_of_volumes(self):
  679. """!Get the number of volumes of the vector map
  680. @return None if not found"""
  681. if "volumes" in self.D:
  682. return self.D["volumes"]
  683. else:
  684. return None
  685. # Set the properties
  686. id = property(fget=get_id, fset=set_id)
  687. stvds_register = property(fget=get_stvds_register,
  688. fset=set_stvds_register)
  689. is_3d = property(fget=get_3d_info, fset=set_3d_info)
  690. number_of_points = property(fget=get_number_of_points,
  691. fset=set_number_of_points)
  692. number_of_lines = property(fget=get_number_of_lines,
  693. fset=set_number_of_lines)
  694. number_of_boundaries = property(fget=get_number_of_boundaries,
  695. fset=set_number_of_boundaries)
  696. number_of_centroids = property(fget=get_number_of_centroids,
  697. fset=set_number_of_centroids)
  698. number_of_faces = property(fget=get_number_of_faces,
  699. fset=set_number_of_faces)
  700. number_of_kernels = property(fget=get_number_of_kernels,
  701. fset=set_number_of_kernels)
  702. number_of_primitives = property(fget=get_number_of_primitives,
  703. fset=set_number_of_primitives)
  704. number_of_nodes = property(fget=get_number_of_nodes,
  705. fset=set_number_of_nodes)
  706. number_of_areas = property(fget=get_number_of_areas,
  707. fset=set_number_of_areas)
  708. number_of_islands = property(fget=get_number_of_islands,
  709. fset=set_number_of_islands)
  710. number_of_holes = property(fget=get_number_of_holes,
  711. fset=set_number_of_holes)
  712. number_of_volumes = property(fget=get_number_of_volumes,
  713. fset=set_number_of_volumes)
  714. def print_info(self):
  715. """!Print information about this class in human readable style"""
  716. # 0123456789012345678901234567890
  717. print " +-------------------- Metadata information ----------------------------------+"
  718. print " | STVDS register table ....... " + str(
  719. self.get_stvds_register())
  720. print " | Is map 3d .................. " + str(self.get_3d_info())
  721. print " | Number of points ........... " + str(self.get_number_of_points())
  722. print " | Number of lines ............ " + str(self.get_number_of_lines())
  723. print " | Number of boundaries ....... " + str(self.get_number_of_boundaries())
  724. print " | Number of centroids ........ " + str(self.get_number_of_centroids())
  725. print " | Number of faces ............ " + str(self.get_number_of_faces())
  726. print " | Number of kernels .......... " + str(self.get_number_of_kernels())
  727. print " | Number of primitives ....... " + str(self.get_number_of_primitives())
  728. print " | Number of nodes ............ " + str(self.get_number_of_nodes())
  729. print " | Number of areas ............ " + str(self.get_number_of_areas())
  730. print " | Number of islands .......... " + str(self.get_number_of_islands())
  731. print " | Number of holes ............ " + str(self.get_number_of_holes())
  732. print " | Number of volumes .......... " + str(self.get_number_of_volumes())
  733. def print_shell_info(self):
  734. """!Print information about this class in shell style"""
  735. print "stvds_register=" + str(self.get_stvds_register())
  736. print "is_3d=" + str(self.get_3d_info())
  737. print "points=" + str(self.get_number_of_points())
  738. print "lines=" + str(self.get_number_of_lines())
  739. print "boundaries=" + str(self.get_number_of_boundaries())
  740. print "centroids=" + str(self.get_number_of_centroids())
  741. print "faces=" + str(self.get_number_of_faces())
  742. print "kernels=" + str(self.get_number_of_kernels())
  743. print "primitives=" + str(self.get_number_of_primitives())
  744. print "nodes=" + str(self.get_number_of_nodes())
  745. print "areas=" + str(self.get_number_of_areas())
  746. print "islands=" + str(self.get_number_of_islands())
  747. print "holes=" + str(self.get_number_of_holes())
  748. print "volumes=" + str(self.get_number_of_volumes())
  749. ###############################################################################
  750. class STDSMetadataBase(SQLDatabaseInterface):
  751. """!This is the space time dataset metadata base class for
  752. strds, stvds and str3ds datasets
  753. setting/getting the id, the title and the description
  754. Usage:
  755. @code
  756. >>> init()
  757. >>> meta = STDSMetadataBase(ident="soils@PERMANENT",
  758. ... title="Soils", description="Soils 1950 - 2010")
  759. >>> meta.id
  760. 'soils@PERMANENT'
  761. >>> meta.title
  762. 'Soils'
  763. >>> meta.description
  764. 'Soils 1950 - 2010'
  765. >>> meta.number_of_maps
  766. >>> meta.print_info()
  767. | Number of registered maps:.. None
  768. | Title:
  769. | Soils
  770. | Description:
  771. | Soils 1950 - 2010
  772. | Commands of creation:
  773. >>> meta.print_shell_info()
  774. number_of_maps=None
  775. @endcode
  776. """
  777. def __init__(self, table=None, ident=None, title=None, description=None, command=None):
  778. SQLDatabaseInterface.__init__(self, table, ident)
  779. self.set_id(ident)
  780. self.set_title(title)
  781. self.set_description(description)
  782. self.set_command(command)
  783. # No setter for this
  784. self.D["number_of_maps"] = None
  785. def set_id(self, ident):
  786. """!Convenient method to set the unique identifier (primary key)"""
  787. self.ident = ident
  788. self.D["id"] = ident
  789. def set_title(self, title):
  790. """!Set the title"""
  791. self.D["title"] = title
  792. def set_description(self, description):
  793. """!Set the number of cols"""
  794. self.D["description"] = description
  795. def set_command(self, command):
  796. """!Set the number of cols"""
  797. self.D["command"] = command
  798. def get_id(self):
  799. """!Convenient method to get the unique identifier (primary key)
  800. @return None if not found
  801. """
  802. if "id" in self.D:
  803. return self.D["id"]
  804. else:
  805. return None
  806. def get_title(self):
  807. """!Get the title
  808. @return None if not found"""
  809. if "title" in self.D:
  810. return self.D["title"]
  811. else:
  812. return None
  813. def get_description(self):
  814. """!Get description
  815. @return None if not found"""
  816. if "description" in self.D:
  817. return self.D["description"]
  818. else:
  819. return None
  820. def get_command(self):
  821. """!Get command
  822. @return None if not found"""
  823. if "command" in self.D:
  824. return self.D["command"]
  825. else:
  826. return None
  827. def get_number_of_maps(self):
  828. """!Get the number of registered maps,
  829. this value is set in the database
  830. automatically via SQL, so no setter exists
  831. @return None if not found"""
  832. if "number_of_maps" in self.D:
  833. return self.D["number_of_maps"]
  834. else:
  835. return None
  836. id = property(fget=get_id, fset=set_id)
  837. title = property(fget=get_title, fset=set_title)
  838. description = property(fget=get_description, fset=set_description)
  839. number_of_maps = property(fget=get_number_of_maps)
  840. def print_info(self):
  841. """!Print information about this class in human readable style"""
  842. # 0123456789012345678901234567890
  843. print " | Number of registered maps:.. " + str(
  844. self.get_number_of_maps())
  845. print " |"
  846. print " | Title:"
  847. print " | " + str(self.get_title())
  848. print " | Description:"
  849. print " | " + str(self.get_description())
  850. print " | Command history:"
  851. command = self.get_command()
  852. if command:
  853. for token in command.split("\n"):
  854. print " | " + str(token)
  855. def print_history(self):
  856. """!Print history information about this class in human readable
  857. shell style
  858. """
  859. # 0123456789012345678901234567890
  860. print "# Title:"
  861. print "# " + str(self.get_title())
  862. print "# Description:"
  863. print "# " + str(self.get_description())
  864. print "# Command history:"
  865. command = self.get_command()
  866. if command:
  867. tokens = command.split("\n")
  868. print_list = []
  869. for token in tokens:
  870. token = str(token).rstrip().lstrip()
  871. if len(token) > 1:
  872. print_list.append(token)
  873. count = 0
  874. for token in print_list:
  875. count += 1
  876. if len(token) > 1:
  877. if token[0] == "#":
  878. print token
  879. elif count < len(print_list):
  880. print token + " \\"
  881. else:
  882. print token
  883. def print_shell_info(self):
  884. """!Print information about this class in shell style"""
  885. print "number_of_maps=" + str(self.get_number_of_maps())
  886. ###############################################################################
  887. class STDSRasterMetadataBase(STDSMetadataBase):
  888. """!This is the space time dataset metadata base
  889. class for strds and str3ds datasets
  890. Most of the metadata values are set by SQL scripts in the database when
  891. new maps are added. Therefor only some set- an many
  892. get-functions are available.
  893. Usage:
  894. @code
  895. >>> init()
  896. >>> meta = STDSRasterMetadataBase(ident="soils@PERMANENT",
  897. ... title="Soils", description="Soils 1950 - 2010")
  898. >>> meta.id
  899. 'soils@PERMANENT'
  900. >>> meta.title
  901. 'Soils'
  902. >>> meta.description
  903. 'Soils 1950 - 2010'
  904. >>> meta.number_of_maps
  905. >>> meta.min_max
  906. >>> meta.max_max
  907. >>> meta.min_min
  908. >>> meta.max_min
  909. >>> meta.nsres_min
  910. >>> meta.nsres_max
  911. >>> meta.ewres_min
  912. >>> meta.ewres_max
  913. >>> meta.print_info()
  914. | Number of registered maps:.. None
  915. | Title:
  916. | Soils
  917. | Description:
  918. | Soils 1950 - 2010
  919. | Commands of creation:
  920. | North-South resolution min:. None
  921. | North-South resolution max:. None
  922. | East-west resolution min:... None
  923. | East-west resolution max:... None
  924. | Minimum value min:.......... None
  925. | Minimum value max:.......... None
  926. | Maximum value min:.......... None
  927. | Maximum value max:.......... None
  928. >>> meta.print_shell_info()
  929. number_of_maps=None
  930. nsres_min=None
  931. nsres_max=None
  932. ewres_min=None
  933. ewres_max=None
  934. min_min=None
  935. min_max=None
  936. max_min=None
  937. max_max=None
  938. @endcode
  939. """
  940. def __init__(self, table=None, ident=None, title=None, description=None):
  941. STDSMetadataBase.__init__(self, table, ident, title, description)
  942. # Initialize the dict to select all values from the db
  943. self.D["min_max"] = None
  944. self.D["max_max"] = None
  945. self.D["min_min"] = None
  946. self.D["max_min"] = None
  947. self.D["nsres_min"] = None
  948. self.D["nsres_max"] = None
  949. self.D["ewres_min"] = None
  950. self.D["ewres_max"] = None
  951. def get_max_min(self):
  952. """!Get the minimal maximum of all registered maps,
  953. this value is set in the database
  954. automatically via SQL, so no setter exists
  955. @return None if not found"""
  956. if "max_min" in self.D:
  957. return self.D["max_min"]
  958. else:
  959. return None
  960. def get_min_min(self):
  961. """!Get the minimal minimum of all registered maps,
  962. this value is set in the database
  963. automatically via SQL, so no setter exists
  964. @return None if not found"""
  965. if "min_min" in self.D:
  966. return self.D["min_min"]
  967. else:
  968. return None
  969. def get_max_max(self):
  970. """!Get the maximal maximum of all registered maps,
  971. this value is set in the database
  972. automatically via SQL, so no setter exists
  973. @return None if not found"""
  974. if "max_max" in self.D:
  975. return self.D["max_max"]
  976. else:
  977. return None
  978. def get_min_max(self):
  979. """!Get the maximal minimum of all registered maps,
  980. this value is set in the database
  981. automatically via SQL, so no setter exists
  982. @return None if not found"""
  983. if "min_max" in self.D:
  984. return self.D["min_max"]
  985. else:
  986. return None
  987. def get_nsres_min(self):
  988. """!Get the minimal north-south resolution of all registered maps,
  989. this value is set in the database
  990. automatically via SQL, so no setter exists
  991. @return None if not found"""
  992. if "nsres_min" in self.D:
  993. return self.D["nsres_min"]
  994. else:
  995. return None
  996. def get_nsres_max(self):
  997. """!Get the maximal north-south resolution of all registered maps,
  998. this value is set in the database
  999. automatically via SQL, so no setter exists
  1000. @return None if not found"""
  1001. if "nsres_max" in self.D:
  1002. return self.D["nsres_max"]
  1003. else:
  1004. return None
  1005. def get_ewres_min(self):
  1006. """!Get the minimal east-west resolution of all registered maps,
  1007. this value is set in the database
  1008. automatically via SQL, so no setter exists
  1009. @return None if not found"""
  1010. if "ewres_min" in self.D:
  1011. return self.D["ewres_min"]
  1012. else:
  1013. return None
  1014. def get_ewres_max(self):
  1015. """!Get the maximal east-west resolution of all registered maps,
  1016. this value is set in the database
  1017. automatically via SQL, so no setter exists
  1018. @return None if not found"""
  1019. if "ewres_max" in self.D:
  1020. return self.D["ewres_max"]
  1021. else:
  1022. return None
  1023. nsres_min = property(fget=get_nsres_min)
  1024. nsres_max = property(fget=get_nsres_max)
  1025. ewres_min = property(fget=get_ewres_min)
  1026. ewres_max = property(fget=get_ewres_max)
  1027. min_min = property(fget=get_min_min)
  1028. min_max = property(fget=get_min_max)
  1029. max_min = property(fget=get_max_min)
  1030. max_max = property(fget=get_max_max)
  1031. def print_info(self):
  1032. """!Print information about this class in human readable style"""
  1033. # 0123456789012345678901234567890
  1034. print " | North-South resolution min:. " + str(self.get_nsres_min())
  1035. print " | North-South resolution max:. " + str(self.get_nsres_max())
  1036. print " | East-west resolution min:... " + str(self.get_ewres_min())
  1037. print " | East-west resolution max:... " + str(self.get_ewres_max())
  1038. print " | Minimum value min:.......... " + str(self.get_min_min())
  1039. print " | Minimum value max:.......... " + str(self.get_min_max())
  1040. print " | Maximum value min:.......... " + str(self.get_max_min())
  1041. print " | Maximum value max:.......... " + str(self.get_max_max())
  1042. STDSMetadataBase.print_info(self)
  1043. def print_shell_info(self):
  1044. """!Print information about this class in shell style"""
  1045. STDSMetadataBase.print_shell_info(self)
  1046. print "nsres_min=" + str(self.get_nsres_min())
  1047. print "nsres_max=" + str(self.get_nsres_max())
  1048. print "ewres_min=" + str(self.get_ewres_min())
  1049. print "ewres_max=" + str(self.get_ewres_max())
  1050. print "min_min=" + str(self.get_min_min())
  1051. print "min_max=" + str(self.get_min_max())
  1052. print "max_min=" + str(self.get_max_min())
  1053. print "max_max=" + str(self.get_max_max())
  1054. ###############################################################################
  1055. class STRDSMetadata(STDSRasterMetadataBase):
  1056. """!This is the raster metadata class
  1057. This class is the interface to the strds_metadata table in the
  1058. temporal database that stores the metadata of all registered
  1059. space time raster datasets
  1060. Most of the metadata values are set by SQL scripts in the database when
  1061. new raster maps are added. Therefor only some set- an many
  1062. get-functions are available.
  1063. Usage:
  1064. @code
  1065. >>> init()
  1066. >>> meta = STRDSMetadata(ident="soils@PERMANENT",
  1067. ... title="Soils", description="Soils 1950 - 2010")
  1068. >>> meta.id
  1069. 'soils@PERMANENT'
  1070. >>> meta.title
  1071. 'Soils'
  1072. >>> meta.description
  1073. 'Soils 1950 - 2010'
  1074. >>> meta.number_of_maps
  1075. >>> meta.min_max
  1076. >>> meta.max_max
  1077. >>> meta.min_min
  1078. >>> meta.max_min
  1079. >>> meta.nsres_min
  1080. >>> meta.nsres_max
  1081. >>> meta.ewres_min
  1082. >>> meta.ewres_max
  1083. >>> meta.raster_register
  1084. >>> meta.print_info()
  1085. +-------------------- Metadata information ----------------------------------+
  1086. | Number of registered maps:.. None
  1087. | Title:
  1088. | Soils
  1089. | Description:
  1090. | Soils 1950 - 2010
  1091. | Commands of creation:
  1092. | North-South resolution min:. None
  1093. | North-South resolution max:. None
  1094. | East-west resolution min:... None
  1095. | East-west resolution max:... None
  1096. | Minimum value min:.......... None
  1097. | Minimum value max:.......... None
  1098. | Maximum value min:.......... None
  1099. | Maximum value max:.......... None
  1100. | Raster register table:...... None
  1101. >>> meta.print_shell_info()
  1102. number_of_maps=None
  1103. nsres_min=None
  1104. nsres_max=None
  1105. ewres_min=None
  1106. ewres_max=None
  1107. min_min=None
  1108. min_max=None
  1109. max_min=None
  1110. max_max=None
  1111. raster_register=None
  1112. @endcode
  1113. """
  1114. def __init__(self, ident=None, raster_register=None, title=None, description=None):
  1115. STDSRasterMetadataBase.__init__(
  1116. self, "strds_metadata", ident, title, description)
  1117. self.set_raster_register(raster_register)
  1118. def set_raster_register(self, raster_register):
  1119. """!Set the raster map register table name"""
  1120. self.D["raster_register"] = raster_register
  1121. def get_raster_register(self):
  1122. """!Get the raster map register table name
  1123. @return None if not found"""
  1124. if "raster_register" in self.D:
  1125. return self.D["raster_register"]
  1126. else:
  1127. return None
  1128. raster_register = property(fget=get_raster_register,
  1129. fset=set_raster_register)
  1130. def print_info(self):
  1131. """!Print information about this class in human readable style"""
  1132. print " +-------------------- Metadata information ----------------------------------+"
  1133. # 0123456789012345678901234567890
  1134. print " | Raster register table:...... " + str(
  1135. self.get_raster_register())
  1136. STDSRasterMetadataBase.print_info(self)
  1137. def print_shell_info(self):
  1138. """!Print information about this class in shell style"""
  1139. STDSRasterMetadataBase.print_shell_info(self)
  1140. print "raster_register=" + str(self.get_raster_register())
  1141. ###############################################################################
  1142. class STR3DSMetadata(STDSRasterMetadataBase):
  1143. """!This is the space time 3D raster metadata class
  1144. This class is the interface to the str3ds_metadata table in the
  1145. temporal database that stores the metadata of all registered
  1146. space time 3D raster datasets
  1147. Most of the metadata values are set by SQL scripts in the database when
  1148. new 3D raster maps are added. Therefor only some set- an many
  1149. get-functions are available.
  1150. Usage:
  1151. @code
  1152. >>> init()
  1153. >>> meta = STR3DSMetadata(ident="soils@PERMANENT",
  1154. ... title="Soils", description="Soils 1950 - 2010")
  1155. >>> meta.id
  1156. 'soils@PERMANENT'
  1157. >>> meta.title
  1158. 'Soils'
  1159. >>> meta.description
  1160. 'Soils 1950 - 2010'
  1161. >>> meta.number_of_maps
  1162. >>> meta.min_max
  1163. >>> meta.max_max
  1164. >>> meta.min_min
  1165. >>> meta.max_min
  1166. >>> meta.nsres_min
  1167. >>> meta.nsres_max
  1168. >>> meta.ewres_min
  1169. >>> meta.ewres_max
  1170. >>> meta.tbres_min
  1171. >>> meta.tbres_max
  1172. >>> meta.raster3d_register
  1173. >>> meta.print_info()
  1174. +-------------------- Metadata information ----------------------------------+
  1175. | Number of registered maps:.. None
  1176. | Title:
  1177. | Soils
  1178. | Description:
  1179. | Soils 1950 - 2010
  1180. | Commands of creation:
  1181. | North-South resolution min:. None
  1182. | North-South resolution max:. None
  1183. | East-west resolution min:... None
  1184. | East-west resolution max:... None
  1185. | Minimum value min:.......... None
  1186. | Minimum value max:.......... None
  1187. | Maximum value min:.......... None
  1188. | Maximum value max:.......... None
  1189. | Top-bottom resolution min:.. None
  1190. | Top-bottom resolution max:.. None
  1191. | 3D raster register table:... None
  1192. >>> meta.print_shell_info()
  1193. number_of_maps=None
  1194. nsres_min=None
  1195. nsres_max=None
  1196. ewres_min=None
  1197. ewres_max=None
  1198. min_min=None
  1199. min_max=None
  1200. max_min=None
  1201. max_max=None
  1202. tbres_min=None
  1203. tbres_max=None
  1204. raster3d_register=None
  1205. @endcode
  1206. """
  1207. def __init__(self, ident=None, raster3d_register=None, title=None, description=None):
  1208. STDSRasterMetadataBase.__init__(
  1209. self, "str3ds_metadata", ident, title, description)
  1210. self.set_raster3d_register(raster3d_register)
  1211. self.D["tbres_min"] = None
  1212. self.D["tbres_max"] = None
  1213. def set_raster3d_register(self, raster3d_register):
  1214. """!Set the raster map register table name"""
  1215. self.D["raster3d_register"] = raster3d_register
  1216. def get_raster3d_register(self):
  1217. """!Get the raster3d map register table name
  1218. @return None if not found"""
  1219. if "raster3d_register" in self.D:
  1220. return self.D["raster3d_register"]
  1221. else:
  1222. return None
  1223. def get_tbres_min(self):
  1224. """!Get the minimal top-bottom resolution of all registered maps,
  1225. this value is set in the database
  1226. automatically via SQL, so no setter exists
  1227. @return None if not found"""
  1228. if "tbres_min" in self.D:
  1229. return self.D["tbres_min"]
  1230. else:
  1231. return None
  1232. def get_tbres_max(self):
  1233. """!Get the maximal top-bottom resolution of all registered maps,
  1234. this value is set in the database
  1235. automatically via SQL, so no setter exists
  1236. @return None if not found"""
  1237. if "tbres_max" in self.D:
  1238. return self.D["tbres_max"]
  1239. else:
  1240. return None
  1241. raster3d_register = property(fget=get_raster3d_register,
  1242. fset=set_raster3d_register)
  1243. tbres_min = property(fget=get_tbres_min)
  1244. tbres_max = property(fget=get_tbres_max)
  1245. def print_info(self):
  1246. """!Print information about this class in human readable style"""
  1247. print " +-------------------- Metadata information ----------------------------------+"
  1248. # 0123456789012345678901234567890
  1249. # 0123456789012345678901234567890
  1250. print " | 3D raster register table:... " + str(
  1251. self.get_raster3d_register())
  1252. print " | Top-bottom resolution min:.. " + str(self.get_ewres_min())
  1253. print " | Top-bottom resolution max:.. " + str(self.get_ewres_max())
  1254. STDSRasterMetadataBase.print_info(self)
  1255. def print_shell_info(self):
  1256. """!Print information about this class in shell style"""
  1257. STDSRasterMetadataBase.print_shell_info(self)
  1258. print "tbres_min=" + str(self.get_tbres_min())
  1259. print "tbres_max=" + str(self.get_tbres_max())
  1260. print "raster3d_register=" + str(self.get_raster3d_register())
  1261. ###############################################################################
  1262. class STVDSMetadata(STDSMetadataBase):
  1263. """!This is the space time vector dataset metadata class
  1264. This class is the interface to the stvds_metadata table in the
  1265. temporal database that stores the metadata of all registered
  1266. space time vector datasets
  1267. Most of the metadata values are set by SQL scripts in the database when
  1268. new vector maps are added. Therefor only some set- an many get-functions
  1269. are available.
  1270. Usage:
  1271. @code
  1272. >>> init()
  1273. >>> meta = STVDSMetadata(ident="lidars@PERMANENT",
  1274. ... title="LIDARS", description="LIDARS 2008 - 2010")
  1275. >>> meta.id
  1276. 'lidars@PERMANENT'
  1277. >>> meta.title
  1278. 'LIDARS'
  1279. >>> meta.description
  1280. 'LIDARS 2008 - 2010'
  1281. >>> meta.number_of_maps
  1282. >>> meta.number_of_points
  1283. >>> meta.number_of_lines
  1284. >>> meta.number_of_boundaries
  1285. >>> meta.number_of_centroids
  1286. >>> meta.number_of_faces
  1287. >>> meta.number_of_kernels
  1288. >>> meta.number_of_primitives
  1289. >>> meta.number_of_nodes
  1290. >>> meta.number_of_areas
  1291. >>> meta.number_of_islands
  1292. >>> meta.number_of_holes
  1293. >>> meta.number_of_volumes
  1294. >>> meta.print_info()
  1295. +-------------------- Metadata information ----------------------------------+
  1296. | Number of registered maps:.. None
  1297. | Title:
  1298. | LIDARS
  1299. | Description:
  1300. | LIDARS 2008 - 2010
  1301. | Commands of creation:
  1302. | Vector register table:...... None
  1303. | Number of points ........... None
  1304. | Number of lines ............ None
  1305. | Number of boundaries ....... None
  1306. | Number of centroids ........ None
  1307. | Number of faces ............ None
  1308. | Number of kernels .......... None
  1309. | Number of primitives ....... None
  1310. | Number of nodes ............ None
  1311. | Number of areas ............ None
  1312. | Number of islands .......... None
  1313. | Number of holes ............ None
  1314. | Number of volumes .......... None
  1315. >>> meta.print_shell_info()
  1316. number_of_maps=None
  1317. vector_register=None
  1318. points=None
  1319. lines=None
  1320. boundaries=None
  1321. centroids=None
  1322. faces=None
  1323. kernels=None
  1324. primitives=None
  1325. nodes=None
  1326. areas=None
  1327. islands=None
  1328. holes=None
  1329. volumes=None
  1330. @endcode
  1331. """
  1332. def __init__(
  1333. self, ident=None, vector_register=None, title=None, description=None):
  1334. STDSMetadataBase.__init__(
  1335. self, "stvds_metadata", ident, title, description)
  1336. self.set_vector_register(vector_register)
  1337. self.D["points"] = None
  1338. self.D["lines"] = None
  1339. self.D["boundaries"] = None
  1340. self.D["centroids"] = None
  1341. self.D["faces"] = None
  1342. self.D["kernels"] = None
  1343. self.D["primitives"] = None
  1344. self.D["nodes"] = None
  1345. self.D["areas"] = None
  1346. self.D["islands"] = None
  1347. self.D["holes"] = None
  1348. self.D["volumes"] = None
  1349. def set_vector_register(self, vector_register):
  1350. """!Set the vector map register table name"""
  1351. self.D["vector_register"] = vector_register
  1352. def get_vector_register(self):
  1353. """!Get the vector map register table name
  1354. @return None if not found"""
  1355. if "vector_register" in self.D:
  1356. return self.D["vector_register"]
  1357. else:
  1358. return None
  1359. def get_number_of_points(self):
  1360. """!Get the number of points of all registered maps,
  1361. this value is set in the database
  1362. automatically via SQL, so no setter exists
  1363. @return None if not found"""
  1364. if "points" in self.D:
  1365. return self.D["points"]
  1366. else:
  1367. return None
  1368. def get_number_of_lines(self):
  1369. """!Get the number of lines of all registered maps,
  1370. this value is set in the database
  1371. automatically via SQL, so no setter exists
  1372. @return None if not found"""
  1373. if "lines" in self.D:
  1374. return self.D["lines"]
  1375. else:
  1376. return None
  1377. def get_number_of_boundaries(self):
  1378. """!Get the number of boundaries of all registered maps,
  1379. this value is set in the database
  1380. automatically via SQL, so no setter exists
  1381. @return None if not found"""
  1382. if "boundaries" in self.D:
  1383. return self.D["boundaries"]
  1384. else:
  1385. return None
  1386. def get_number_of_centroids(self):
  1387. """!Get the number of centroids of all registered maps,
  1388. this value is set in the database
  1389. automatically via SQL, so no setter exists
  1390. @return None if not found"""
  1391. if "centroids" in self.D:
  1392. return self.D["centroids"]
  1393. else:
  1394. return None
  1395. def get_number_of_faces(self):
  1396. """!Get the number of faces of all registered maps,
  1397. this value is set in the database
  1398. automatically via SQL, so no setter exists
  1399. @return None if not found"""
  1400. if "faces" in self.D:
  1401. return self.D["faces"]
  1402. else:
  1403. return None
  1404. def get_number_of_kernels(self):
  1405. """!Get the number of kernels of all registered maps,
  1406. this value is set in the database
  1407. automatically via SQL, so no setter exists
  1408. @return None if not found"""
  1409. if "kernels" in self.D:
  1410. return self.D["kernels"]
  1411. else:
  1412. return None
  1413. def get_number_of_primitives(self):
  1414. """!Get the number of primitives of all registered maps,
  1415. this value is set in the database
  1416. automatically via SQL, so no setter exists
  1417. @return None if not found"""
  1418. if "primitives" in self.D:
  1419. return self.D["primitives"]
  1420. else:
  1421. return None
  1422. def get_number_of_nodes(self):
  1423. """!Get the number of nodes of all registered maps,
  1424. this value is set in the database
  1425. automatically via SQL, so no setter exists
  1426. @return None if not found"""
  1427. if "nodes" in self.D:
  1428. return self.D["nodes"]
  1429. else:
  1430. return None
  1431. def get_number_of_areas(self):
  1432. """!Get the number of areas of all registered maps,
  1433. this value is set in the database
  1434. automatically via SQL, so no setter exists
  1435. @return None if not found"""
  1436. if "areas" in self.D:
  1437. return self.D["areas"]
  1438. else:
  1439. return None
  1440. def get_number_of_islands(self):
  1441. """!Get the number of islands of all registered maps,
  1442. this value is set in the database
  1443. automatically via SQL, so no setter exists
  1444. @return None if not found"""
  1445. if "islands" in self.D:
  1446. return self.D["islands"]
  1447. else:
  1448. return None
  1449. def get_number_of_holes(self):
  1450. """!Get the number of holes of all registered maps,
  1451. this value is set in the database
  1452. automatically via SQL, so no setter exists
  1453. @return None if not found"""
  1454. if "holes" in self.D:
  1455. return self.D["holes"]
  1456. else:
  1457. return None
  1458. def get_number_of_volumes(self):
  1459. """!Get the number of volumes of all registered maps,
  1460. this value is set in the database
  1461. automatically via SQL, so no setter exists
  1462. @return None if not found"""
  1463. if "volumes" in self.D:
  1464. return self.D["volumes"]
  1465. else:
  1466. return None
  1467. # Set the properties
  1468. vector_register = property(fget=get_vector_register,
  1469. fset=set_vector_register)
  1470. number_of_points = property(fget=get_number_of_points)
  1471. number_of_lines = property(fget=get_number_of_lines)
  1472. number_of_boundaries = property(fget=get_number_of_boundaries)
  1473. number_of_centroids = property(fget=get_number_of_centroids)
  1474. number_of_faces = property(fget=get_number_of_faces)
  1475. number_of_kernels = property(fget=get_number_of_kernels)
  1476. number_of_primitives = property(fget=get_number_of_primitives)
  1477. number_of_nodes = property(fget=get_number_of_nodes)
  1478. number_of_areas = property(fget=get_number_of_areas)
  1479. number_of_islands = property(fget=get_number_of_islands)
  1480. number_of_holes = property(fget=get_number_of_holes)
  1481. number_of_volumes = property(fget=get_number_of_volumes)
  1482. def print_info(self):
  1483. """!Print information about this class in human readable style"""
  1484. print " +-------------------- Metadata information ----------------------------------+"
  1485. # 0123456789012345678901234567890
  1486. print " | Vector register table:...... " + str(
  1487. self.get_vector_register())
  1488. print " | Number of points ........... " + str(self.number_of_points)
  1489. print " | Number of lines ............ " + str(self.number_of_lines)
  1490. print " | Number of boundaries ....... " + str(self.number_of_boundaries)
  1491. print " | Number of centroids ........ " + str(self.number_of_centroids)
  1492. print " | Number of faces ............ " + str(self.number_of_faces)
  1493. print " | Number of kernels .......... " + str(self.number_of_kernels)
  1494. print " | Number of primitives ....... " + str(self.number_of_primitives)
  1495. print " | Number of nodes ............ " + str(self.number_of_nodes)
  1496. print " | Number of areas ............ " + str(self.number_of_areas)
  1497. print " | Number of islands .......... " + str(self.number_of_islands)
  1498. print " | Number of holes ............ " + str(self.number_of_holes)
  1499. print " | Number of volumes .......... " + str(self.number_of_volumes)
  1500. STDSMetadataBase.print_info(self)
  1501. def print_shell_info(self):
  1502. """!Print information about this class in shell style"""
  1503. STDSMetadataBase.print_shell_info(self)
  1504. print "vector_register=" + str(self.get_vector_register())
  1505. print "points=" + str(self.get_number_of_points())
  1506. print "lines=" + str(self.get_number_of_lines())
  1507. print "boundaries=" + str(self.get_number_of_boundaries())
  1508. print "centroids=" + str(self.get_number_of_centroids())
  1509. print "faces=" + str(self.get_number_of_faces())
  1510. print "kernels=" + str(self.get_number_of_kernels())
  1511. print "primitives=" + str(self.get_number_of_primitives())
  1512. print "nodes=" + str(self.get_number_of_nodes())
  1513. print "areas=" + str(self.get_number_of_areas())
  1514. print "islands=" + str(self.get_number_of_islands())
  1515. print "holes=" + str(self.get_number_of_holes())
  1516. print "volumes=" + str(self.get_number_of_volumes())
  1517. ###############################################################################
  1518. if __name__ == "__main__":
  1519. import doctest
  1520. doctest.testmod()