gdal-helper 0.0.1 → 0.0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/examples/basic_example.rb +1 -1
- data/examples/gdal_helper_test.rb +2 -2
- data/examples/print_info_example.rb +1 -1
- data/lib/gdal_helper.rb +24 -20
- data/lib/version.rb +1 -1
- metadata +12 -4
data/examples/basic_example.rb
CHANGED
@@ -6,7 +6,7 @@ require "gdal_helper"
|
|
6
6
|
#basic plan - open a 256 by 256 image, write some data, set the projection and geo_trans, then quit, job done.
|
7
7
|
image_size = 256
|
8
8
|
# Open a tiff to write to, with default create options (TILED=YES, COMPRESS=LZW) to write to..
|
9
|
-
outfile =
|
9
|
+
outfile = GdalFile.new(ARGV[0], "w", image_size ,image_size,3,"GTiff", String, ["COMPRESS=DEFLATE", "TILED=YES"])
|
10
10
|
0.upto(image_size-1) do |y|
|
11
11
|
#Read a single line, line y
|
12
12
|
bands = outfile.read_bands(0,y,image_size,1)
|
@@ -3,12 +3,12 @@ require "rubygems"
|
|
3
3
|
require "gdal_helper"
|
4
4
|
|
5
5
|
## Open input file
|
6
|
-
infile =
|
6
|
+
infile = GdalFile.new(ARGV[0])
|
7
7
|
puts ("#{ARGV[0]} -> #{infile}")
|
8
8
|
# Read the upper left hand quarter
|
9
9
|
bands = infile.read_bands(0,0,infile.xsize/4,infile.ysize/4)
|
10
10
|
# Open a file to write to..
|
11
|
-
outfile =
|
11
|
+
outfile = GdalFile.new(ARGV[1], "w", infile.xsize/4 , infile.ysize/4,infile.number_of_bands,"GTiff", infile.data_type )
|
12
12
|
# write the upper left hand quarter..
|
13
13
|
outfile.write_bands(0,0,infile.xsize/4,infile.ysize/4,bands)
|
14
14
|
# Set the projection
|
@@ -4,7 +4,7 @@ require "rubygems"
|
|
4
4
|
require "gdal_helper"
|
5
5
|
|
6
6
|
ARGV.each do |item|
|
7
|
-
gdal_file =
|
7
|
+
gdal_file = GdalFile.new(item) #open the file..
|
8
8
|
size = gdal_file.size() #get the size hash..
|
9
9
|
puts("#{item}: #{size["x"]}x#{size["y"]}")
|
10
10
|
puts("#{item}: #{size["bands"]} bands of type #{size["data_type"]}")
|
data/lib/gdal_helper.rb
CHANGED
@@ -13,7 +13,7 @@ require 'gdal/osr'
|
|
13
13
|
# Helper class for gdal.
|
14
14
|
|
15
15
|
# class with constants and bits that will be used by all gdal-helper classes
|
16
|
-
class
|
16
|
+
class GdalStuff
|
17
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
18
|
# 32 bit integer types, 16 bit types, double floating bit types, unsigned int types, etc..
|
19
19
|
def data_type_from_gdal(data_type)
|
@@ -30,6 +30,7 @@ class Gdal_Stuff
|
|
30
30
|
when Gdal::Gdalconst::GDT_CINT32; return Float
|
31
31
|
when Gdal::Gdalconst::GDT_CFLOAT32; return Float
|
32
32
|
when Gdal::Gdalconst::GDT_CFLOAT64; return Float
|
33
|
+
else raise ArgumentError("Unknown data type.. not sure what to do here folks", caller)
|
33
34
|
end
|
34
35
|
end
|
35
36
|
|
@@ -53,7 +54,7 @@ end
|
|
53
54
|
|
54
55
|
##
|
55
56
|
# Class wrapping up a gdal band.
|
56
|
-
class
|
57
|
+
class GdalBand < GdalStuff
|
57
58
|
|
58
59
|
def initialize( band)
|
59
60
|
@band = band
|
@@ -87,7 +88,8 @@ class Gdal_Band < Gdal_Stuff
|
|
87
88
|
when Gdal::Gdalconst::GDT_CINT16; 'GDT_CINT16'
|
88
89
|
when Gdal::Gdalconst::GDT_CINT32; 'GDT_CINT32'
|
89
90
|
when Gdal::Gdalconst::GDT_CFLOAT32; 'GDT_CFLOAT32'
|
90
|
-
when Gdal::Gdalconst::GDT_CFLOAT64; 'GDT_CFLOAT64'
|
91
|
+
when Gdal::Gdalconst::GDT_CFLOAT64; 'GDT_CFLOAT64'
|
92
|
+
else raise ArgumentError("Unknown data type.. not sure what to do here folks", caller)
|
91
93
|
end
|
92
94
|
type_string
|
93
95
|
end
|
@@ -222,6 +224,7 @@ class Gdal_Band < Gdal_Stuff
|
|
222
224
|
when Gdal::Gdalconst::GDT_CINT32; '' #What are these?
|
223
225
|
when Gdal::Gdalconst::GDT_CFLOAT32; '' #What are these?
|
224
226
|
when Gdal::Gdalconst::GDT_CFLOAT64; '' #What are these?
|
227
|
+
else raise ArgumentError("Unknown data type.. not sure what to do here folks", caller)
|
225
228
|
end
|
226
229
|
return data.unpack(pack_template*data.length)
|
227
230
|
end
|
@@ -282,6 +285,7 @@ class Gdal_Band < Gdal_Stuff
|
|
282
285
|
when Gdal::Gdalconst::GDT_CINT32; '' #What are these?
|
283
286
|
when Gdal::Gdalconst::GDT_CFLOAT32; '' #What are these?
|
284
287
|
when Gdal::Gdalconst::GDT_CFLOAT64; '' #What are these?
|
288
|
+
else raise ArgumentError, "Unknown datatype.. not sure what to do here folks", caller
|
285
289
|
end
|
286
290
|
raise(ArgumentError, "Complex type requested, but no complex type handling.. not sure what to do here folks", caller) if ( pack_template == '')
|
287
291
|
return data.pack(pack_template*data.length)
|
@@ -292,22 +296,22 @@ end
|
|
292
296
|
##
|
293
297
|
# Class for a file - this is what most folks want
|
294
298
|
# Use like:
|
295
|
-
#infile =
|
299
|
+
#infile = GdalFile.new("foo.tif")
|
296
300
|
#bands = infile.read_bands(0,0,infile.xsize/4,infile.ysize/4)
|
297
301
|
#..do something..
|
298
|
-
class
|
302
|
+
class GdalFile < GdalStuff
|
299
303
|
def initialize ( name, mode="r", xsize=nil, ysize=nil,bands=3, driver="GTiff", data_type=String, options=['TILED=YES','COMPRESS=DEFLATE'] )
|
300
304
|
if ( mode == "r" )
|
301
|
-
@
|
305
|
+
@Gdalfile = Gdal::Gdal.open(name)
|
302
306
|
else
|
303
307
|
if ( mode == "w")
|
304
308
|
if (File.exists?(name))
|
305
|
-
@
|
309
|
+
@Gdalfile = Gdal::Gdal.open(name,Gdal::Gdalconst::GA_UPDATE )
|
306
310
|
else
|
307
311
|
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
|
-
@
|
312
|
+
#puts(driver.class)
|
313
|
+
#puts("Creating create(#{name}, #{xsize}, #{ysize}, #{bands}, #{data_type_to_gdal(data_type).to_s})")
|
314
|
+
@Gdalfile = driver.create(name, xsize, ysize, bands, data_type_to_gdal(data_type), options)
|
311
315
|
end
|
312
316
|
else
|
313
317
|
raise ArgumentError, "mode of \"#{mode}\" is not useful (not r|w) not sure what to do here folks", caller
|
@@ -316,7 +320,7 @@ class Gdal_File < Gdal_Stuff
|
|
316
320
|
|
317
321
|
@bands=[]
|
318
322
|
#1 is not a mistake - the raster bands start at 1 no 0. just a fyi.
|
319
|
-
1.upto(@
|
323
|
+
1.upto(@Gdalfile.RasterCount).each {|x| @bands << GdalBand.new(@Gdalfile.get_raster_band(x))}
|
320
324
|
end
|
321
325
|
|
322
326
|
###
|
@@ -347,20 +351,20 @@ class Gdal_File < Gdal_Stuff
|
|
347
351
|
|
348
352
|
#returns basic size info as a hash
|
349
353
|
def size()
|
350
|
-
{ "x"=> @
|
351
|
-
"y" => @
|
354
|
+
{ "x"=> @Gdalfile.RasterXSize,
|
355
|
+
"y" => @Gdalfile.RasterYSize,
|
352
356
|
"bands" => @bands.length,
|
353
357
|
"data_type" => @bands[0].data_type()}
|
354
358
|
end
|
355
359
|
|
356
360
|
#x dimention size
|
357
361
|
def xsize()
|
358
|
-
@
|
362
|
+
@Gdalfile.RasterXSize
|
359
363
|
end
|
360
364
|
|
361
365
|
#y dim size
|
362
366
|
def ysize()
|
363
|
-
@
|
367
|
+
@Gdalfile.RasterYSize
|
364
368
|
end
|
365
369
|
|
366
370
|
#number of bands
|
@@ -380,29 +384,29 @@ class Gdal_File < Gdal_Stuff
|
|
380
384
|
|
381
385
|
# gets the projection
|
382
386
|
def get_projection
|
383
|
-
@
|
387
|
+
@Gdalfile.get_projection
|
384
388
|
end
|
385
389
|
|
386
390
|
#sets the projection
|
387
391
|
def set_projection(proj_str)
|
388
|
-
@
|
392
|
+
@Gdalfile.set_projection(proj_str)
|
389
393
|
end
|
390
394
|
|
391
395
|
#looks up the projection in the epsg database, give it a number like 102006.
|
392
396
|
def set_projection_epsg(epsg)
|
393
397
|
srs = Gdal::Osr::SpatialReference.new()
|
394
398
|
srs.import_from_epsg(epsg)
|
395
|
-
@
|
399
|
+
@Gdalfile.set_projection(srs.export_to_wkt)
|
396
400
|
end
|
397
401
|
|
398
402
|
#sets the geo_transform, the wld file generally.
|
399
403
|
def set_geo_transform(srs)
|
400
|
-
@
|
404
|
+
@Gdalfile.set_geo_transform(srs)
|
401
405
|
end
|
402
406
|
|
403
407
|
#gets the geo transform (wld file traditionally)
|
404
408
|
def get_geo_transform()
|
405
|
-
@
|
409
|
+
@Gdalfile.get_geo_transform
|
406
410
|
end
|
407
411
|
|
408
412
|
end
|
data/lib/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gdal-helper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
- 1
|
10
|
+
version: 0.0.1.1
|
5
11
|
platform: ruby
|
6
12
|
authors:
|
7
13
|
- JC
|
@@ -41,18 +47,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
41
47
|
requirements:
|
42
48
|
- - ">="
|
43
49
|
- !ruby/object:Gem::Version
|
50
|
+
segments:
|
51
|
+
- 0
|
44
52
|
version: "0"
|
45
|
-
version:
|
46
53
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
47
54
|
requirements:
|
48
55
|
- - ">="
|
49
56
|
- !ruby/object:Gem::Version
|
57
|
+
segments:
|
58
|
+
- 0
|
50
59
|
version: "0"
|
51
|
-
version:
|
52
60
|
requirements:
|
53
61
|
- PostgreSQL >= 7.4
|
54
62
|
rubyforge_project:
|
55
|
-
rubygems_version: 1.3.
|
63
|
+
rubygems_version: 1.3.6
|
56
64
|
signing_key:
|
57
65
|
specification_version: 3
|
58
66
|
summary: A helper library for the ruby bindings to gdal (http://gdal.org)
|