metadata.py 61 KB

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