metadata.py 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648
  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. raster_metadata_base.print_info(self)
  165. print " | STRDS register table ....... " + str(self.get_strds_register())
  166. def print_shell_info(self):
  167. """!Print information about this class in shell style"""
  168. raster_metadata_base.print_shell_info(self)
  169. print "strds_register=" + str(self.get_strds_register())
  170. ###############################################################################
  171. class raster3d_metadata(raster_metadata_base):
  172. """!This is the raster3d metadata class"""
  173. 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):
  174. raster_metadata_base.__init__(self, "raster3d_metadata", ident, datatype, cols, rows, number_of_cells, nsres, ewres, min, max)
  175. self.set_str3ds_register(str3ds_register)
  176. self.set_tbres(tbres)
  177. self.set_depths(depths)
  178. def set_str3ds_register(self, str3ds_register):
  179. """!Set the space time raster3d dataset register table name"""
  180. self.D["str3ds_register"] = str3ds_register
  181. def set_depths(self, depths):
  182. """!Set the number of depths"""
  183. self.D["depths"] = depths
  184. def set_tbres(self, tbres):
  185. """!Set the top-bottom resolution"""
  186. self.D["tbres"] = tbres
  187. def get_str3ds_register(self):
  188. """!Get the space time raster3d dataset register table name
  189. @return None if not found"""
  190. if self.D.has_key("str3ds_register"):
  191. return self.D["str3ds_register"]
  192. else:
  193. return None
  194. def get_depths(self):
  195. """!Get number of depths
  196. @return None if not found"""
  197. if self.D.has_key("depths"):
  198. return self.D["depths"]
  199. else:
  200. return None
  201. def get_tbres(self):
  202. """!Get top-bottom resolution
  203. @return None if not found"""
  204. if self.D.has_key("tbres"):
  205. return self.D["tbres"]
  206. else:
  207. return None
  208. def print_info(self):
  209. """!Print information about this class in human readable style"""
  210. print " +-------------------- Metadata information ----------------------------------+"
  211. # 0123456789012345678901234567890
  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. print " | STR3DS register table ...... " + str(self.get_str3ds_register())
  217. def print_shell_info(self):
  218. """!Print information about this class in shell style"""
  219. print "str3ds_register=" + str(self.get_str3ds_register())
  220. print "depths=" + str(self.get_depths())
  221. print "tbres=" + str(self.get_tbres())
  222. raster_metadata_base.print_shell_info(self)
  223. ###############################################################################
  224. class vector_metadata(sql_database_interface):
  225. """!This is the vector metadata class"""
  226. def __init__(self, ident=None, stvds_register=None):
  227. sql_database_interface.__init__(self, "vector_metadata", ident)
  228. self.set_id(ident)
  229. self.set_stvds_register(stvds_register)
  230. def set_id(self, ident):
  231. """!Convenient method to set the unique identifier (primary key)"""
  232. self.ident = ident
  233. self.D["id"] = ident
  234. def set_stvds_register(self, stvds_register):
  235. """!Set the space time vector dataset register table name"""
  236. self.D["stvds_register"] = stvds_register
  237. def get_id(self):
  238. """!Convenient method to get the unique identifier (primary key)
  239. @return None if not found
  240. """
  241. if self.D.has_key("id"):
  242. return self.D["id"]
  243. else:
  244. return None
  245. def get_stvds_register(self):
  246. """!Get the space time vector dataset register table name
  247. @return None if not found"""
  248. if self.D.has_key("stvds_register"):
  249. return self.D["stvds_register"]
  250. else:
  251. return None
  252. def print_info(self):
  253. """!Print information about this class in human readable style"""
  254. # 0123456789012345678901234567890
  255. print " +-------------------- Metadata information ----------------------------------+"
  256. print " | STVDS register table ....... " + str(self.get_stvds_register())
  257. def print_shell_info(self):
  258. """!Print information about this class in shell style"""
  259. print "stvds_register=" + str(self.get_stvds_register())
  260. ###############################################################################
  261. class stds_metadata_base(sql_database_interface):
  262. """!This is the space time dataset metadata base class for strds, stvds and str3ds datasets
  263. setting/getting the id, the title and the description
  264. """
  265. def __init__(self, table=None, ident=None, title=None, description=None):
  266. sql_database_interface.__init__(self, table, ident)
  267. self.set_id(ident)
  268. self.set_title(title)
  269. self.set_description(description)
  270. # No setter for this
  271. self.D["number_of_maps"] = None
  272. def set_id(self, ident):
  273. """!Convenient method to set the unique identifier (primary key)"""
  274. self.ident = ident
  275. self.D["id"] = ident
  276. def set_title(self, title):
  277. """!Set the title"""
  278. self.D["title"] = title
  279. def set_description(self, description):
  280. """!Set the number of cols"""
  281. self.D["description"] = description
  282. def get_id(self):
  283. """!Convenient method to get the unique identifier (primary key)
  284. @return None if not found
  285. """
  286. if self.D.has_key("id"):
  287. return self.D["id"]
  288. else:
  289. return None
  290. def get_title(self):
  291. """!Get the title
  292. @return None if not found"""
  293. if self.D.has_key("title"):
  294. return self.D["title"]
  295. else:
  296. return None
  297. def get_description(self):
  298. """!Get description
  299. @return None if not found"""
  300. if self.D.has_key("description"):
  301. return self.D["description"]
  302. else:
  303. return None
  304. def get_number_of_maps(self):
  305. """!Get the number of registered maps, this value is set in the database
  306. automatically via SQL trigger, so no setter exists
  307. @return None if not found"""
  308. if self.D.has_key("number_of_maps"):
  309. return self.D["number_of_maps"]
  310. else:
  311. return None
  312. def print_info(self):
  313. """!Print information about this class in human readable style"""
  314. # 0123456789012345678901234567890
  315. print " | Number of registered maps:.. " + str(self.get_number_of_maps())
  316. print " | Title:"
  317. print " | " + str(self.get_title())
  318. print " | Description:"
  319. print " | " + str(self.get_description())
  320. def print_shell_info(self):
  321. """!Print information about this class in shell style"""
  322. print "number_of_maps=" + str(self.get_number_of_maps())
  323. ###############################################################################
  324. class stds_raster_metadata_base(stds_metadata_base):
  325. """!This is the space time dataset metadata base class for strds and str3ds datasets
  326. Most of the metadata values are set by triggers in the database when
  327. new raster of voxel maps are added. Therefor only some set- an many get-functions
  328. are available.
  329. """
  330. def __init__(self, table=None, ident=None, title=None, description=None):
  331. stds_metadata_base.__init__(self, table, ident, title, description)
  332. # Initialize the dict to select all values from the db
  333. self.D["min_max"] = None
  334. self.D["max_max"] = None
  335. self.D["min_min"] = None
  336. self.D["max_min"] = None
  337. self.D["nsres_min"] = None
  338. self.D["nsres_max"] = None
  339. self.D["ewres_min"] = None
  340. self.D["ewres_max"] = None
  341. def get_max_min(self):
  342. """!Get the minimal maximum of all registered maps, this value is set in the database
  343. automatically via SQL trigger, so no setter exists
  344. @return None if not found"""
  345. if self.D.has_key("max_min"):
  346. return self.D["max_min"]
  347. else:
  348. return None
  349. def get_min_min(self):
  350. """!Get the minimal minimum of all registered maps, this value is set in the database
  351. automatically via SQL trigger, so no setter exists
  352. @return None if not found"""
  353. if self.D.has_key("min_min"):
  354. return self.D["min_min"]
  355. else:
  356. return None
  357. def get_max_max(self):
  358. """!Get the maximal maximum of all registered maps, this value is set in the database
  359. automatically via SQL trigger, so no setter exists
  360. @return None if not found"""
  361. if self.D.has_key("max_max"):
  362. return self.D["max_max"]
  363. else:
  364. return None
  365. def get_min_max(self):
  366. """!Get the maximal minimum of all registered maps, this value is set in the database
  367. automatically via SQL trigger, so no setter exists
  368. @return None if not found"""
  369. if self.D.has_key("min_max"):
  370. return self.D["min_max"]
  371. else:
  372. return None
  373. def get_nsres_min(self):
  374. """!Get the minimal north-south resolution of all registered maps, this value is set in the database
  375. automatically via SQL trigger, so no setter exists
  376. @return None if not found"""
  377. if self.D.has_key("nsres_min"):
  378. return self.D["nsres_min"]
  379. else:
  380. return None
  381. def get_nsres_max(self):
  382. """!Get the maximal north-south resolution of all registered maps, this value is set in the database
  383. automatically via SQL trigger, so no setter exists
  384. @return None if not found"""
  385. if self.D.has_key("nsres_max"):
  386. return self.D["nsres_max"]
  387. else:
  388. return None
  389. def get_ewres_min(self):
  390. """!Get the minimal east-west resolution of all registered maps, this value is set in the database
  391. automatically via SQL trigger, so no setter exists
  392. @return None if not found"""
  393. if self.D.has_key("ewres_min"):
  394. return self.D["ewres_min"]
  395. else:
  396. return None
  397. def get_ewres_max(self):
  398. """!Get the maximal east-west resolution of all registered maps, this value is set in the database
  399. automatically via SQL trigger, so no setter exists
  400. @return None if not found"""
  401. if self.D.has_key("ewres_max"):
  402. return self.D["ewres_max"]
  403. else:
  404. return None
  405. def print_info(self):
  406. """!Print information about this class in human readable style"""
  407. stds_metadata_base.print_info(self)
  408. # 0123456789012345678901234567890
  409. print " | North-South resolution min:. " + str(self.get_nsres_min())
  410. print " | North-South resolution max:. " + str(self.get_nsres_max())
  411. print " | East-west resolution min:... " + str(self.get_ewres_min())
  412. print " | East-west resolution max:... " + str(self.get_ewres_max())
  413. print " | Minimum value min:.......... " + str(self.get_min_min())
  414. print " | Minimum value max:.......... " + str(self.get_min_max())
  415. print " | Maximum value min:.......... " + str(self.get_max_min())
  416. print " | Maximum value max:.......... " + str(self.get_max_max())
  417. def print_shell_info(self):
  418. """!Print information about this class in shell style"""
  419. stds_metadata_base.print_shell_info(self)
  420. print "nsres_min=" + str(self.get_nsres_min())
  421. print "nsres_max=" + str(self.get_nsres_max())
  422. print "ewres_min=" + str(self.get_ewres_min())
  423. print "ewres_max=" + str(self.get_ewres_max())
  424. print "min_min=" + str(self.get_min_min())
  425. print "min_max=" + str(self.get_min_max())
  426. print "max_min=" + str(self.get_max_min())
  427. print "max_max=" + str(self.get_max_max())
  428. ###############################################################################
  429. class strds_metadata(stds_raster_metadata_base):
  430. """!This is the raster metadata class"""
  431. def __init__(self, ident=None, raster_register=None, title=None, description=None):
  432. stds_raster_metadata_base.__init__(self, "strds_metadata", ident, title, description)
  433. self.set_raster_register(raster_register)
  434. def set_raster_register(self, raster_register):
  435. """!Set the raster map register table name"""
  436. self.D["raster_register"] = raster_register
  437. def get_raster_register(self):
  438. """!Get the raster map register table name
  439. @return None if not found"""
  440. if self.D.has_key("raster_register"):
  441. return self.D["raster_register"]
  442. else:
  443. return None
  444. def print_info(self):
  445. """!Print information about this class in human readable style"""
  446. print " +-------------------- Metadata information ----------------------------------+"
  447. # 0123456789012345678901234567890
  448. stds_raster_metadata_base.print_info(self)
  449. print " | Raster register table:...... " + str(self.get_raster_register())
  450. def print_shell_info(self):
  451. """!Print information about this class in shell style"""
  452. stds_raster_metadata_base.print_shell_info(self)
  453. print "raster_register=" + str(self.get_raster_register())
  454. ###############################################################################
  455. class str3ds_metadata(stds_raster_metadata_base):
  456. """!This is the space time raster3d metadata class"""
  457. def __init__(self, ident=None, raster3d_register=None, title=None, description=None):
  458. stds_raster_metadata_base.__init__(self, "str3ds_metadata", ident, title, description)
  459. self.set_raster3d_register(raster3d_register)
  460. self.D["tbres_min"] = None
  461. self.D["tbres_max"] = None
  462. def set_raster3d_register(self, raster3d_register):
  463. """!Set the raster map register table name"""
  464. self.D["raster3d_register"] = raster3d_register
  465. def get_raster3d_register(self):
  466. """!Get the raster3d map register table name
  467. @return None if not found"""
  468. if self.D.has_key("raster3d_register"):
  469. return self.D["raster3d_register"]
  470. else:
  471. return None
  472. def get_tbres_min(self):
  473. """!Get the minimal top-bottom resolution of all registered maps, this value is set in the database
  474. automatically via SQL trigger, so no setter exists
  475. @return None if not found"""
  476. if self.D.has_key("tbres_min"):
  477. return self.D["tbres_min"]
  478. else:
  479. return None
  480. def get_tbres_max(self):
  481. """!Get the maximal top-bottom resolution of all registered maps, this value is set in the database
  482. automatically via SQL trigger, so no setter exists
  483. @return None if not found"""
  484. if self.D.has_key("tbres_max"):
  485. return self.D["tbres_max"]
  486. else:
  487. return None
  488. def print_info(self):
  489. """!Print information about this class in human readable style"""
  490. print " +-------------------- Metadata information ----------------------------------+"
  491. # 0123456789012345678901234567890
  492. stds_raster_metadata_base.print_info(self)
  493. # 0123456789012345678901234567890
  494. print " | Top-bottom resolution min:.. " + str(self.get_ewres_min())
  495. print " | Top-bottom resolution max:.. " + str(self.get_ewres_max())
  496. print " | Raster3d register table:.... " + str(self.get_raster3d_register())
  497. def print_shell_info(self):
  498. """!Print information about this class in shell style"""
  499. stds_raster_metadata_base.print_shell_info(self)
  500. print "tbres_min=" + str(self.get_tbres_min())
  501. print "tbres_max=" + str(self.get_tbres_max())
  502. print "raster3d_register=" + str(self.get_raster3d_register())
  503. ###############################################################################
  504. class stvds_metadata(stds_metadata_base):
  505. """!This is the raster metadata class"""
  506. def __init__(self, ident=None, vector_register=None, title=None, description=None):
  507. stds_metadata_base.__init__(self, "stvds_metadata", ident, title, description)
  508. self.set_vector_register(vector_register)
  509. def set_vector_register(self, vector_register):
  510. """!Set the vector map register table name"""
  511. self.D["vector_register"] = vector_register
  512. def get_vector_register(self):
  513. """!Get the vector map register table name
  514. @return None if not found"""
  515. if self.D.has_key("vector_register"):
  516. return self.D["vector_register"]
  517. else:
  518. return None
  519. def print_info(self):
  520. """!Print information about this class in human readable style"""
  521. print " +-------------------- Metadata information ----------------------------------+"
  522. # 0123456789012345678901234567890
  523. stds_metadata_base.print_info(self)
  524. print " | Vector register table:...... " + str(self.get_vector_register())
  525. def print_shell_info(self):
  526. """!Print information about this class in shell style"""
  527. stds_metadata_base.print_shell_info(self)
  528. print "vector_register=" + str(self.get_vector_register())