v.to.3d.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. #!/usr/bin/env python
  2. ############################################################################
  3. #
  4. # MODULE: v.to.3d
  5. #
  6. # AUTHOR: Martin Landa, CTU in Prague, Czech Republic
  7. #
  8. # PURPOSE: Transform 2D vectors to 3D vectors
  9. # (frontend to v.transform)
  10. #
  11. # COPYRIGHT: (c) 2008 Martin Landa, and the GRASS Development Team
  12. # This program is free software under the GNU General Public
  13. # License (>=v2). Read the file COPYING that comes with GRASS
  14. # for details.
  15. #
  16. #############################################################################
  17. #%Module
  18. #% description: Performs transformation of 2D vector features to 3D.
  19. #% keywords: vector, transformation, 3D
  20. #%End
  21. #%Option
  22. #% key: input
  23. #% type: string
  24. #% required: yes
  25. #% multiple: no
  26. #% key_desc: name
  27. #% description: Name of input vector map
  28. #% gisprompt: old,vector,vector
  29. #%End
  30. #%Option
  31. #% key: output
  32. #% type: string
  33. #% required: yes
  34. #% multiple: no
  35. #% key_desc: name
  36. #% description: Name for output vector map
  37. #% gisprompt: new,vector,vector
  38. #%End
  39. #%Option
  40. #% key: height
  41. #% type: double
  42. #% required: no
  43. #% multiple: no
  44. #% description: Fixed height for 3D vector features
  45. #%End
  46. #%Option
  47. #% key: layer
  48. #% type: integer
  49. #% required: no
  50. #% multiple: no
  51. #% label: Layer number
  52. #% description: A single vector map can be connected to multiple database tables. This number determines which table to use.
  53. #% answer: 1
  54. #% gisprompt: old_layer,layer,layer
  55. #%End
  56. #%Option
  57. #% key: column
  58. #% type: string
  59. #% required: no
  60. #% multiple: no
  61. #% key_desc: name
  62. #% description: Name of attribute column used for height
  63. #% gisprompt: old_dbcolumn,dbcolumn,dbcolumn
  64. #%End
  65. import sys
  66. import os
  67. import grass
  68. def main():
  69. input = options['input']
  70. output = options['output']
  71. layer = options['layer']
  72. column = options['column']
  73. height = options['height']
  74. map3d = int(grass.parse_key_val(grass.read_command('v.info', map = input, flags = 't'))['map3d'])
  75. if map3d == 1:
  76. grass.fatal("Vector map <%s> is 3D" % input)
  77. if height:
  78. if column:
  79. grass.fatal("Either 'height' or 'column' parameter have to be used")
  80. # fixed height
  81. grass.run_command('v.transform', input = input, output = output,
  82. zshift = height)
  83. else:
  84. if not column:
  85. grass.fatal("Either 'height' or 'column' parameter have to be used")
  86. # attribute height, check column type
  87. try:
  88. coltype = grass.vector_columns(map = input, layer = layer)[column]
  89. except KeyError:
  90. grass.fatal("Column <%s> not found" % column)
  91. if coltype not in ('INTEGER',
  92. 'DOUBLE PRECISION'):
  93. grass.fatal("Column type must be numeric")
  94. f = grass.vector_layer_db(map = input, layer = layer)
  95. table = f['table']
  96. columns = "zshift:%s" % column
  97. grass.run_command('v.transform', input = input, output = output,
  98. layer = layer, columns = columns,
  99. table = table)
  100. grass.vector_history(map = output)
  101. return 0
  102. if __name__ == "__main__":
  103. options, flags = grass.parser()
  104. sys.exit(main())