gdal-helper 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/examples/basic_example.rb +26 -0
- data/examples/gdal_helper_test.rb +18 -0
- data/examples/print_info_example.rb +14 -0
- data/lib/gdal_helper.rb +408 -0
- data/lib/version.rb +4 -0
- data/test/ruby_gem_test.rb +3 -0
- metadata +60 -0
@@ -0,0 +1,26 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require "rubygems"
|
3
|
+
require "pp"
|
4
|
+
require "gdal_helper"
|
5
|
+
|
6
|
+
#basic plan - open a 256 by 256 image, write some data, set the projection and geo_trans, then quit, job done.
|
7
|
+
image_size = 256
|
8
|
+
# Open a tiff to write to, with default create options (TILED=YES, COMPRESS=LZW) to write to..
|
9
|
+
outfile = Gdal_File.new(ARGV[0], "w", image_size ,image_size,3,"GTiff", String, ["COMPRESS=DEFLATE", "TILED=YES"])
|
10
|
+
0.upto(image_size-1) do |y|
|
11
|
+
#Read a single line, line y
|
12
|
+
bands = outfile.read_bands(0,y,image_size,1)
|
13
|
+
y_value = ((256.0/image_size)*y).to_i
|
14
|
+
0.upto(image_size-1) do |x|
|
15
|
+
bands[0][x]=((256.0/image_size)*x).to_i;
|
16
|
+
bands[1][x]= y_value
|
17
|
+
end
|
18
|
+
outfile.write_bands(0,y,image_size,1,bands)
|
19
|
+
end
|
20
|
+
# Set the projection
|
21
|
+
outfile.set_projection_epsg(102006)
|
22
|
+
# set the geo transform (world file)
|
23
|
+
outfile.set_geo_transform([1497254.72218513,17.6750396474176,0.0,971470.96496574,0.0,-17.6750396474176])
|
24
|
+
|
25
|
+
|
26
|
+
|
@@ -0,0 +1,18 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require "rubygems"
|
3
|
+
require "gdal_helper"
|
4
|
+
|
5
|
+
## Open input file
|
6
|
+
infile = Gdal_File.new(ARGV[0])
|
7
|
+
puts ("#{ARGV[0]} -> #{infile}")
|
8
|
+
# Read the upper left hand quarter
|
9
|
+
bands = infile.read_bands(0,0,infile.xsize/4,infile.ysize/4)
|
10
|
+
# Open a file to write to..
|
11
|
+
outfile = Gdal_File.new(ARGV[1], "w", infile.xsize/4 , infile.ysize/4,infile.number_of_bands,"GTiff", infile.data_type )
|
12
|
+
# write the upper left hand quarter..
|
13
|
+
outfile.write_bands(0,0,infile.xsize/4,infile.ysize/4,bands)
|
14
|
+
# Set the projection
|
15
|
+
outfile.set_projection_epsg(102006)
|
16
|
+
|
17
|
+
|
18
|
+
|
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# Basic example - opens the files in argv and prints some info on them..
|
3
|
+
require "rubygems"
|
4
|
+
require "gdal_helper"
|
5
|
+
|
6
|
+
ARGV.each do |item|
|
7
|
+
gdal_file = Gdal_File.new(item) #open the file..
|
8
|
+
size = gdal_file.size() #get the size hash..
|
9
|
+
puts("#{item}: #{size["x"]}x#{size["y"]}")
|
10
|
+
puts("#{item}: #{size["bands"]} bands of type #{size["data_type"]}")
|
11
|
+
puts("#{item}: projection -> '#{gdal_file.get_projection}'")
|
12
|
+
puts("#{item}: geo_transform -> [#{gdal_file.get_geo_transform.join(",")}]")
|
13
|
+
end
|
14
|
+
|
data/lib/gdal_helper.rb
ADDED
@@ -0,0 +1,408 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# A simple wrapper class for gdal - the goal is to provide a very simple and easy interface to gdal in ruby.
|
3
|
+
# Ruby's gdal bindings, and ruby's ogr bindings are required.
|
4
|
+
# blame for this work goes to jay@spruceboy.net
|
5
|
+
# Feel free to fork/revamp/whatever - credit would be nice, but not required.
|
6
|
+
# I am hoping some more qualified folks will take this on and make it gleam with super goodness - Have at it folks!
|
7
|
+
require "gdal/gdal"
|
8
|
+
require "gdal/gdalconst"
|
9
|
+
require 'gdal/osr'
|
10
|
+
|
11
|
+
|
12
|
+
###
|
13
|
+
# Helper class for gdal.
|
14
|
+
|
15
|
+
# class with constants and bits that will be used by all gdal-helper classes
|
16
|
+
class Gdal_Stuff
|
17
|
+
# Does type mappings from gdal to ruby - pretty basic, and needs to be expanded so other types can be done, like for example
|
18
|
+
# 32 bit integer types, 16 bit types, double floating bit types, unsigned int types, etc..
|
19
|
+
def data_type_from_gdal(data_type)
|
20
|
+
case (data_type)
|
21
|
+
when Gdal::Gdalconst::GDT_UNKNOWN; return null
|
22
|
+
when Gdal::Gdalconst::GDT_BYTE; return String
|
23
|
+
when Gdal::Gdalconst::GDT_UINT16 ; return Integer
|
24
|
+
when Gdal::Gdalconst::GDT_INT16; return Integer
|
25
|
+
when Gdal::Gdalconst::GDT_UINT32; return Integer
|
26
|
+
when Gdal::Gdalconst::GDT_INT32; return Integer
|
27
|
+
when Gdal::Gdalconst::GDT_FLOAT32; return Float
|
28
|
+
when Gdal::Gdalconst::GDT_FLOAT64; return Float
|
29
|
+
when Gdal::Gdalconst::GDT_CINT16; return Integer
|
30
|
+
when Gdal::Gdalconst::GDT_CINT32; return Float
|
31
|
+
when Gdal::Gdalconst::GDT_CFLOAT32; return Float
|
32
|
+
when Gdal::Gdalconst::GDT_CFLOAT64; return Float
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
# Does type mappings from ruby to gdal - pretty basic, and needs to be expanded so other types can be done, like for example
|
37
|
+
# 32 bit integer types, 16 bit types, double floating bit types, unsigned int types, etc..
|
38
|
+
def data_type_to_gdal ( data_type )
|
39
|
+
#puts("DEBUG: data_type_to_gdal(#{data_type})")
|
40
|
+
# Does not work, something is wrong with my understanding of the case statement and class compares..
|
41
|
+
#case (data_type)
|
42
|
+
# when String; return Gdal::Gdalconst::GDT_BYTE
|
43
|
+
# when Integer; return Gdal::Gdalconst::GDT_INT16
|
44
|
+
# when Float; return Gdal::Gdalconst::GDT_FLOAT32
|
45
|
+
#end
|
46
|
+
return Gdal::Gdalconst::GDT_BYTE if (data_type == String )
|
47
|
+
return Gdal::Gdalconst::GDT_INT16 if (data_type == Integer )
|
48
|
+
return Gdal::Gdalconst::GDT_FLOAT32 if (data_type == Float )
|
49
|
+
raise ArgumentError, "#{data_type} is not a valid (String|Integer|Float) data type.. not sure what to do here folks", caller
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
##
|
55
|
+
# Class wrapping up a gdal band.
|
56
|
+
class Gdal_Band < Gdal_Stuff
|
57
|
+
|
58
|
+
def initialize( band)
|
59
|
+
@band = band
|
60
|
+
end
|
61
|
+
#Reads data
|
62
|
+
def read(start_x, start_y, width_x, width_y)
|
63
|
+
return unpack(width_y*width_x, @band.read_raster(start_x,start_y,width_x,width_y))
|
64
|
+
end
|
65
|
+
|
66
|
+
#Writes data
|
67
|
+
def write(start_x, start_y, width_x, width_y, data)
|
68
|
+
return @band.write_raster(start_x,start_y,width_x,width_y, pack(data))
|
69
|
+
end
|
70
|
+
|
71
|
+
#returns the datatype
|
72
|
+
def data_type()
|
73
|
+
data_type_from_gdal(@band.DataType)
|
74
|
+
end
|
75
|
+
|
76
|
+
#returns the datatype as a string in a gdal like manner
|
77
|
+
def data_type_pretty()
|
78
|
+
type_string = case(@band.DataType)
|
79
|
+
when Gdal::Gdalconst::GDT_UNKNOWN; 'GDT_UNKNOWN'
|
80
|
+
when Gdal::Gdalconst::GDT_BYTE; 'GDT_BYTE'
|
81
|
+
when Gdal::Gdalconst::GDT_UINT16;'GDT_UINT16'
|
82
|
+
when Gdal::Gdalconst::GDT_INT16;'GDT_INT16'
|
83
|
+
when Gdal::Gdalconst::GDT_UINT32; 'GDT_UINT32'
|
84
|
+
when Gdal::Gdalconst::GDT_INT32; 'GDT_INT32'
|
85
|
+
when Gdal::Gdalconst::GDT_FLOAT32; 'IDT_FLOAT32'
|
86
|
+
when Gdal::Gdalconst::GDT_FLOAT64; 'GDT_FLOAT64'
|
87
|
+
when Gdal::Gdalconst::GDT_CINT16; 'GDT_CINT16'
|
88
|
+
when Gdal::Gdalconst::GDT_CINT32; 'GDT_CINT32'
|
89
|
+
when Gdal::Gdalconst::GDT_CFLOAT32; 'GDT_CFLOAT32'
|
90
|
+
when Gdal::Gdalconst::GDT_CFLOAT64; 'GDT_CFLOAT64'
|
91
|
+
end
|
92
|
+
type_string
|
93
|
+
end
|
94
|
+
|
95
|
+
#converts to a string for display/print/other .to_s action
|
96
|
+
def to_s
|
97
|
+
"#{data_type_pretty}"
|
98
|
+
end
|
99
|
+
|
100
|
+
private
|
101
|
+
|
102
|
+
# string.pack notes - for refrence for the function below.
|
103
|
+
# Format | Returns | Function
|
104
|
+
#-------+---------+-----------------------------------------
|
105
|
+
# A | String | with trailing nulls and spaces removed
|
106
|
+
#-------+---------+-----------------------------------------
|
107
|
+
# a | String | string
|
108
|
+
#-------+---------+-----------------------------------------
|
109
|
+
# B | String | extract bits from each character (msb first)
|
110
|
+
#-------+---------+-----------------------------------------
|
111
|
+
# b | String | extract bits from each character (lsb first)
|
112
|
+
#-------+---------+-----------------------------------------
|
113
|
+
# C | Fixnum | extract a character as an unsigned integer
|
114
|
+
#-------+---------+-----------------------------------------
|
115
|
+
# c | Fixnum | extract a character as an integer
|
116
|
+
#-------+---------+-----------------------------------------
|
117
|
+
# d,D | Float | treat sizeof(double) characters as
|
118
|
+
# | | a native double
|
119
|
+
#-------+---------+-----------------------------------------
|
120
|
+
# E | Float | treat sizeof(double) characters as
|
121
|
+
# | | a double in little-endian byte order
|
122
|
+
#-------+---------+-----------------------------------------
|
123
|
+
# e | Float | treat sizeof(float) characters as
|
124
|
+
# | | a float in little-endian byte order
|
125
|
+
#-------+---------+-----------------------------------------
|
126
|
+
# f,F | Float | treat sizeof(float) characters as
|
127
|
+
# | | a native float
|
128
|
+
#-------+---------+-----------------------------------------
|
129
|
+
# G | Float | treat sizeof(double) characters as
|
130
|
+
# | | a double in network byte order
|
131
|
+
#-------+---------+-----------------------------------------
|
132
|
+
# g | Float | treat sizeof(float) characters as a
|
133
|
+
# | | float in network byte order
|
134
|
+
#-------+---------+-----------------------------------------
|
135
|
+
# H | String | extract hex nibbles from each character
|
136
|
+
# | | (most significant first)
|
137
|
+
#-------+---------+-----------------------------------------
|
138
|
+
# h | String | extract hex nibbles from each character
|
139
|
+
# | | (least significant first)
|
140
|
+
#-------+---------+-----------------------------------------
|
141
|
+
# I | Integer | treat sizeof(int) (modified by _)
|
142
|
+
# | | successive characters as an unsigned
|
143
|
+
# | | native integer
|
144
|
+
#-------+---------+-----------------------------------------
|
145
|
+
# i | Integer | treat sizeof(int) (modified by _)
|
146
|
+
# | | successive characters as a signed
|
147
|
+
# | | native integer
|
148
|
+
#-------+---------+-----------------------------------------
|
149
|
+
# L | Integer | treat four (modified by _) successive
|
150
|
+
# | | characters as an unsigned native
|
151
|
+
# | | long integer
|
152
|
+
#-------+---------+-----------------------------------------
|
153
|
+
# l | Integer | treat four (modified by _) successive
|
154
|
+
# | | characters as a signed native
|
155
|
+
# | | long integer
|
156
|
+
#-------+---------+-----------------------------------------
|
157
|
+
# M | String | quoted-printable
|
158
|
+
#-------+---------+-----------------------------------------
|
159
|
+
# m | String | base64-encoded
|
160
|
+
#-------+---------+-----------------------------------------
|
161
|
+
# N | Integer | treat four characters as an unsigned
|
162
|
+
# | | long in network byte order
|
163
|
+
#-------+---------+-----------------------------------------
|
164
|
+
# n | Fixnum | treat two characters as an unsigned
|
165
|
+
# | | short in network byte order
|
166
|
+
#-------+---------+-----------------------------------------
|
167
|
+
# P | String | treat sizeof(char *) characters as a
|
168
|
+
# | | pointer, and return \emph{len} characters
|
169
|
+
# | | from the referenced location
|
170
|
+
#-------+---------+-----------------------------------------
|
171
|
+
# p | String | treat sizeof(char *) characters as a
|
172
|
+
# | | pointer to a null-terminated string
|
173
|
+
#-------+---------+-----------------------------------------
|
174
|
+
# Q | Integer | treat 8 characters as an unsigned
|
175
|
+
# | | quad word (64 bits)
|
176
|
+
#-------+---------+-----------------------------------------
|
177
|
+
# q | Integer | treat 8 characters as a signed
|
178
|
+
# | | quad word (64 bits)
|
179
|
+
#-------+---------+-----------------------------------------
|
180
|
+
# S | Fixnum | treat two (different if _ used)
|
181
|
+
# | | successive characters as an unsigned
|
182
|
+
# | | short in native byte order
|
183
|
+
#-------+---------+-----------------------------------------
|
184
|
+
# s | Fixnum | Treat two (different if _ used)
|
185
|
+
# | | successive characters as a signed short
|
186
|
+
# | | in native byte order
|
187
|
+
#-------+---------+-----------------------------------------
|
188
|
+
# U | Integer | UTF-8 characters as unsigned integers
|
189
|
+
#-------+---------+-----------------------------------------
|
190
|
+
# u | String | UU-encoded
|
191
|
+
#-------+---------+-----------------------------------------
|
192
|
+
# V | Fixnum | treat four characters as an unsigned
|
193
|
+
# | | long in little-endian byte order
|
194
|
+
#-------+---------+-----------------------------------------
|
195
|
+
# v | Fixnum | treat two characters as an unsigned
|
196
|
+
# | | short in little-endian byte order
|
197
|
+
#-------+---------+-----------------------------------------
|
198
|
+
# w | Integer | BER-compressed integer (see Array.pack)
|
199
|
+
#-------+---------+-----------------------------------------
|
200
|
+
# X | --- | skip backward one character
|
201
|
+
#-------+---------+-----------------------------------------
|
202
|
+
# x | --- | skip forward one character
|
203
|
+
#-------+---------+-----------------------------------------
|
204
|
+
# Z | String | with trailing nulls removed
|
205
|
+
# | | upto first null with *
|
206
|
+
#-------+---------+-----------------------------------------
|
207
|
+
# @ | --- | skip to the offset given by the
|
208
|
+
# | | length argument
|
209
|
+
#-------+---------+-----------------------------------------
|
210
|
+
#unpacks the data
|
211
|
+
def unpack ( items, data)
|
212
|
+
pack_template = case (@band.DataType)
|
213
|
+
when Gdal::Gdalconst::GDT_UNKNOWN;raise ArgumentError, "GDT_UNKNOWN has no storage template.. not sure what to do here folks", caller
|
214
|
+
when Gdal::Gdalconst::GDT_BYTE; 'C'
|
215
|
+
when Gdal::Gdalconst::GDT_UINT16;'S'
|
216
|
+
when Gdal::Gdalconst::GDT_INT16;'s'
|
217
|
+
when Gdal::Gdalconst::GDT_UINT32; 'I'
|
218
|
+
when Gdal::Gdalconst::GDT_INT32; 'i'
|
219
|
+
when Gdal::Gdalconst::GDT_FLOAT32; 'f'
|
220
|
+
when Gdal::Gdalconst::GDT_FLOAT64; 'D'
|
221
|
+
when Gdal::Gdalconst::GDT_CINT16; '' #What are these?
|
222
|
+
when Gdal::Gdalconst::GDT_CINT32; '' #What are these?
|
223
|
+
when Gdal::Gdalconst::GDT_CFLOAT32; '' #What are these?
|
224
|
+
when Gdal::Gdalconst::GDT_CFLOAT64; '' #What are these?
|
225
|
+
end
|
226
|
+
return data.unpack(pack_template*data.length)
|
227
|
+
end
|
228
|
+
|
229
|
+
#Notes for pack..
|
230
|
+
# #Directives for pack.
|
231
|
+
#
|
232
|
+
#Directive Meaning
|
233
|
+
#---------------------------------------------------------------
|
234
|
+
# @ | Moves to absolute position
|
235
|
+
# A | ASCII string (space padded, count is width)
|
236
|
+
# a | ASCII string (null padded, count is width)
|
237
|
+
# B | Bit string (descending bit order)
|
238
|
+
# b | Bit string (ascending bit order)
|
239
|
+
# C | Unsigned char
|
240
|
+
# c | Char
|
241
|
+
# D, d | Double-precision float, native format
|
242
|
+
# E | Double-precision float, little-endian byte order
|
243
|
+
# e | Single-precision float, little-endian byte order
|
244
|
+
# F, f | Single-precision float, native format
|
245
|
+
# G | Double-precision float, network (big-endian) byte order
|
246
|
+
# g | Single-precision float, network (big-endian) byte order
|
247
|
+
# H | Hex string (high nibble first)
|
248
|
+
# h | Hex string (low nibble first)
|
249
|
+
# I | Unsigned integer
|
250
|
+
# i | Integer
|
251
|
+
# L | Unsigned long
|
252
|
+
# l | Long
|
253
|
+
# M | Quoted printable, MIME encoding (see RFC2045)
|
254
|
+
# m | Base64 encoded string
|
255
|
+
# N | Long, network (big-endian) byte order
|
256
|
+
# n | Short, network (big-endian) byte-order
|
257
|
+
# P | Pointer to a structure (fixed-length string)
|
258
|
+
# p | Pointer to a null-terminated string
|
259
|
+
# Q, q | 64-bit number
|
260
|
+
# S | Unsigned short
|
261
|
+
# s | Short
|
262
|
+
# U | UTF-8
|
263
|
+
# u | UU-encoded string
|
264
|
+
# V | Long, little-endian byte order
|
265
|
+
# v | Short, little-endian byte order
|
266
|
+
# w | BER-compressed integer\fnm
|
267
|
+
# X | Back up a byte
|
268
|
+
# x | Null byte
|
269
|
+
# Z | Same as ``a'', except that null is added with *
|
270
|
+
# packs data in prep to write to gdal..
|
271
|
+
def pack(data)
|
272
|
+
pack_template = case(@band.DataType)
|
273
|
+
when Gdal::Gdalconst::GDT_UNKNOWN;raise ArgumentError, "GDT_UNKNOWN has no storage template.. not sure what to do here folks", caller
|
274
|
+
when Gdal::Gdalconst::GDT_BYTE; 'c'
|
275
|
+
when Gdal::Gdalconst::GDT_UINT16;'S'
|
276
|
+
when Gdal::Gdalconst::GDT_INT16;'s'
|
277
|
+
when Gdal::Gdalconst::GDT_UINT32; 'I'
|
278
|
+
when Gdal::Gdalconst::GDT_INT32; 'i'
|
279
|
+
when Gdal::Gdalconst::GDT_FLOAT32; 'f'
|
280
|
+
when Gdal::Gdalconst::GDT_FLOAT64; 'D'
|
281
|
+
when Gdal::Gdalconst::GDT_CINT16; '' #What are these? Complex types?
|
282
|
+
when Gdal::Gdalconst::GDT_CINT32; '' #What are these?
|
283
|
+
when Gdal::Gdalconst::GDT_CFLOAT32; '' #What are these?
|
284
|
+
when Gdal::Gdalconst::GDT_CFLOAT64; '' #What are these?
|
285
|
+
end
|
286
|
+
raise(ArgumentError, "Complex type requested, but no complex type handling.. not sure what to do here folks", caller) if ( pack_template == '')
|
287
|
+
return data.pack(pack_template*data.length)
|
288
|
+
end
|
289
|
+
|
290
|
+
end
|
291
|
+
|
292
|
+
##
|
293
|
+
# Class for a file - this is what most folks want
|
294
|
+
# Use like:
|
295
|
+
#infile = Gdal_File.new("foo.tif")
|
296
|
+
#bands = infile.read_bands(0,0,infile.xsize/4,infile.ysize/4)
|
297
|
+
#..do something..
|
298
|
+
class Gdal_File < Gdal_Stuff
|
299
|
+
def initialize ( name, mode="r", xsize=nil, ysize=nil,bands=3, driver="GTiff", data_type=String, options=['TILED=YES','COMPRESS=DEFLATE'] )
|
300
|
+
if ( mode == "r" )
|
301
|
+
@gdal_file = Gdal::Gdal.open(name)
|
302
|
+
else
|
303
|
+
if ( mode == "w")
|
304
|
+
if (File.exists?(name))
|
305
|
+
@gdal_file = Gdal::Gdal.open(name,Gdal::Gdalconst::GA_UPDATE )
|
306
|
+
else
|
307
|
+
driver = Gdal::Gdal.get_driver_by_name(driver)
|
308
|
+
puts(driver.class)
|
309
|
+
puts("Creating create(#{name}, #{xsize}, #{ysize}, #{bands}, #{data_type_to_gdal(data_type).to_s})")
|
310
|
+
@gdal_file = driver.create(name, xsize, ysize, bands, data_type_to_gdal(data_type), options)
|
311
|
+
end
|
312
|
+
else
|
313
|
+
raise ArgumentError, "mode of \"#{mode}\" is not useful (not r|w) not sure what to do here folks", caller
|
314
|
+
end
|
315
|
+
end
|
316
|
+
|
317
|
+
@bands=[]
|
318
|
+
#1 is not a mistake - the raster bands start at 1 no 0. just a fyi.
|
319
|
+
1.upto(@gdal_file.RasterCount).each {|x| @bands << Gdal_Band.new(@gdal_file.get_raster_band(x))}
|
320
|
+
end
|
321
|
+
|
322
|
+
###
|
323
|
+
# methods for Reading and writing data..
|
324
|
+
|
325
|
+
#reads bands
|
326
|
+
def read_bands(start_x, start_y, width_x, width_y)
|
327
|
+
data = []
|
328
|
+
@bands.each_index {|x| data[x] = @bands[x].read(start_x, start_y, width_x, width_y)}
|
329
|
+
data
|
330
|
+
end
|
331
|
+
#reads a band
|
332
|
+
def read_band(bandno,start_x, start_y,width_x, width_y )
|
333
|
+
@bands[bandno].read(start_x, start_y, width_x, width_y)
|
334
|
+
end
|
335
|
+
#writes bands
|
336
|
+
def write_bands(start_x, start_y, width_x, width_y, bands)
|
337
|
+
bands.each_index {|x| @bands[x].write(start_x, start_y, width_x, width_y, bands[x])}
|
338
|
+
end
|
339
|
+
#writes a band
|
340
|
+
def write_band(bandno,start_x, start_y, end_x, end_y, band )
|
341
|
+
@bands[bandno].write(start_x, start_y, end_x, end_y, band)
|
342
|
+
end
|
343
|
+
|
344
|
+
|
345
|
+
###
|
346
|
+
# getting info about the data..
|
347
|
+
|
348
|
+
#returns basic size info as a hash
|
349
|
+
def size()
|
350
|
+
{ "x"=> @gdal_file.RasterXSize,
|
351
|
+
"y" => @gdal_file.RasterYSize,
|
352
|
+
"bands" => @bands.length,
|
353
|
+
"data_type" => @bands[0].data_type()}
|
354
|
+
end
|
355
|
+
|
356
|
+
#x dimention size
|
357
|
+
def xsize()
|
358
|
+
@gdal_file.RasterXSize
|
359
|
+
end
|
360
|
+
|
361
|
+
#y dim size
|
362
|
+
def ysize()
|
363
|
+
@gdal_file.RasterYSize
|
364
|
+
end
|
365
|
+
|
366
|
+
#number of bands
|
367
|
+
def number_of_bands()
|
368
|
+
@bands.length
|
369
|
+
end
|
370
|
+
|
371
|
+
#types of bands
|
372
|
+
def data_type()
|
373
|
+
@bands.first.data_type
|
374
|
+
end
|
375
|
+
|
376
|
+
#for pping or other .to_s action..
|
377
|
+
def to_s
|
378
|
+
"#{xsize}x#{ysize} with #{number_of_bands} #{@bands[0].to_s} bands"
|
379
|
+
end
|
380
|
+
|
381
|
+
# gets the projection
|
382
|
+
def get_projection
|
383
|
+
@gdal_file.get_projection
|
384
|
+
end
|
385
|
+
|
386
|
+
#sets the projection
|
387
|
+
def set_projection(proj_str)
|
388
|
+
@gdal_file.set_projection(proj_str)
|
389
|
+
end
|
390
|
+
|
391
|
+
#looks up the projection in the epsg database, give it a number like 102006.
|
392
|
+
def set_projection_epsg(epsg)
|
393
|
+
srs = Gdal::Osr::SpatialReference.new()
|
394
|
+
srs.import_from_epsg(epsg)
|
395
|
+
@gdal_file.set_projection(srs.export_to_wkt)
|
396
|
+
end
|
397
|
+
|
398
|
+
#sets the geo_transform, the wld file generally.
|
399
|
+
def set_geo_transform(srs)
|
400
|
+
@gdal_file.set_geo_transform(srs)
|
401
|
+
end
|
402
|
+
|
403
|
+
#gets the geo transform (wld file traditionally)
|
404
|
+
def get_geo_transform()
|
405
|
+
@gdal_file.get_geo_transform
|
406
|
+
end
|
407
|
+
|
408
|
+
end
|
data/lib/version.rb
ADDED
metadata
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: gdal-helper
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- JC
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2010-04-20 00:00:00 -08:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: A helper library for the ruby bindings to gdal (http://gdal.org)
|
17
|
+
email: JC@alaska.edu
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files: []
|
23
|
+
|
24
|
+
files:
|
25
|
+
- lib/version.rb
|
26
|
+
- lib/gdal_helper.rb
|
27
|
+
- test/ruby_gem_test.rb
|
28
|
+
- examples/basic_example.rb
|
29
|
+
- examples/print_info_example.rb
|
30
|
+
- examples/gdal_helper_test.rb
|
31
|
+
has_rdoc: true
|
32
|
+
homepage: http://www.gina.alaska.edu
|
33
|
+
licenses: []
|
34
|
+
|
35
|
+
post_install_message:
|
36
|
+
rdoc_options: []
|
37
|
+
|
38
|
+
require_paths:
|
39
|
+
- lib
|
40
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
41
|
+
requirements:
|
42
|
+
- - ">="
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: "0"
|
45
|
+
version:
|
46
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
47
|
+
requirements:
|
48
|
+
- - ">="
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: "0"
|
51
|
+
version:
|
52
|
+
requirements:
|
53
|
+
- PostgreSQL >= 7.4
|
54
|
+
rubyforge_project:
|
55
|
+
rubygems_version: 1.3.4
|
56
|
+
signing_key:
|
57
|
+
specification_version: 3
|
58
|
+
summary: A helper library for the ruby bindings to gdal (http://gdal.org)
|
59
|
+
test_files: []
|
60
|
+
|