metadata.py 60 KB

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