metadata.py 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641
  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. meta = tgis.raster_metadata()
  8. ...
  9. @endcode
  10. (C) 2008-2011 by the GRASS Development Team
  11. This program is free software under the GNU General Public
  12. License (>=v2). Read the file COPYING that comes with GRASS
  13. for details.
  14. @author Soeren Gebbert
  15. """
  16. from base import *
  17. ###############################################################################
  18. class raster_metadata_base(sql_database_interface):
  19. """This is the raster metadata base class for raster and raster3d maps"""
  20. def __init__(self, table=None, ident=None, datatype=None, cols=None, rows=None, number_of_cells=None, nsres=None, ewres=None, min=None, max=None):
  21. sql_database_interface.__init__(self, table, ident)
  22. self.set_id(ident)
  23. self.set_datatype(datatype)
  24. self.set_cols(cols)
  25. self.set_rows(rows)
  26. self.set_number_of_cells(number_of_cells)
  27. self.set_nsres(nsres)
  28. self.set_ewres(ewres)
  29. self.set_min(min)
  30. self.set_max(max)
  31. def set_id(self, ident):
  32. """Convenient method to set the unique identifier (primary key)"""
  33. self.ident = ident
  34. self.D["id"] = ident
  35. def set_datatype(self, datatype):
  36. """Set the datatype"""
  37. self.D["datatype"] = datatype
  38. def set_cols(self, cols):
  39. """Set the number of cols"""
  40. self.D["cols"] = cols
  41. def set_rows(self, rows):
  42. """Set the number of rows"""
  43. self.D["rows"] = rows
  44. def set_number_of_cells(self, number_of_cells):
  45. """Set the number of cells"""
  46. self.D["number_of_cells"] = number_of_cells
  47. def set_nsres(self, nsres):
  48. """Set the north-south resolution"""
  49. self.D["nsres"] = nsres
  50. def set_ewres(self, ewres):
  51. """Set the east-west resolution"""
  52. self.D["ewres"] = ewres
  53. def set_min(self, min):
  54. """Set the minimum raster value"""
  55. self.D["min"] = min
  56. def set_max(self, max):
  57. """Set the maximum raster value"""
  58. self.D["max"] = max
  59. def get_id(self):
  60. """Convenient method to get the unique identifier (primary key)
  61. @return None if not found
  62. """
  63. if self.D.has_key("id"):
  64. return self.D["id"]
  65. else:
  66. return None
  67. def get_datatype(self):
  68. """Get the map type
  69. @return None if not found"""
  70. if self.D.has_key("datatype"):
  71. return self.D["datatype"]
  72. else:
  73. return None
  74. def get_cols(self):
  75. """Get number of cols
  76. @return None if not found"""
  77. if self.D.has_key("cols"):
  78. return self.D["cols"]
  79. else:
  80. return None
  81. def get_rows(self):
  82. """Get number of rows
  83. @return None if not found"""
  84. if self.D.has_key("rows"):
  85. return self.D["rows"]
  86. else:
  87. return None
  88. def get_number_of_cells(self):
  89. """Get number of cells
  90. @return None if not found"""
  91. if self.D.has_key("number_of_cells"):
  92. return self.D["number_of_cells"]
  93. else:
  94. return None
  95. def get_nsres(self):
  96. """Get the north-south resolution
  97. @return None if not found"""
  98. if self.D.has_key("nsres"):
  99. return self.D["nsres"]
  100. else:
  101. return None
  102. def get_ewres(self):
  103. """Get east-west resolution
  104. @return None if not found"""
  105. if self.D.has_key("ewres"):
  106. return self.D["ewres"]
  107. else:
  108. return None
  109. def get_min(self):
  110. """Get the minimum cell value
  111. @return None if not found"""
  112. if self.D.has_key("min"):
  113. return self.D["min"]
  114. else:
  115. return None
  116. def get_max(self):
  117. """Get the maximum cell value
  118. @return None if not found"""
  119. if self.D.has_key("max"):
  120. return self.D["max"]
  121. else:
  122. return None
  123. def print_info(self):
  124. """Print information about this class in human readable style"""
  125. # 0123456789012345678901234567890
  126. print " | Datatype:................... " + str(self.get_datatype())
  127. print " | Number of columns:.......... " + str(self.get_cols())
  128. print " | Number of rows:............. " + str(self.get_rows())
  129. print " | Number of cells:............ " + str(self.get_number_of_cells())
  130. print " | North-South resolution:..... " + str(self.get_nsres())
  131. print " | East-west resolution:....... " + str(self.get_ewres())
  132. print " | Minimum value:.............. " + str(self.get_min())
  133. print " | Maximum value:.............. " + str(self.get_max())
  134. def print_shell_info(self):
  135. """Print information about this class in shell style"""
  136. print "datatype=" + str(self.get_datatype())
  137. print "cols=" + str(self.get_cols())
  138. print "rows=" + str(self.get_rows())
  139. print "number_of_cells=" + str(self.get_number_of_cells())
  140. print "nsres=" + str(self.get_nsres())
  141. print "ewres=" + str(self.get_ewres())
  142. print "min=" + str(self.get_min())
  143. print "max=" + str(self.get_max())
  144. ###############################################################################
  145. class raster_metadata(raster_metadata_base):
  146. """This is the raster metadata class"""
  147. def __init__(self, ident=None, strds_register=None, datatype=None, cols=None, rows=None, number_of_cells=None, nsres=None, ewres=None, min=None, max=None):
  148. raster_metadata_base.__init__(self, "raster_metadata", ident, datatype, cols, rows, number_of_cells, nsres, ewres, min, max)
  149. self.set_strds_register(strds_register)
  150. def set_strds_register(self, strds_register):
  151. """Set the space time raster dataset register table name"""
  152. self.D["strds_register"] = strds_register
  153. def get_strds_register(self):
  154. """Get the space time raster dataset register table name
  155. @return None if not found"""
  156. if self.D.has_key("strds_register"):
  157. return self.D["strds_register"]
  158. else:
  159. return None
  160. def print_info(self):
  161. """Print information about this class in human readable style"""
  162. print " +-------------------- Metadata information ----------------------------------+"
  163. # 0123456789012345678901234567890
  164. print " | STRDS register table ....... " + str(self.get_strds_register())
  165. raster_metadata_base.print_info(self)
  166. def print_shell_info(self):
  167. """Print information about this class in shell style"""
  168. raster_metadata_base.print_shell_info(self)
  169. ###############################################################################
  170. class raster3d_metadata(raster_metadata_base):
  171. """This is the raster3d metadata class"""
  172. def __init__(self, ident=None, str3ds_register=None, datatype=None, cols=None, rows=None, depths=None, number_of_cells=None, nsres=None, ewres=None, tbres=None, min=None, max=None):
  173. raster_metadata_base.__init__(self, "raster3d_metadata", ident, datatype, cols, rows, number_of_cells, nsres, ewres, min, max)
  174. self.set_str3ds_register(str3ds_register)
  175. self.set_tbres(tbres)
  176. self.set_depths(depths)
  177. def set_str3ds_register(self, str3ds_register):
  178. """Set the space time raster3d dataset register table name"""
  179. self.D["str3ds_register"] = str3ds_register
  180. def set_depths(self, depths):
  181. """Set the number of depths"""
  182. self.D["depths"] = depths
  183. def set_tbres(self, tbres):
  184. """Set the top-bottom resolution"""
  185. self.D["tbres"] = tbres
  186. def get_str3ds_register(self):
  187. """Get the space time raster3d dataset register table name
  188. @return None if not found"""
  189. if self.D.has_key("str3ds_register"):
  190. return self.D["str3ds_register"]
  191. else:
  192. return None
  193. def get_depths(self):
  194. """Get number of depths
  195. @return None if not found"""
  196. if self.D.has_key("depths"):
  197. return self.D["depths"]
  198. else:
  199. return None
  200. def get_tbres(self):
  201. """Get top-bottom resolution
  202. @return None if not found"""
  203. if self.D.has_key("tbres"):
  204. return self.D["tbres"]
  205. else:
  206. return None
  207. def print_info(self):
  208. """Print information about this class in human readable style"""
  209. print " +-------------------- Metadata information ----------------------------------+"
  210. # 0123456789012345678901234567890
  211. print " | STR3DS register table ...... " + str(self.get_str3ds_register())
  212. raster_metadata_base.print_info(self)
  213. # 0123456789012345678901234567890
  214. print " | Number of depths:........... " + str(self.get_depths())
  215. print " | Top-Bottom resolution:...... " + str(self.get_tbres())
  216. def print_shell_info(self):
  217. """Print information about this class in shell style"""
  218. raster_metadata_base.print_shell_info(self)
  219. print "depths=" + str(self.get_depths())
  220. print "tbres=" + str(self.get_tbres())
  221. ###############################################################################
  222. class vector_metadata(sql_database_interface):
  223. """This is the vector metadata class"""
  224. def __init__(self, ident=None, stvds_register=None):
  225. sql_database_interface.__init__(self, "vector_metadata", ident)
  226. self.set_id(ident)
  227. self.set_stvds_register(stvds_register)
  228. def set_id(self, ident):
  229. """Convenient method to set the unique identifier (primary key)"""
  230. self.ident = ident
  231. self.D["id"] = ident
  232. def set_stvds_register(self, stvds_register):
  233. """Set the space time vector dataset register table name"""
  234. self.D["stvds_register"] = stvds_register
  235. def get_id(self):
  236. """Convenient method to get the unique identifier (primary key)
  237. @return None if not found
  238. """
  239. if self.D.has_key("id"):
  240. return self.D["id"]
  241. else:
  242. return None
  243. def get_stvds_register(self):
  244. """Get the space time vector dataset register table name
  245. @return None if not found"""
  246. if self.D.has_key("stvds_register"):
  247. return self.D["stvds_register"]
  248. else:
  249. return None
  250. def print_info(self):
  251. """Print information about this class in human readable style"""
  252. # 0123456789012345678901234567890
  253. print " +-------------------- Metadata information ----------------------------------+"
  254. print " | STVDS register table ....... " + str(self.get_stvds_register())
  255. def print_shell_info(self):
  256. """Print information about this class in shell style"""
  257. print "stvds_register=" + str(self.get_stvds_register())
  258. ###############################################################################
  259. class stds_metadata_base(sql_database_interface):
  260. """This is the space time dataset metadata base class for strds, stvds and str3ds datasets
  261. setting/getting the id, the title and the description
  262. """
  263. def __init__(self, table=None, ident=None, title=None, description=None):
  264. sql_database_interface.__init__(self, table, ident)
  265. self.set_id(ident)
  266. self.set_title(title)
  267. self.set_description(description)
  268. # No setter for this
  269. self.D["number_of_maps"] = None
  270. def set_id(self, ident):
  271. """Convenient method to set the unique identifier (primary key)"""
  272. self.ident = ident
  273. self.D["id"] = ident
  274. def set_title(self, title):
  275. """Set the title"""
  276. self.D["title"] = title
  277. def set_description(self, description):
  278. """Set the number of cols"""
  279. self.D["description"] = description
  280. def get_id(self):
  281. """Convenient method to get the unique identifier (primary key)
  282. @return None if not found
  283. """
  284. if self.D.has_key("id"):
  285. return self.D["id"]
  286. else:
  287. return None
  288. def get_title(self):
  289. """Get the title
  290. @return None if not found"""
  291. if self.D.has_key("title"):
  292. return self.D["title"]
  293. else:
  294. return None
  295. def get_description(self):
  296. """Get description
  297. @return None if not found"""
  298. if self.D.has_key("description"):
  299. return self.D["description"]
  300. else:
  301. return None
  302. def get_number_of_maps(self):
  303. """Get the number of registered maps, this value is set in the database
  304. automatically via SQL trigger, so no setter exists
  305. @return None if not found"""
  306. if self.D.has_key("number_of_maps"):
  307. return self.D["number_of_maps"]
  308. else:
  309. return None
  310. def print_info(self):
  311. """Print information about this class in human readable style"""
  312. # 0123456789012345678901234567890
  313. print " | Number of registered maps:.. " + str(self.get_number_of_maps())
  314. print " | Title:"
  315. print " | " + str(self.get_title())
  316. print " | Description:"
  317. print " | " + str(self.get_description())
  318. def print_shell_info(self):
  319. """Print information about this class in shell style"""
  320. print "number_of_maps=" + str(self.get_number_of_maps())
  321. ###############################################################################
  322. class stds_raster_metadata_base(stds_metadata_base):
  323. """This is the space time dataset metadata base class for strds and str3ds datasets
  324. Most of the metadata values are set by triggers in the database when
  325. new raster of voxel maps are added. Therefor only some set- an many get-functions
  326. are available.
  327. """
  328. def __init__(self, table=None, ident=None, title=None, description=None):
  329. stds_metadata_base.__init__(self, table, ident, title, description)
  330. # Initialize the dict to select all values from the db
  331. self.D["min_max"] = None
  332. self.D["max_max"] = None
  333. self.D["min_min"] = None
  334. self.D["max_min"] = None
  335. self.D["nsres_min"] = None
  336. self.D["nsres_max"] = None
  337. self.D["ewres_min"] = None
  338. self.D["ewres_max"] = None
  339. def get_max_min(self):
  340. """Get the minimal maximum of all registered maps, this value is set in the database
  341. automatically via SQL trigger, so no setter exists
  342. @return None if not found"""
  343. if self.D.has_key("max_min"):
  344. return self.D["max_min"]
  345. else:
  346. return None
  347. def get_min_min(self):
  348. """Get the minimal minimum of all registered maps, this value is set in the database
  349. automatically via SQL trigger, so no setter exists
  350. @return None if not found"""
  351. if self.D.has_key("min_min"):
  352. return self.D["min_min"]
  353. else:
  354. return None
  355. def get_max_max(self):
  356. """Get the maximal maximum of all registered maps, this value is set in the database
  357. automatically via SQL trigger, so no setter exists
  358. @return None if not found"""
  359. if self.D.has_key("max_max"):
  360. return self.D["max_max"]
  361. else:
  362. return None
  363. def get_min_max(self):
  364. """Get the maximal minimum of all registered maps, this value is set in the database
  365. automatically via SQL trigger, so no setter exists
  366. @return None if not found"""
  367. if self.D.has_key("min_max"):
  368. return self.D["min_max"]
  369. else:
  370. return None
  371. def get_nsres_min(self):
  372. """Get the minimal north-south resolution of all registered maps, this value is set in the database
  373. automatically via SQL trigger, so no setter exists
  374. @return None if not found"""
  375. if self.D.has_key("nsres_min"):
  376. return self.D["nsres_min"]
  377. else:
  378. return None
  379. def get_nsres_max(self):
  380. """Get the maximal north-south resolution of all registered maps, this value is set in the database
  381. automatically via SQL trigger, so no setter exists
  382. @return None if not found"""
  383. if self.D.has_key("nsres_max"):
  384. return self.D["nsres_max"]
  385. else:
  386. return None
  387. def get_ewres_min(self):
  388. """Get the minimal east-west resolution of all registered maps, this value is set in the database
  389. automatically via SQL trigger, so no setter exists
  390. @return None if not found"""
  391. if self.D.has_key("ewres_min"):
  392. return self.D["ewres_min"]
  393. else:
  394. return None
  395. def get_ewres_max(self):
  396. """Get the maximal east-west resolution of all registered maps, this value is set in the database
  397. automatically via SQL trigger, so no setter exists
  398. @return None if not found"""
  399. if self.D.has_key("ewres_max"):
  400. return self.D["ewres_max"]
  401. else:
  402. return None
  403. def print_info(self):
  404. """Print information about this class in human readable style"""
  405. stds_metadata_base.print_info(self)
  406. # 0123456789012345678901234567890
  407. print " | North-South resolution min:. " + str(self.get_nsres_min())
  408. print " | North-South resolution max:. " + str(self.get_nsres_max())
  409. print " | East-west resolution min:... " + str(self.get_ewres_min())
  410. print " | East-west resolution max:... " + str(self.get_ewres_max())
  411. print " | Minimum value min:.......... " + str(self.get_min_min())
  412. print " | Minimum value max:.......... " + str(self.get_min_max())
  413. print " | Maximum value min:.......... " + str(self.get_max_min())
  414. print " | Maximum value max:.......... " + str(self.get_max_max())
  415. def print_shell_info(self):
  416. """Print information about this class in shell style"""
  417. stds_metadata_base.print_shell_info(self)
  418. print "nsres_min=" + str(self.get_nsres_min())
  419. print "nsres_max=" + str(self.get_nsres_max())
  420. print "ewres_min=" + str(self.get_ewres_min())
  421. print "ewres_max=" + str(self.get_ewres_max())
  422. print "min_min=" + str(self.get_min_min())
  423. print "min_max=" + str(self.get_min_max())
  424. print "max_min=" + str(self.get_max_min())
  425. print "max_max=" + str(self.get_max_max())
  426. ###############################################################################
  427. class strds_metadata(stds_raster_metadata_base):
  428. """This is the raster metadata class"""
  429. def __init__(self, ident=None, raster_register=None, title=None, description=None):
  430. stds_raster_metadata_base.__init__(self, "strds_metadata", ident, title, description)
  431. self.set_raster_register(raster_register)
  432. def set_raster_register(self, raster_register):
  433. """Set the raster map register table name"""
  434. self.D["raster_register"] = raster_register
  435. def get_raster_register(self):
  436. """Get the raster map register table name
  437. @return None if not found"""
  438. if self.D.has_key("raster_register"):
  439. return self.D["raster_register"]
  440. else:
  441. return None
  442. def print_info(self):
  443. """Print information about this class in human readable style"""
  444. print " +-------------------- Metadata information ----------------------------------+"
  445. # 0123456789012345678901234567890
  446. print " | Raster register table:...... " + str(self.get_raster_register())
  447. stds_raster_metadata_base.print_info(self)
  448. def print_shell_info(self):
  449. """Print information about this class in shell style"""
  450. stds_raster_metadata_base.print_shell_info(self)
  451. ###############################################################################
  452. class str3ds_metadata(stds_raster_metadata_base):
  453. """This is the space time raster3d metadata class"""
  454. def __init__(self, ident=None, raster3d_register=None, title=None, description=None):
  455. stds_raster_metadata_base.__init__(self, "str3ds_metadata", ident, title, description)
  456. self.set_raster3d_register(raster3d_register)
  457. self.D["tbres_min"] = None
  458. self.D["tbres_max"] = None
  459. def set_raster3d_register(self, raster3d_register):
  460. """Set the raster map register table name"""
  461. self.D["raster3d_register"] = raster3d_register
  462. def get_raster3d_register(self):
  463. """Get the raster3d map register table name
  464. @return None if not found"""
  465. if self.D.has_key("raster3d_register"):
  466. return self.D["raster3d_register"]
  467. else:
  468. return None
  469. def get_tbres_min(self):
  470. """Get the minimal top-bottom resolution of all registered maps, this value is set in the database
  471. automatically via SQL trigger, so no setter exists
  472. @return None if not found"""
  473. if self.D.has_key("tbres_min"):
  474. return self.D["tbres_min"]
  475. else:
  476. return None
  477. def get_tbres_max(self):
  478. """Get the maximal top-bottom resolution of all registered maps, this value is set in the database
  479. automatically via SQL trigger, so no setter exists
  480. @return None if not found"""
  481. if self.D.has_key("tbres_max"):
  482. return self.D["tbres_max"]
  483. else:
  484. return None
  485. def print_info(self):
  486. """Print information about this class in human readable style"""
  487. print " +-------------------- Metadata information ----------------------------------+"
  488. # 0123456789012345678901234567890
  489. print " | Raster3d register table:.... " + str(self.get_raster3d_register())
  490. stds_raster_metadata_base.print_info(self)
  491. # 0123456789012345678901234567890
  492. print " | Top-bottom resolution min:.. " + str(self.get_ewres_min())
  493. print " | Top-bottom resolution max:.. " + str(self.get_ewres_max())
  494. def print_shell_info(self):
  495. """Print information about this class in shell style"""
  496. stds_raster_metadata_base.print_shell_info(self)
  497. print "tbres_min=" + str(self.get_tbres_min())
  498. print "tbres_max=" + str(self.get_tbres_max())
  499. ###############################################################################
  500. class stvds_metadata(stds_metadata_base):
  501. """This is the raster metadata class"""
  502. def __init__(self, ident=None, vector_register=None, title=None, description=None):
  503. stds_metadata_base.__init__(self, "stvds_metadata", ident, title, description)
  504. self.set_vector_register(vector_register)
  505. def set_vector_register(self, vector_register):
  506. """Set the vector map register table name"""
  507. self.D["vector_register"] = vector_register
  508. def get_vector_register(self):
  509. """Get the vector map register table name
  510. @return None if not found"""
  511. if self.D.has_key("vector_register"):
  512. return self.D["vector_register"]
  513. else:
  514. return None
  515. def print_info(self):
  516. """Print information about this class in human readable style"""
  517. print " +-------------------- Metadata information ----------------------------------+"
  518. # 0123456789012345678901234567890
  519. print " | Vector register table:...... " + str(self.get_vector_register())
  520. stds_metadata_base.print_info(self)
  521. def print_shell_info(self):
  522. """Print information about this class in shell style"""
  523. stds_metadata_base.print_shell_info(self)