metadata.py 60 KB

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