metadata.py 58 KB

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