metadata.py 60 KB

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