metadata.py 60 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751
  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) 2012-2013 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. |
  769. | Title:
  770. | Soils
  771. | Description:
  772. | Soils 1950 - 2010
  773. | Command history:
  774. >>> meta.print_shell_info()
  775. number_of_maps=None
  776. @endcode
  777. """
  778. def __init__(self, table=None, ident=None, title=None, description=None, command=None):
  779. SQLDatabaseInterface.__init__(self, table, ident)
  780. self.set_id(ident)
  781. self.set_title(title)
  782. self.set_description(description)
  783. self.set_command(command)
  784. # No setter for this
  785. self.D["number_of_maps"] = None
  786. def set_id(self, ident):
  787. """!Convenient method to set the unique identifier (primary key)"""
  788. self.ident = ident
  789. self.D["id"] = ident
  790. def set_title(self, title):
  791. """!Set the title"""
  792. self.D["title"] = title
  793. def set_description(self, description):
  794. """!Set the number of cols"""
  795. self.D["description"] = description
  796. def set_command(self, command):
  797. """!Set the number of cols"""
  798. self.D["command"] = command
  799. def get_id(self):
  800. """!Convenient method to get the unique identifier (primary key)
  801. @return None if not found
  802. """
  803. if "id" in self.D:
  804. return self.D["id"]
  805. else:
  806. return None
  807. def get_title(self):
  808. """!Get the title
  809. @return None if not found"""
  810. if "title" in self.D:
  811. return self.D["title"]
  812. else:
  813. return None
  814. def get_description(self):
  815. """!Get description
  816. @return None if not found"""
  817. if "description" in self.D:
  818. return self.D["description"]
  819. else:
  820. return None
  821. def get_command(self):
  822. """!Get command
  823. @return None if not found"""
  824. if "command" in self.D:
  825. return self.D["command"]
  826. else:
  827. return None
  828. def get_number_of_maps(self):
  829. """!Get the number of registered maps,
  830. this value is set in the database
  831. automatically via SQL, so no setter exists
  832. @return None if not found"""
  833. if "number_of_maps" in self.D:
  834. return self.D["number_of_maps"]
  835. else:
  836. return None
  837. id = property(fget=get_id, fset=set_id)
  838. title = property(fget=get_title, fset=set_title)
  839. description = property(fget=get_description, fset=set_description)
  840. number_of_maps = property(fget=get_number_of_maps)
  841. def print_info(self):
  842. """!Print information about this class in human readable style"""
  843. # 0123456789012345678901234567890
  844. print " | Number of registered maps:.. " + str(
  845. self.get_number_of_maps())
  846. print " |"
  847. print " | Title:"
  848. print " | " + str(self.get_title())
  849. print " | Description:"
  850. print " | " + str(self.get_description())
  851. print " | Command history:"
  852. command = self.get_command()
  853. if command:
  854. for token in command.split("\n"):
  855. print " | " + str(token)
  856. def print_history(self):
  857. """!Print history information about this class in human readable
  858. shell style
  859. """
  860. # 0123456789012345678901234567890
  861. print "# Title:"
  862. print "# " + str(self.get_title())
  863. print "# Description:"
  864. print "# " + str(self.get_description())
  865. print "# Command history:"
  866. command = self.get_command()
  867. if command:
  868. tokens = command.split("\n")
  869. print_list = []
  870. for token in tokens:
  871. token = str(token).rstrip().lstrip()
  872. if len(token) > 1:
  873. print_list.append(token)
  874. count = 0
  875. for token in print_list:
  876. count += 1
  877. if len(token) > 1:
  878. if token[0] == "#":
  879. print token
  880. elif count < len(print_list):
  881. print token + " \\"
  882. else:
  883. print token
  884. def print_shell_info(self):
  885. """!Print information about this class in shell style"""
  886. print "number_of_maps=" + str(self.get_number_of_maps())
  887. ###############################################################################
  888. class STDSRasterMetadataBase(STDSMetadataBase):
  889. """!This is the space time dataset metadata base
  890. class for strds and str3ds datasets
  891. Most of the metadata values are set by SQL scripts in the database when
  892. new maps are added. Therefor only some set- an many
  893. get-functions are available.
  894. Usage:
  895. @code
  896. >>> init()
  897. >>> meta = STDSRasterMetadataBase(ident="soils@PERMANENT",
  898. ... title="Soils", description="Soils 1950 - 2010")
  899. >>> meta.id
  900. 'soils@PERMANENT'
  901. >>> meta.title
  902. 'Soils'
  903. >>> meta.description
  904. 'Soils 1950 - 2010'
  905. >>> meta.number_of_maps
  906. >>> meta.min_max
  907. >>> meta.max_max
  908. >>> meta.min_min
  909. >>> meta.max_min
  910. >>> meta.nsres_min
  911. >>> meta.nsres_max
  912. >>> meta.ewres_min
  913. >>> meta.ewres_max
  914. >>> meta.print_info()
  915. | North-South resolution min:. None
  916. | North-South resolution max:. None
  917. | East-west resolution min:... None
  918. | East-west resolution max:... None
  919. | Minimum value min:.......... None
  920. | Minimum value max:.......... None
  921. | Maximum value min:.......... None
  922. | Maximum value max:.......... None
  923. | Number of registered maps:.. None
  924. |
  925. | Title:
  926. | Soils
  927. | Description:
  928. | Soils 1950 - 2010
  929. | Command history:
  930. >>> meta.print_shell_info()
  931. number_of_maps=None
  932. nsres_min=None
  933. nsres_max=None
  934. ewres_min=None
  935. ewres_max=None
  936. min_min=None
  937. min_max=None
  938. max_min=None
  939. max_max=None
  940. @endcode
  941. """
  942. def __init__(self, table=None, ident=None, title=None, description=None):
  943. STDSMetadataBase.__init__(self, table, ident, title, description)
  944. # Initialize the dict to select all values from the db
  945. self.D["min_max"] = None
  946. self.D["max_max"] = None
  947. self.D["min_min"] = None
  948. self.D["max_min"] = None
  949. self.D["nsres_min"] = None
  950. self.D["nsres_max"] = None
  951. self.D["ewres_min"] = None
  952. self.D["ewres_max"] = None
  953. def get_max_min(self):
  954. """!Get the minimal maximum of all registered maps,
  955. this value is set in the database
  956. automatically via SQL, so no setter exists
  957. @return None if not found"""
  958. if "max_min" in self.D:
  959. return self.D["max_min"]
  960. else:
  961. return None
  962. def get_min_min(self):
  963. """!Get the minimal minimum of all registered maps,
  964. this value is set in the database
  965. automatically via SQL, so no setter exists
  966. @return None if not found"""
  967. if "min_min" in self.D:
  968. return self.D["min_min"]
  969. else:
  970. return None
  971. def get_max_max(self):
  972. """!Get the maximal maximum of all registered maps,
  973. this value is set in the database
  974. automatically via SQL, so no setter exists
  975. @return None if not found"""
  976. if "max_max" in self.D:
  977. return self.D["max_max"]
  978. else:
  979. return None
  980. def get_min_max(self):
  981. """!Get the maximal minimum of all registered maps,
  982. this value is set in the database
  983. automatically via SQL, so no setter exists
  984. @return None if not found"""
  985. if "min_max" in self.D:
  986. return self.D["min_max"]
  987. else:
  988. return None
  989. def get_nsres_min(self):
  990. """!Get the minimal north-south resolution of all registered maps,
  991. this value is set in the database
  992. automatically via SQL, so no setter exists
  993. @return None if not found"""
  994. if "nsres_min" in self.D:
  995. return self.D["nsres_min"]
  996. else:
  997. return None
  998. def get_nsres_max(self):
  999. """!Get the maximal north-south resolution of all registered maps,
  1000. this value is set in the database
  1001. automatically via SQL, so no setter exists
  1002. @return None if not found"""
  1003. if "nsres_max" in self.D:
  1004. return self.D["nsres_max"]
  1005. else:
  1006. return None
  1007. def get_ewres_min(self):
  1008. """!Get the minimal east-west resolution of all registered maps,
  1009. this value is set in the database
  1010. automatically via SQL, so no setter exists
  1011. @return None if not found"""
  1012. if "ewres_min" in self.D:
  1013. return self.D["ewres_min"]
  1014. else:
  1015. return None
  1016. def get_ewres_max(self):
  1017. """!Get the maximal east-west resolution of all registered maps,
  1018. this value is set in the database
  1019. automatically via SQL, so no setter exists
  1020. @return None if not found"""
  1021. if "ewres_max" in self.D:
  1022. return self.D["ewres_max"]
  1023. else:
  1024. return None
  1025. nsres_min = property(fget=get_nsres_min)
  1026. nsres_max = property(fget=get_nsres_max)
  1027. ewres_min = property(fget=get_ewres_min)
  1028. ewres_max = property(fget=get_ewres_max)
  1029. min_min = property(fget=get_min_min)
  1030. min_max = property(fget=get_min_max)
  1031. max_min = property(fget=get_max_min)
  1032. max_max = property(fget=get_max_max)
  1033. def print_info(self):
  1034. """!Print information about this class in human readable style"""
  1035. # 0123456789012345678901234567890
  1036. print " | North-South resolution min:. " + str(self.get_nsres_min())
  1037. print " | North-South resolution max:. " + str(self.get_nsres_max())
  1038. print " | East-west resolution min:... " + str(self.get_ewres_min())
  1039. print " | East-west resolution max:... " + str(self.get_ewres_max())
  1040. print " | Minimum value min:.......... " + str(self.get_min_min())
  1041. print " | Minimum value max:.......... " + str(self.get_min_max())
  1042. print " | Maximum value min:.......... " + str(self.get_max_min())
  1043. print " | Maximum value max:.......... " + str(self.get_max_max())
  1044. STDSMetadataBase.print_info(self)
  1045. def print_shell_info(self):
  1046. """!Print information about this class in shell style"""
  1047. STDSMetadataBase.print_shell_info(self)
  1048. print "nsres_min=" + str(self.get_nsres_min())
  1049. print "nsres_max=" + str(self.get_nsres_max())
  1050. print "ewres_min=" + str(self.get_ewres_min())
  1051. print "ewres_max=" + str(self.get_ewres_max())
  1052. print "min_min=" + str(self.get_min_min())
  1053. print "min_max=" + str(self.get_min_max())
  1054. print "max_min=" + str(self.get_max_min())
  1055. print "max_max=" + str(self.get_max_max())
  1056. ###############################################################################
  1057. class STRDSMetadata(STDSRasterMetadataBase):
  1058. """!This is the raster metadata class
  1059. This class is the interface to the strds_metadata table in the
  1060. temporal database that stores the metadata of all registered
  1061. space time raster datasets
  1062. Most of the metadata values are set by SQL scripts in the database when
  1063. new raster maps are added. Therefor only some set- an many
  1064. get-functions are available.
  1065. Usage:
  1066. @code
  1067. >>> init()
  1068. >>> meta = STRDSMetadata(ident="soils@PERMANENT",
  1069. ... title="Soils", description="Soils 1950 - 2010")
  1070. >>> meta.id
  1071. 'soils@PERMANENT'
  1072. >>> meta.title
  1073. 'Soils'
  1074. >>> meta.description
  1075. 'Soils 1950 - 2010'
  1076. >>> meta.number_of_maps
  1077. >>> meta.min_max
  1078. >>> meta.max_max
  1079. >>> meta.min_min
  1080. >>> meta.max_min
  1081. >>> meta.nsres_min
  1082. >>> meta.nsres_max
  1083. >>> meta.ewres_min
  1084. >>> meta.ewres_max
  1085. >>> meta.raster_register
  1086. >>> meta.print_info()
  1087. +-------------------- Metadata information ----------------------------------+
  1088. | Raster register table:...... None
  1089. | North-South resolution min:. None
  1090. | North-South resolution max:. None
  1091. | East-west resolution min:... None
  1092. | East-west resolution max:... None
  1093. | Minimum value min:.......... None
  1094. | Minimum value max:.......... None
  1095. | Maximum value min:.......... None
  1096. | Maximum value max:.......... None
  1097. | Number of registered maps:.. None
  1098. |
  1099. | Title:
  1100. | Soils
  1101. | Description:
  1102. | Soils 1950 - 2010
  1103. | Command history:
  1104. >>> meta.print_shell_info()
  1105. number_of_maps=None
  1106. nsres_min=None
  1107. nsres_max=None
  1108. ewres_min=None
  1109. ewres_max=None
  1110. min_min=None
  1111. min_max=None
  1112. max_min=None
  1113. max_max=None
  1114. raster_register=None
  1115. @endcode
  1116. """
  1117. def __init__(self, ident=None, raster_register=None, title=None, description=None):
  1118. STDSRasterMetadataBase.__init__(
  1119. self, "strds_metadata", ident, title, description)
  1120. self.set_raster_register(raster_register)
  1121. def set_raster_register(self, raster_register):
  1122. """!Set the raster map register table name"""
  1123. self.D["raster_register"] = raster_register
  1124. def get_raster_register(self):
  1125. """!Get the raster map register table name
  1126. @return None if not found"""
  1127. if "raster_register" in self.D:
  1128. return self.D["raster_register"]
  1129. else:
  1130. return None
  1131. raster_register = property(fget=get_raster_register,
  1132. fset=set_raster_register)
  1133. def print_info(self):
  1134. """!Print information about this class in human readable style"""
  1135. print " +-------------------- Metadata information ----------------------------------+"
  1136. # 0123456789012345678901234567890
  1137. print " | Raster register table:...... " + str(
  1138. self.get_raster_register())
  1139. STDSRasterMetadataBase.print_info(self)
  1140. def print_shell_info(self):
  1141. """!Print information about this class in shell style"""
  1142. STDSRasterMetadataBase.print_shell_info(self)
  1143. print "raster_register=" + str(self.get_raster_register())
  1144. ###############################################################################
  1145. class STR3DSMetadata(STDSRasterMetadataBase):
  1146. """!This is the space time 3D raster metadata class
  1147. This class is the interface to the str3ds_metadata table in the
  1148. temporal database that stores the metadata of all registered
  1149. space time 3D raster datasets
  1150. Most of the metadata values are set by SQL scripts in the database when
  1151. new 3D raster maps are added. Therefor only some set- an many
  1152. get-functions are available.
  1153. Usage:
  1154. @code
  1155. >>> init()
  1156. >>> meta = STR3DSMetadata(ident="soils@PERMANENT",
  1157. ... title="Soils", description="Soils 1950 - 2010")
  1158. >>> meta.id
  1159. 'soils@PERMANENT'
  1160. >>> meta.title
  1161. 'Soils'
  1162. >>> meta.description
  1163. 'Soils 1950 - 2010'
  1164. >>> meta.number_of_maps
  1165. >>> meta.min_max
  1166. >>> meta.max_max
  1167. >>> meta.min_min
  1168. >>> meta.max_min
  1169. >>> meta.nsres_min
  1170. >>> meta.nsres_max
  1171. >>> meta.ewres_min
  1172. >>> meta.ewres_max
  1173. >>> meta.tbres_min
  1174. >>> meta.tbres_max
  1175. >>> meta.raster3d_register
  1176. >>> meta.print_info()
  1177. +-------------------- Metadata information ----------------------------------+
  1178. | 3D raster register table:... None
  1179. | Top-bottom resolution min:.. None
  1180. | Top-bottom resolution max:.. None
  1181. | North-South resolution min:. None
  1182. | North-South resolution max:. None
  1183. | East-west resolution min:... None
  1184. | East-west resolution max:... None
  1185. | Minimum value min:.......... None
  1186. | Minimum value max:.......... None
  1187. | Maximum value min:.......... None
  1188. | Maximum value max:.......... None
  1189. | Number of registered maps:.. None
  1190. |
  1191. | Title:
  1192. | Soils
  1193. | Description:
  1194. | Soils 1950 - 2010
  1195. | Command history:
  1196. >>> meta.print_shell_info()
  1197. number_of_maps=None
  1198. nsres_min=None
  1199. nsres_max=None
  1200. ewres_min=None
  1201. ewres_max=None
  1202. min_min=None
  1203. min_max=None
  1204. max_min=None
  1205. max_max=None
  1206. tbres_min=None
  1207. tbres_max=None
  1208. raster3d_register=None
  1209. @endcode
  1210. """
  1211. def __init__(self, ident=None, raster3d_register=None, title=None, description=None):
  1212. STDSRasterMetadataBase.__init__(
  1213. self, "str3ds_metadata", ident, title, description)
  1214. self.set_raster3d_register(raster3d_register)
  1215. self.D["tbres_min"] = None
  1216. self.D["tbres_max"] = None
  1217. def set_raster3d_register(self, raster3d_register):
  1218. """!Set the raster map register table name"""
  1219. self.D["raster3d_register"] = raster3d_register
  1220. def get_raster3d_register(self):
  1221. """!Get the raster3d map register table name
  1222. @return None if not found"""
  1223. if "raster3d_register" in self.D:
  1224. return self.D["raster3d_register"]
  1225. else:
  1226. return None
  1227. def get_tbres_min(self):
  1228. """!Get the minimal top-bottom resolution of all registered maps,
  1229. this value is set in the database
  1230. automatically via SQL, so no setter exists
  1231. @return None if not found"""
  1232. if "tbres_min" in self.D:
  1233. return self.D["tbres_min"]
  1234. else:
  1235. return None
  1236. def get_tbres_max(self):
  1237. """!Get the maximal top-bottom resolution of all registered maps,
  1238. this value is set in the database
  1239. automatically via SQL, so no setter exists
  1240. @return None if not found"""
  1241. if "tbres_max" in self.D:
  1242. return self.D["tbres_max"]
  1243. else:
  1244. return None
  1245. raster3d_register = property(fget=get_raster3d_register,
  1246. fset=set_raster3d_register)
  1247. tbres_min = property(fget=get_tbres_min)
  1248. tbres_max = property(fget=get_tbres_max)
  1249. def print_info(self):
  1250. """!Print information about this class in human readable style"""
  1251. print " +-------------------- Metadata information ----------------------------------+"
  1252. # 0123456789012345678901234567890
  1253. # 0123456789012345678901234567890
  1254. print " | 3D raster register table:... " + str(
  1255. self.get_raster3d_register())
  1256. print " | Top-bottom resolution min:.. " + str(self.get_ewres_min())
  1257. print " | Top-bottom resolution max:.. " + str(self.get_ewres_max())
  1258. STDSRasterMetadataBase.print_info(self)
  1259. def print_shell_info(self):
  1260. """!Print information about this class in shell style"""
  1261. STDSRasterMetadataBase.print_shell_info(self)
  1262. print "tbres_min=" + str(self.get_tbres_min())
  1263. print "tbres_max=" + str(self.get_tbres_max())
  1264. print "raster3d_register=" + str(self.get_raster3d_register())
  1265. ###############################################################################
  1266. class STVDSMetadata(STDSMetadataBase):
  1267. """!This is the space time vector dataset metadata class
  1268. This class is the interface to the stvds_metadata table in the
  1269. temporal database that stores the metadata of all registered
  1270. space time vector datasets
  1271. Most of the metadata values are set by SQL scripts in the database when
  1272. new vector maps are added. Therefor only some set- an many get-functions
  1273. are available.
  1274. Usage:
  1275. @code
  1276. >>> init()
  1277. >>> meta = STVDSMetadata(ident="lidars@PERMANENT",
  1278. ... title="LIDARS", description="LIDARS 2008 - 2010")
  1279. >>> meta.id
  1280. 'lidars@PERMANENT'
  1281. >>> meta.title
  1282. 'LIDARS'
  1283. >>> meta.description
  1284. 'LIDARS 2008 - 2010'
  1285. >>> meta.number_of_maps
  1286. >>> meta.number_of_points
  1287. >>> meta.number_of_lines
  1288. >>> meta.number_of_boundaries
  1289. >>> meta.number_of_centroids
  1290. >>> meta.number_of_faces
  1291. >>> meta.number_of_kernels
  1292. >>> meta.number_of_primitives
  1293. >>> meta.number_of_nodes
  1294. >>> meta.number_of_areas
  1295. >>> meta.number_of_islands
  1296. >>> meta.number_of_holes
  1297. >>> meta.number_of_volumes
  1298. >>> meta.print_info()
  1299. +-------------------- Metadata information ----------------------------------+
  1300. | Vector register table:...... None
  1301. | Number of points ........... None
  1302. | Number of lines ............ None
  1303. | Number of boundaries ....... None
  1304. | Number of centroids ........ None
  1305. | Number of faces ............ None
  1306. | Number of kernels .......... None
  1307. | Number of primitives ....... None
  1308. | Number of nodes ............ None
  1309. | Number of areas ............ None
  1310. | Number of islands .......... None
  1311. | Number of holes ............ None
  1312. | Number of volumes .......... None
  1313. | Number of registered maps:.. None
  1314. |
  1315. | Title:
  1316. | LIDARS
  1317. | Description:
  1318. | LIDARS 2008 - 2010
  1319. | Command history:
  1320. >>> meta.print_shell_info()
  1321. number_of_maps=None
  1322. vector_register=None
  1323. points=None
  1324. lines=None
  1325. boundaries=None
  1326. centroids=None
  1327. faces=None
  1328. kernels=None
  1329. primitives=None
  1330. nodes=None
  1331. areas=None
  1332. islands=None
  1333. holes=None
  1334. volumes=None
  1335. @endcode
  1336. """
  1337. def __init__(
  1338. self, ident=None, vector_register=None, title=None, description=None):
  1339. STDSMetadataBase.__init__(
  1340. self, "stvds_metadata", ident, title, description)
  1341. self.set_vector_register(vector_register)
  1342. self.D["points"] = None
  1343. self.D["lines"] = None
  1344. self.D["boundaries"] = None
  1345. self.D["centroids"] = None
  1346. self.D["faces"] = None
  1347. self.D["kernels"] = None
  1348. self.D["primitives"] = None
  1349. self.D["nodes"] = None
  1350. self.D["areas"] = None
  1351. self.D["islands"] = None
  1352. self.D["holes"] = None
  1353. self.D["volumes"] = None
  1354. def set_vector_register(self, vector_register):
  1355. """!Set the vector map register table name"""
  1356. self.D["vector_register"] = vector_register
  1357. def get_vector_register(self):
  1358. """!Get the vector map register table name
  1359. @return None if not found"""
  1360. if "vector_register" in self.D:
  1361. return self.D["vector_register"]
  1362. else:
  1363. return None
  1364. def get_number_of_points(self):
  1365. """!Get the number of points of all registered maps,
  1366. this value is set in the database
  1367. automatically via SQL, so no setter exists
  1368. @return None if not found"""
  1369. if "points" in self.D:
  1370. return self.D["points"]
  1371. else:
  1372. return None
  1373. def get_number_of_lines(self):
  1374. """!Get the number of lines of all registered maps,
  1375. this value is set in the database
  1376. automatically via SQL, so no setter exists
  1377. @return None if not found"""
  1378. if "lines" in self.D:
  1379. return self.D["lines"]
  1380. else:
  1381. return None
  1382. def get_number_of_boundaries(self):
  1383. """!Get the number of boundaries of all registered maps,
  1384. this value is set in the database
  1385. automatically via SQL, so no setter exists
  1386. @return None if not found"""
  1387. if "boundaries" in self.D:
  1388. return self.D["boundaries"]
  1389. else:
  1390. return None
  1391. def get_number_of_centroids(self):
  1392. """!Get the number of centroids of all registered maps,
  1393. this value is set in the database
  1394. automatically via SQL, so no setter exists
  1395. @return None if not found"""
  1396. if "centroids" in self.D:
  1397. return self.D["centroids"]
  1398. else:
  1399. return None
  1400. def get_number_of_faces(self):
  1401. """!Get the number of faces of all registered maps,
  1402. this value is set in the database
  1403. automatically via SQL, so no setter exists
  1404. @return None if not found"""
  1405. if "faces" in self.D:
  1406. return self.D["faces"]
  1407. else:
  1408. return None
  1409. def get_number_of_kernels(self):
  1410. """!Get the number of kernels of all registered maps,
  1411. this value is set in the database
  1412. automatically via SQL, so no setter exists
  1413. @return None if not found"""
  1414. if "kernels" in self.D:
  1415. return self.D["kernels"]
  1416. else:
  1417. return None
  1418. def get_number_of_primitives(self):
  1419. """!Get the number of primitives of all registered maps,
  1420. this value is set in the database
  1421. automatically via SQL, so no setter exists
  1422. @return None if not found"""
  1423. if "primitives" in self.D:
  1424. return self.D["primitives"]
  1425. else:
  1426. return None
  1427. def get_number_of_nodes(self):
  1428. """!Get the number of nodes of all registered maps,
  1429. this value is set in the database
  1430. automatically via SQL, so no setter exists
  1431. @return None if not found"""
  1432. if "nodes" in self.D:
  1433. return self.D["nodes"]
  1434. else:
  1435. return None
  1436. def get_number_of_areas(self):
  1437. """!Get the number of areas of all registered maps,
  1438. this value is set in the database
  1439. automatically via SQL, so no setter exists
  1440. @return None if not found"""
  1441. if "areas" in self.D:
  1442. return self.D["areas"]
  1443. else:
  1444. return None
  1445. def get_number_of_islands(self):
  1446. """!Get the number of islands of all registered maps,
  1447. this value is set in the database
  1448. automatically via SQL, so no setter exists
  1449. @return None if not found"""
  1450. if "islands" in self.D:
  1451. return self.D["islands"]
  1452. else:
  1453. return None
  1454. def get_number_of_holes(self):
  1455. """!Get the number of holes of all registered maps,
  1456. this value is set in the database
  1457. automatically via SQL, so no setter exists
  1458. @return None if not found"""
  1459. if "holes" in self.D:
  1460. return self.D["holes"]
  1461. else:
  1462. return None
  1463. def get_number_of_volumes(self):
  1464. """!Get the number of volumes of all registered maps,
  1465. this value is set in the database
  1466. automatically via SQL, so no setter exists
  1467. @return None if not found"""
  1468. if "volumes" in self.D:
  1469. return self.D["volumes"]
  1470. else:
  1471. return None
  1472. # Set the properties
  1473. vector_register = property(fget=get_vector_register,
  1474. fset=set_vector_register)
  1475. number_of_points = property(fget=get_number_of_points)
  1476. number_of_lines = property(fget=get_number_of_lines)
  1477. number_of_boundaries = property(fget=get_number_of_boundaries)
  1478. number_of_centroids = property(fget=get_number_of_centroids)
  1479. number_of_faces = property(fget=get_number_of_faces)
  1480. number_of_kernels = property(fget=get_number_of_kernels)
  1481. number_of_primitives = property(fget=get_number_of_primitives)
  1482. number_of_nodes = property(fget=get_number_of_nodes)
  1483. number_of_areas = property(fget=get_number_of_areas)
  1484. number_of_islands = property(fget=get_number_of_islands)
  1485. number_of_holes = property(fget=get_number_of_holes)
  1486. number_of_volumes = property(fget=get_number_of_volumes)
  1487. def print_info(self):
  1488. """!Print information about this class in human readable style"""
  1489. print " +-------------------- Metadata information ----------------------------------+"
  1490. # 0123456789012345678901234567890
  1491. print " | Vector register table:...... " + str(
  1492. self.get_vector_register())
  1493. print " | Number of points ........... " + str(self.number_of_points)
  1494. print " | Number of lines ............ " + str(self.number_of_lines)
  1495. print " | Number of boundaries ....... " + str(self.number_of_boundaries)
  1496. print " | Number of centroids ........ " + str(self.number_of_centroids)
  1497. print " | Number of faces ............ " + str(self.number_of_faces)
  1498. print " | Number of kernels .......... " + str(self.number_of_kernels)
  1499. print " | Number of primitives ....... " + str(self.number_of_primitives)
  1500. print " | Number of nodes ............ " + str(self.number_of_nodes)
  1501. print " | Number of areas ............ " + str(self.number_of_areas)
  1502. print " | Number of islands .......... " + str(self.number_of_islands)
  1503. print " | Number of holes ............ " + str(self.number_of_holes)
  1504. print " | Number of volumes .......... " + str(self.number_of_volumes)
  1505. STDSMetadataBase.print_info(self)
  1506. def print_shell_info(self):
  1507. """!Print information about this class in shell style"""
  1508. STDSMetadataBase.print_shell_info(self)
  1509. print "vector_register=" + str(self.get_vector_register())
  1510. print "points=" + str(self.get_number_of_points())
  1511. print "lines=" + str(self.get_number_of_lines())
  1512. print "boundaries=" + str(self.get_number_of_boundaries())
  1513. print "centroids=" + str(self.get_number_of_centroids())
  1514. print "faces=" + str(self.get_number_of_faces())
  1515. print "kernels=" + str(self.get_number_of_kernels())
  1516. print "primitives=" + str(self.get_number_of_primitives())
  1517. print "nodes=" + str(self.get_number_of_nodes())
  1518. print "areas=" + str(self.get_number_of_areas())
  1519. print "islands=" + str(self.get_number_of_islands())
  1520. print "holes=" + str(self.get_number_of_holes())
  1521. print "volumes=" + str(self.get_number_of_volumes())
  1522. ###############################################################################
  1523. if __name__ == "__main__":
  1524. import doctest
  1525. doctest.testmod()