metadata.py 61 KB

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