tgis_metadata.py 19 KB

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