metadata.py 60 KB

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