metadata.py 59 KB

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