ffi-gdal 1.0.0.beta1 → 1.0.0.beta3

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/readie.rb DELETED
@@ -1,90 +0,0 @@
1
- require './lib/ffi-gdal'
2
- require 'narray'
3
-
4
-
5
- #dir = '../../agrian/gis_engine/test/test_files'
6
- #name = 'empty_red_image.tif'
7
- #name = 'empty_black_image.tif'
8
-
9
- #dir = '~/Desktop/geotiffs'
10
- #name = 'NDVI20000201032.tif'
11
- #name = 'NDVI20000701183.tif'
12
- #name = 'NDVI20000701183.zip'
13
- #name = 'NDVI20000401092.tif'
14
-
15
- #dir = './spec/support'
16
- #name = 'google_earth_test.jpg'
17
- #name = 'compassdata_gcparchive_google_earth.kmz'
18
-
19
- #dir = './spec/support/aaron/Floyd'
20
- #name = 'Floyd_1058_20140612_NRGB.tif'
21
- #name = 'Floyd_1058_20140612_RGBNRGB.bmp'
22
- #name = 'Floyd_1058_20140612_RGBNRGB.jpg'
23
-
24
- dir = './spec/support/images/Harper'
25
- name = 'Harper_1058_20140612_NRGB.tif'
26
-
27
- #dir = './spec/support/osgeo'
28
- #name = 'c41078a1.tif'
29
-
30
- filename = File.expand_path(name, dir)
31
- dataset = GDAL::Dataset.open(filename, 'r')
32
-
33
- abort('No raster bands') if dataset.raster_count == 0
34
- GDAL.log "raster count: #{dataset.raster_count}"
35
-
36
- def raster_stuff(band)
37
- GDAL.log "x size: #{band.x_size}"
38
- GDAL.log "y size: #{band.y_size}"
39
- GDAL.log "min: #{band.minimum_value}"
40
- GDAL.log "max: #{band.maximum_value}"
41
- GDAL.log "block size: #{band.block_size}"
42
- GDAL.log "color interp: #{band.color_interpretation}"
43
- lines = []
44
-
45
- band.readlines do |line|
46
- lines << line
47
- end
48
-
49
- GDAL.log "line height: #{lines.size}"
50
- lines
51
- end
52
-
53
- bands = []
54
-
55
-
56
- 1.upto(dataset.raster_count) do |i|
57
- GDAL.log "Checking band #{i}"
58
- band = dataset.raster_band(i)
59
- GDAL.log "* color interp: #{band.color_interpretation}"
60
-
61
- if %i[GCI_RedBand GCI_Undefined].include? band.color_interpretation
62
- bands << {
63
- band: band,
64
- array: NArray.to_na(raster_stuff(dataset.raster_band(i)))
65
- }
66
- end
67
- end
68
-
69
- red = bands.find { |hash| hash[:band].color_interpretation == :GCI_RedBand }
70
- nir = bands.find { |hash| hash[:band].color_interpretation == :GCI_Undefined }
71
-
72
- if nir.nil?
73
- abort 'No near-infrared band found!'
74
- end
75
- ndvi = (nir[:array] - red[:array]) / (nir[:array] + red[:array])
76
-
77
- GDAL.log "NDVI array created"
78
-
79
- GDAL.log dataset.driver.long_name
80
- GDAL.log dataset.driver.all_metadata[:DEFAULT]["DCAP_CREATE"]
81
-
82
- dataset.driver.create_dataset('testie.tif', ndvi.sizes.first, ndvi.sizes.last) do |out_dataset|
83
- GDAL.log "raster count: #{out_dataset.raster_count}"
84
- out_band = out_dataset.raster_band(1)
85
- out_band.write_array(ndvi)
86
-
87
- # need to add metadata and raster data
88
- # http://www.gdal.org/gdal_tutorial.html
89
- end
90
-
@@ -1,168 +0,0 @@
1
- require 'RMagick'
2
- require 'bundler/setup'
3
- require 'pry'
4
- require 'ffi-gdal'
5
-
6
- GDAL::Logger.logging_enabled = true
7
-
8
- #proj = 'MULTIPOLYGON (((-120.03296317083633 44.226828996384285, -120.03199741570855 44.230616638863914, -120.03305119285443 44.23322276021398, -120.03305439612939 44.23323503554639, -120.03305423080232 44.233247523039175, -120.03305070309673 44.23325975261691, -120.03304394580853 44.233271263913274, -120.03303421330706 44.233281623601044, -120.0330218719597 44.23329044170392, -120.03300738634044 44.23329738627662, -120.03299130174162 44.23330219590042, -120.03297422364709 44.23330468952384, -120.03295679493954 44.23330477327791, -120.0329396717 44.23330244400986, -120.03259652218235 44.23323046886841, -120.03259605091168 44.23323469214073, -120.03259130838445 44.233246748969734, -120.03258339633375 44.23325791928269, -120.03257261443646 44.233267779993575, -120.03255937106756 44.233275957618844, -120.03254416783288 44.23328214242357, -120.03252758057009 44.23328610015274, -120.03251023753826 44.2332876809039, -120.032492795622 44.23328682480475, -120.0324759154512 44.23328356428076, -120.03246023637918 44.23327802282714, -120.03244635226639 44.233270410331386, -120.03229057481504 44.233166296752856, -120.03144275436163 44.23298846700243, -120.03135705202111 44.23542539118272, -120.03135483571377 44.23543806847976, -120.0313491680669 44.2354501823413, -120.0313402724131 44.23546125542315, -120.03132849928409 44.23547085139311, -120.03131431259804 44.235478592124444, -120.03129827137883 44.235484172595754, -120.03128100772805 44.23548737291011, -120.03126320191683 44.23548806696012, -120.03124555558011 44.235486227396926, -120.03122876406881 44.235481926707976, -120.03121348904955 44.23547533436071, -120.03120033243181 44.23546671012462, -120.03118981264993 44.23545639383555, -120.02629194435607 44.229488174527326, -120.0262841759258 44.22947593881562, -120.0262801234077 44.229462813795166, -120.02627996353844 44.22944937186798, -120.0262837032901 44.22943619925734, -120.02629117956641 44.22942387044152, -120.02630206631528 44.22941292309999, -120.02631588874878 44.229403834664076, -120.02650834059244 44.22930162063937, -120.02596466290531 44.22893822933382, -120.02595288197551 44.22892861642798, -120.02594398682248 44.22891752390089, -120.02593832881524 44.2289053899198, -120.02593613145164 44.22889269379079, -120.02593748153026 44.22887993702566, -120.02594232572132 44.2288676235318, -120.02595047267361 44.22885623970722, -120.0259616005729 44.228846235226946, -120.02597526985406 44.22883800528063, -120.0259909405644 44.22883187496161, -120.02600799369236 44.22882808642537, -120.02602575561929 44.228826789324046, -120.02604352472815 44.22882803489487, -120.02606059911827 44.2288317739361, -120.02607630433104 44.22883785875077, -120.02675839864344 44.229168810839475, -120.02688733695234 44.22910032953997, -120.02611125484312 44.228061533840545, -120.02610457348571 44.22805003875662, -120.02610110582951 44.22803783693943, -120.02610098163969 44.228025384999874, -120.02610420556363 44.2280131489091, -120.02611065695699 44.22800158656121, -120.0261200943985 44.22799113063793, -120.02613216472427 44.22798217241707, -120.02614641624366 44.227975047130094, -120.0261623156424 44.22797002141719, -120.02617926794002 44.22796728334896, -120.0261966387548 44.227966935388565, -120.02621377804353 44.22796899055725, -120.02623004442708 44.22797337194719, -120.0262448291917 44.2279799155993, -120.02625757906833 44.22798837663918, -120.02626781693645 44.22799843844071, -120.02754662923428 44.229551257921585, -120.030836241635 44.23114734101261, -120.03136956622194 44.229959117652726, -120.03138391393463 44.22955111324294, -120.03138620312208 44.229538207384174, -120.0313920671636 44.22952589494864, -120.03140126651873 44.229514678887824, -120.03141342540293 44.229505017367465, -120.03142804713777 44.22949730505196, -120.03144453443974 44.229491856982676, -120.03146221381887 44.22948889570851, -120.03148036308987 44.22948854219496, -120.03149824087296 44.229490810882744, -120.03151511687828 44.22949560909792, -120.03153030173767 44.22950274083756, -120.03154317516459 44.22951191477631, -120.0315532112922 44.22952275616695, -120.03156000257852 44.22953482814357, -120.03278854263438 44.22679758476189, -120.03286127379035 44.226512326846944, -120.03286465252121 44.226503048718484, -120.03286991708133 44.22649423317623, -120.03301731535839 44.22629080564284, -120.03302703028369 44.22628013425537, -120.03303948802117 44.22627104306898, -120.03305420051213 44.22626388825138, -120.03307059136289 44.22625895010873, -120.0330880184265 44.22625642210408, -120.03310579896007 44.22625640327766, -120.03312323637284 44.226258894367135, -120.03313964751646 44.22626379777834, -120.03315438944897 44.22627092140904, -120.03316688462326 44.22627998617475, -120.03317664351395 44.22629063694302, -120.03318328379541 44.22630245644617, -120.03318654532022 44.226314981629145, -120.03318630031114 44.22632772179051, -120.0331825583669 44.22634017780693, -120.03296317083633 44.226828996384285)))'
9
-
10
- floyd_too_big_wkt = 'MULTIPOLYGON (((-87.55634718933241 31.168633650404765, -87.552227316286 31.16870709121005, -87.55234533348232 31.169808696448463, -87.5478606800096 31.1698913163249, -87.54777484932141 31.168679550914895, -87.54380517997858 31.168615290194918, -87.54396611251944 31.16511760526154, -87.55647593536513 31.164906454793982, -87.55634718933241 31.168633650404765)))'
11
- floyd_wkt = 'MULTIPOLYGON (((-87.5530099868775 31.16710573359053,-87.5530099868775 31.165600160261103,-87.55384683609009 31.16710573359053,-87.5530099868775 31.16710573359053)))'
12
- floyd_srid = 4326
13
-
14
- harper_path = '/Users/sloveless/Development/projects/ffi-gdal/spec/support/images/Harper/Harper_1058_20140612_NRGB.tif'
15
- harper = GDAL::Dataset.open(harper_path, 'r')
16
-
17
- floyd_path = '/Users/sloveless/Development/projects/ffi-gdal/spec/support/images/Floyd/Floyd_1058_20140612_NRGB.tif'
18
- floyd = GDAL::Dataset.open(floyd_path, 'r')
19
-
20
- spatial_ref = OGR::SpatialReference.new(floyd.projection)
21
- floyd_geometry = OGR::Geometry.create_from_wkt(floyd_wkt, spatial_ref)
22
-
23
- usg_path = '/Users/sloveless/Development/projects/ffi-gdal/spec/support/images/osgeo/geotiff/usgs/c41078a1.tif'
24
- usg = GDAL::Dataset.open(usg_path, 'r')
25
-
26
- world_file_path = "#{__dir__}/spec/support/worldfiles/SR_50M/SR_50M.tif"
27
- world_file = GDAL::GeoTransform.from_world_file(world_file_path, 'tfw')
28
-
29
- binding.pry
30
-
31
- def extract_ndvi(dataset, destination_path, wkt_geometry)
32
- nir_band = dataset.raster_band(1)
33
- red_band = dataset.raster_band(2)
34
- nir_array = nir_band.to_na
35
- red_array = red_band.to_na
36
-
37
- # Create an OGR::Geometry from the WKT and convert to dataset's projection.
38
- wkt_spatial_ref = OGR::SpatialReference.new_from_epsg(4326)
39
- geometry = OGR::Geometry.create_from_wkt(wkt_geometry,
40
- wkt_spatial_ref)
41
- geometry.transform_to!(dataset.spatial_reference)
42
-
43
- # Create the geo_tranform for the geometry-raster, based on the original
44
- # dataset's geo_transform.
45
- pixel_extent = geometry.envelope.world_to_pixel(dataset.geo_transform)
46
- p pixel_extent
47
- pixel_height = pixel_extent[:x_max]
48
- pixel_width = pixel_extent[:y_max]
49
-
50
- y_range = pixel_extent[:y_origin]..(pixel_extent[:y_max] - 1)
51
- x_range = pixel_extent[:x_origin]...(pixel_extent[:x_max] - 1)
52
- red_clip_array = red_array[x_range, y_range]
53
- nir_clip_array = nir_array[x_range, y_range]
54
-
55
-
56
- #geo = GDAL::GeoTransform.new
57
- geo = dataset.geo_transform
58
- #geo.x_origin = dataset.geo_transform.x_origin + pixel_extent[:x_origin]
59
- geo.x_origin = pixel_extent[:x_origin]
60
- geo.pixel_width = pixel_extent[:pixel_width]
61
- geo.x_rotation = 0
62
-
63
- #geo.y_origin = dataset.geo_transform.y_origin + pixel_extent[:y_origin]
64
- #geo.y_origin = pixel_extent[:y_origin]
65
- geo.y_origin = pixel_extent[:y_max].abs # the book shows this--is it right?
66
- geo.pixel_height = pixel_extent[:pixel_height]
67
- geo.y_rotation = 0
68
-
69
- # Get pixels for each point of each linear ring in the geometry.
70
- pixels = case geometry.type
71
- when :wkbMultiPolygon
72
- polygon = geometry.geometry_at(0)
73
- linear_ring = polygon.geometry_at(0)
74
- #linear_ring.pixels(dataset.geo_transform)
75
- linear_ring.pixels(geo)
76
- else
77
- raise 'bleh'
78
- end
79
-
80
-
81
- # Write the pixels to an array at the size of the new image
82
- image = Magick::Image.new(pixel_extent[:x_max], pixel_extent[:y_max])
83
- poly = Magick::Draw.new
84
- poly.fill('#00ffff')
85
- poly.polygon(*pixels)
86
- poly.draw(image)
87
- image.write('bobo.tif')
88
-
89
- excerpted_image = image.excerpt(pixel_extent[:x_origin], pixel_extent[:y_origin],
90
- pixel_extent[:pixel_count], pixel_extent[:line_count])
91
- # rasterized_pixels = excerpted_image.export_pixels(0, 0,
92
- # pixel_extent[:pixel_count], pixel_extent[:line_count], 'I')
93
- rasterized_pixels = image.export_pixels(pixel_extent[:x_origin], pixel_extent[:y_origin],
94
- pixel_extent[:pixel_count], pixel_extent[:line_count], 'I')
95
- mask = NArray[rasterized_pixels]
96
- mask.reshape!(pixel_extent[:pixel_count], pixel_extent[:line_count])
97
- p mask.to_a.flatten.count { |b| !b.zero? }
98
- p red_clip_array.to_a.flatten.count { |b| !b.zero? }
99
- p nir_clip_array.to_a.flatten.count { |b| !b.zero? }
100
-
101
-
102
- i = 0
103
- red_clip_array.each do |_|
104
- if mask[i] == 65535
105
- red_clip_array[i] = 1.0
106
- end
107
-
108
- i += 1
109
- end
110
-
111
- i = 0
112
- nir_clip_array.each do |_|
113
- if mask[i] == 65535
114
- nir_clip_array[i] = 1.0
115
- end
116
-
117
- i += 1
118
- end
119
-
120
- p mask.flatten.to_a.count { |b| !b.zero? }
121
- p red_clip_array.to_a.flatten.count { |b| !b.zero? }
122
- p nir_clip_array.to_a.flatten.count { |b| !b.zero? }
123
-
124
- binding.pry
125
- #ndvi_array = 1.0 * (nir_array - red_array) / nir_array + red_array + 1.0
126
- ndvi_array = 1.0 * (nir_clip_array - red_clip_array) / (nir_clip_array + red_clip_array) + 1.0
127
- #ndvi_array = (nir_clip_array - red_clip_array) / (nir_clip_array + red_clip_array)
128
-
129
- driver = GDAL::Driver.by_name('GTiff')
130
- ndvi_dataset = driver.create_dataset('ndvi.tif', pixel_extent[:x_max], pixel_extent[:y_max]) do |ndvi|
131
- ndvi.projection = dataset.projection
132
- ndvi.geo_transform = geo
133
-
134
- ndvi_band = ndvi.raster_band(1)
135
- # tmp_band.write_array(mask, x_offset: pixel_extent[:x_origin].abs,
136
- # y_offset: pixel_extent[:y_origin].abs, data_type: :GDT_Float32)
137
- #ndvi_band.write_array(ndvi_array, data_type: :GDT_Float32)
138
- ndvi_band.write_array(ndvi_array)
139
- #ndvi_band.no_data_value = -9999
140
- end
141
-
142
- ndvi_dataset.close
143
-
144
- # Create new dataset from the geometry
145
- #tmp_dataset.rasterize_geometries!(1, linear_ring, 1000)
146
-
147
- #binding.pry
148
- end
149
-
150
-
151
- #floyd.image_warp('meow.tif', 'GTiff', 1, cutline: floyd_geometry )
152
- #extract_ndvi(floyd, 'ndvi.tif', floyd_wkt)
153
-
154
- def warp_to_geometry(dataset, wkt_geometry)
155
-
156
- # Create an OGR::Geometry from the WKT and convert to dataset's projection.
157
- wkt_spatial_ref = OGR::SpatialReference.new_from_epsg(4326)
158
- geometry = OGR::Geometry.create_from_wkt(wkt_geometry, wkt_spatial_ref)
159
- geometry.transform_to!(dataset.spatial_reference)
160
-
161
- binding.pry
162
- # Create a .shp from the geometry
163
- shape = geometry.to_vector('geom.shp', 'ESRI Shapefile',
164
- spatial_reference: dataset.spatial_reference)
165
- shape.close
166
- end
167
-
168
- #warp_to_geometry(floyd, floyd_wkt)
@@ -1,91 +0,0 @@
1
- require 'bundler/setup'
2
- require 'pry'
3
- require 'ffi-gdal'
4
-
5
- include GDAL::Logger
6
- GDAL::Logger.logging_enabled = true
7
-
8
-
9
- # https://trac.osgeo.org/gdal/ticket/1599
10
-
11
- #floyd_path = '/Users/sloveless/Development/projects/ffi-gdal/spec/support/images/Floyd/Floyd_1058_20140612_NRGB.tif'
12
- #floyd = GDAL::Dataset.open(floyd_path, 'r')
13
- #floyd_wkt = 'MULTIPOLYGON(((-87.5530099868775 31.16710573359053,-87.65300998687 31.167105000001, -87.5530099868775 31.165600160261103,-87.55384683609009 31.16710573359053,-87.5530099868775 31.16710573359053)))'
14
- spatial_ref = OGR::SpatialReference.new_from_epsg(4326)
15
- #floyd_geometry = OGR::Geometry.create_from_wkt(floyd_wkt, spatial_ref)
16
- #floyd_geometry.transform_to!(floyd.spatial_reference)
17
-
18
- harper_wkt = "MULTIPOLYGON (((-87.5639814967 31.18677438740807, -87.56095596493151 31.186756030714633, -87.56127783001327 31.185048842709264, -87.56022640407895 31.184259487308854, -87.55996891201355 31.183800556723995, -87.56037660778345 31.183470125325623, -87.55999036968537 31.182295248791167, -87.55936809719456 31.181891381615166, -87.55887457073558 31.18031261157701, -87.55968996227632 31.180018884013712, -87.55872436703105 31.17799948235227, -87.55769439876855 31.177852615097343, -87.55664297283512 31.177283502330614, -87.5565464133106 31.175998396405248, -87.56492563427345 31.176016755184154, -87.56496854961708 31.177154992523167, -87.5639814967 31.177669030707264, -87.56415315807725 31.178752173461035, -87.56501146496161 31.179908735942732, -87.56496854961708 31.18462663017465, -87.56400295437183 31.184810201073287, -87.5639814967 31.18677438740807)))"
19
- harper_path = '/Users/sloveless/Development/projects/ffi-gdal/spec/support/images/Harper/Harper_1058_20140612_NRGB.tif'
20
- harper = GDAL::Dataset.open(harper_path, 'r')
21
- harper_geometry = OGR::Geometry.create_from_wkt(harper_wkt, spatial_ref)
22
- harper_geometry.transform_to!(harper.spatial_reference)
23
-
24
- #epsg4326_geom = floyd.to_geometry
25
-
26
- #floyd.close
27
- harper.close
28
-
29
-
30
- #puts floyd.contains_geometry?(floyd_wkt)
31
-
32
- #`gdalwarp -wo "INIT_DEST=255,0,255" -wo "#{floyd_geometry.to_wkt}" #{floyd_path} cut-out.tif`
33
- #`gdalwarp -wo "CUTLINE=#{floyd_geometry.to_wkt}" #{floyd_path} cut-out.tif`
34
- #`gdalwarp -dstnodata -1 -cutline "#{floyd_geometry.to_wkt}" #{floyd_path} cut-out.tif`
35
- #cmd = %{gdalwarp -dstnodata -1 -cutline "#{floyd_geometry.to_wkt}" -crop_to_cutline #{floyd_path} cut-out.tif}
36
- #cmd = %{gdalwarp -dstnodata -1 -cutline "#{floyd_geometry.to_wkt}" -crop_to_cutline #{floyd_path} cut-out.tif}
37
-
38
- # Result: No file
39
- # cmd = %{gdalwarp -cutline "#{floyd_geometry.to_wkt}" -crop_to_cutline #{floyd_path} cut-out.tif}
40
-
41
- #cmd = %{gdalwarp -wo "INIT_DEST=NO_DATA" -wo "CUTLINE=#{floyd_geometry.to_wkt}" -crop_to_cutline #{floyd_path} cut-out.tif}
42
- #cmd = %{gdalwarp -wo "CUTLINE_ALL_TOUCHED=TRUE" -wo "INIT_DEST=NO_DATA" -wo "CUTLINE=#{floyd_geometry.to_wkt}" -crop_to_cutline #{floyd_path} cut-out.tif}
43
- #cmd = %{gdalwarp -wo "CUTLINE_ALL_TOUCHED=TRUE" -wo "CUTLINE=#{floyd_geometry.to_wkt}" -wo "SAMPLE_GRID=YES" #{floyd_path} cut-out.tif}
44
- #cmd = %{gdalwarp -wo "ALL_TOUCHED=TRUE" -wo "CUTLINE=#{floyd_geometry.to_wkt}" #{floyd_path} cut-out.tif}
45
- #cmd = %{gdal_grid -clipsrc "#{floyd_geometry.to_wkt}" #{floyd_path} cut-out.tif}
46
-
47
- require 'fileutils'
48
- FileUtils.rm_rf 'stuff'
49
- FileUtils.rm_rf 'stuff.shp'
50
- FileUtils.rm_rf 'stuff.*'
51
- FileUtils.rm_rf 'geometry.json'
52
- FileUtils.rm_rf 'cut-out.tif'
53
-
54
- #File.write('geometry.json', harper_geometry.to_geo_json)
55
- #File.write('geometry.json', epsg4326_geom.to_geo_json)
56
- #ogr_cmd = %{ogr2ogr -f "ESRI Shapefile" stuff.shp geometry.json OGRGeoJSON}
57
- #p ogr_cmd
58
-
59
- #{}`#{ogr_cmd}`
60
-
61
- def make_shapefile(geo_json)
62
- geo_json_file = Tempfile.new(%w[geo_json .json])
63
- geo_json_file.write(geo_json)
64
- geo_json_file.close
65
-
66
- shape_dir = Dir.mktmpdir('shapes')
67
- shapefile_name = 'clip_shape.shp'
68
- shapefile_path = File.join(shape_dir, shapefile_name)
69
-
70
- ogr_command = %{ogr2ogr -f "ESRI Shapefile" #{shapefile_path} #{geo_json_file.path} OGRGeoJSON}
71
- logger.debug "Running command to make shapefile: #{ogr_command}"
72
-
73
- `#{ogr_command}`
74
-
75
- FileUtils.rm("#{shape_dir}/clip_shape.prj")
76
-
77
- shape_dir
78
- end
79
-
80
- # Result: Empty file
81
- #cmd = %{gdalwarp -wo "CUTLINE=#{floyd_wkt}" -s_srs "EPSG:32616" #{floyd_path} cut-out.tif}
82
- #prj_file = File.expand_path('stuff.prj', __dir__)
83
- #p prj_file
84
- #FileUtils.rm prj_file
85
- binding.pry
86
-
87
- #cmd = %{gdalwarp -dstnodata -1 -s_srs EPSG:32616 -t_srs EPSG:26916 -crop_to_cutline -cutline stuff.shp #{floyd_path} cut-out.tif}
88
- cmd = %{gdalwarp -dstnodata -1 -s_srs EPSG:32616 -t_srs EPSG:26916 -crop_to_cutline -cutline stuff.shp #{harper_path} cut-out.tif}
89
-
90
- p cmd
91
- `#{cmd}`
@@ -1,76 +0,0 @@
1
- require 'bundler/setup'
2
- require 'pry'
3
- require 'ffi-gdal'
4
-
5
- include GDAL::Logger
6
- GDAL::Logger.logging_enabled = true
7
-
8
-
9
- floyd_path = '/Users/sloveless/Development/projects/ffi-gdal/spec/support/images/Floyd/Floyd_1058_20140612_NRGB.tif'
10
- floyd = GDAL::Dataset.open(floyd_path, 'r')
11
- floyd_wkt = 'MULTIPOLYGON (((-87.5530099868775 31.16710573359053,-87.5530099868775 31.165600160261103,-87.55384683609009 31.16710573359053,-87.5530099868775 31.16710573359053)))'
12
-
13
- # http://pcjericks.github.io/py-gdalogr-cookbook/vector_layers.html#convert-vector-layer-to-array
14
- pixel_size = 25
15
- no_data_value = -1
16
-
17
- # Get the extent of the geometry
18
- spatial_reference = OGR::SpatialReference.new_from_epsg(4326)
19
- geometry = OGR::Geometry.create_from_wkt(floyd_wkt, spatial_reference)
20
- geometry.transform_to!(floyd.spatial_reference)
21
- source_srs = geometry.spatial_reference
22
- polygon = geometry.geometry_at 0
23
- ring = polygon.geometry_at 0
24
-
25
- extent = geometry.envelope
26
- x_min = extent.x_min
27
- x_max = extent.x_max
28
- y_min = extent.y_min
29
- y_max = extent.y_max
30
-
31
- log "x_min: #{x_min}"
32
- log "y_min: #{y_min}"
33
- log "y_max: #{y_max}"
34
- log "x_max: #{x_max}"
35
-
36
- # extent = geometry.envelope.world_to_pixel(floyd.geo_transform)
37
- # x_min = extent[:x_origin]
38
- # x_max = extent[:x_max]
39
- # y_min = extent[:y_origin]
40
- # y_max = extent[:y_max]
41
- # log "x_min: #{x_min}"
42
- # log "y_min: #{y_min}"
43
- # log "y_max: #{y_max}"
44
- # log "x_max: #{x_max}"
45
-
46
-
47
- # Create the destination data source
48
- x_res = ((x_max - x_min) / pixel_size).to_i
49
- y_res = ((y_max - y_min) / pixel_size).to_i
50
- log "x_res: #{x_res}"
51
- log "y_res: #{y_res}"
52
-
53
- #target_ds = GDAL::Driver.by_name('MEM').create_dataset('', x_res, y_res, data_type: :GDT_Float32)
54
- target_ds = GDAL::Driver.by_name('GTiff').create_dataset('grr.tif', x_res, y_res, data_type: :GDT_Float32)
55
-
56
- geo_transform = floyd.geo_transform
57
- geo_transform.x_origin = x_min
58
- geo_transform.pixel_width = pixel_size
59
- geo_transform.y_origin = y_max
60
- geo_transform.pixel_width = -pixel_size
61
- target_ds.geo_transform = geo_transform
62
- target_ds.projection = floyd.projection
63
-
64
- band = target_ds.raster_band(1)
65
- band.no_data_value = no_data_value
66
- band.fill(100)
67
-
68
- #target_ds.rasterize_geometries!(1, geometry, 1, all_touched: 'TRUE')
69
- target_ds.rasterize_geometries!(1, ring, 1, all_touched: 'TRUE')
70
-
71
- band.to_na
72
-
73
-
74
- binding.pry
75
-
76
- target_ds.close
@@ -1,77 +0,0 @@
1
- require 'bundler/setup'
2
- require 'pry'
3
- require 'ffi-gdal'
4
-
5
- GDAL::Logger.logging_enabled = true
6
-
7
- floyd_path = '/Users/sloveless/Development/projects/ffi-gdal/spec/support/images/Floyd/Floyd_1058_20140612_NRGB.tif'
8
- floyd = GDAL::Dataset.open(floyd_path, 'r')
9
-
10
- # dataset = floyd.extract_nir('nir.tif', 1)
11
- # band = dataset.raster_band(1)
12
- # colors = %w[644d1e 745924 856728 95742b a5812d b69930 c8b22d d8cb3c e8e65a
13
- # f4ee79 e0e457 c8da42 afd135 97b73c 7e993c 657e36 4b612c 314441 23295e
14
- # 282973]
15
- # band.colorize!(*colors)
16
- # binding.pry
17
- # dataset.close
18
-
19
- # dataset = floyd.extract_ndvi('ndvi_float.tif', band_order: %i[nir red green blue],
20
- # data_type: :GDT_Float32,
21
- # remove_negatives: true,
22
- # photometric: 'PALETTE')
23
- # dataset.close
24
-
25
- # byte_dataset = floyd.extract_ndvi('ndvi_byte.tif', band_order: %i[nir red green blue],
26
- # data_type: :GDT_Byte,
27
- # remove_negatives: true,
28
- # photometric: 'PALETTE')
29
- # byte_dataset.close
30
- #
31
- # uint16_dataset = floyd.extract_ndvi('ndvi_uint16.tif', band_order: %i[nir red green blue],
32
- # data_type: :GDT_UInt16,
33
- # remove_negatives: true,
34
- # photometric: 'PALETTE')
35
- # uint16_dataset.close
36
- #
37
-
38
- colors = %w[644d1e 745924 856728 95742b a5812d b69930 c8b22d d8cb3c e8e65a
39
- f4ee79 e0e457 c8da42 afd135 97b73c 7e993c 657e36 4b612c 314441 23295e
40
- 282973]
41
-
42
- # byte_dataset = GDAL::Dataset.open('ndvi_byte.tif', 'w')
43
- # byte_band = byte_dataset.raster_band(1)
44
- # byte_band.colorize!(*colors)
45
- # byte_dataset.close
46
-
47
- # unit16_dataset = GDAL::Dataset.open('ndvi_uint16.tif', 'w')
48
- # uint16_band = uint16_dataset.raster_band(1)
49
- # uint16_band.colorize!(*colors)
50
- # uint16_dataset.close
51
-
52
- # g_uint16_dataset = floyd.extract_gndvi('gndvi_uint16.tif', band_order: %i[nir red green blue],
53
- # data_type: :GDT_UInt16,
54
- # remove_negatives: true,
55
- # photometric: 'PALETTE'
56
- # )
57
- # g_uint16_dataset.close
58
- #
59
- # g_unit16_dataset = GDAL::Dataset.open('gndvi_uint16.tif', 'w')
60
- # g_uint16_band = g_uint16_dataset.raster_band(1)
61
- # g_uint16_band.colorize!(*colors)
62
- # g_uint16_dataset.close
63
-
64
- g_byte_dataset = floyd.extract_gndvi('gndvi_byte.tif', band_order: %i[nir red green blue],
65
- data_type: :GDT_Byte,
66
- remove_negatives: true,
67
- photometric: 'PALETTE'
68
- )
69
- g_byte_dataset.close
70
-
71
- g_byte_dataset = GDAL::Dataset.open('gndvi_byte.tif', 'w')
72
- g_byte_band = g_byte_dataset.raster_band(1)
73
- g_byte_band.colorize!(*colors)
74
- binding.pry
75
- g_byte_dataset.close
76
-
77
- # floyd.extract_natural_color('nc.tif', band_order: %i[nir red green blue])