Class: GDAL::RasterAttributeTable

Inherits:
Object
  • Object
show all
Includes:
Extensions
Defined in:
lib/gdal/raster_attribute_table.rb,
lib/gdal/extensions/raster_attribute_table/extensions.rb

Defined Under Namespace

Modules: Extensions

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Extensions

#column, #columns, #each_column, #set_value

Constructor Details

#initialize(pointer = nil) ⇒ RasterAttributeTable

Returns a new instance of RasterAttributeTable.

Parameters:

  • pointer (FFI::Pointer) (defaults to: nil)


42
43
44
# File 'lib/gdal/raster_attribute_table.rb', line 42

def initialize(pointer = nil)
  @c_pointer = pointer || FFI::GDAL::GDAL.GDALCreateRasterAttributeTable
end

Instance Attribute Details

#c_pointerFFI::Pointer (readonly)

Returns The C pointer that represents the C RAT.

Returns:

  • (FFI::Pointer)

    The C pointer that represents the C RAT.



39
40
41
# File 'lib/gdal/raster_attribute_table.rb', line 39

def c_pointer
  @c_pointer
end

Class Method Details

.from_color_table(color_table) ⇒ GDAL::RasterAttributeTable

Create an object from a ColorTable.

Parameters:

Returns:

Raises:



12
13
14
15
16
17
18
19
20
21
# File 'lib/gdal/raster_attribute_table.rb', line 12

def self.from_color_table(color_table)
  color_table_ptr = GDAL._pointer(GDAL::ColorTable, color_table, autorelease: false)
  rat_ptr = FFI::GDAL::GDAL.GDALCreateRasterAttributeTable

  GDAL::CPLErrorHandler.manually_handle("Unable to initialize from ColorTable") do
    FFI::GDAL::GDAL.GDALRATInitializeFromColorTable(rat_ptr, color_table_ptr)
  end

  new(rat_ptr)
end

.new_pointer(raster_attribute_table) ⇒ FFI::AutoPointer

Parameters:

Returns:

  • (FFI::AutoPointer)


25
26
27
28
29
# File 'lib/gdal/raster_attribute_table.rb', line 25

def self.new_pointer(raster_attribute_table)
  ptr = GDAL._pointer(GDAL::Dataset, raster_attribute_table, autorelease: false)

  FFI::AutoPointer.new(ptr, RasterAttributeTable.method(:release))
end

.release(pointer) ⇒ Object

Parameters:

  • pointer (FFI::Pointer)


32
33
34
35
36
# File 'lib/gdal/raster_attribute_table.rb', line 32

def self.release(pointer)
  return unless pointer && !pointer.null?

  FFI::GDAL::GDAL.GDALDestroyRasterAttributeTable(pointer)
end

Instance Method Details

#changes_written_to_file?Boolean

true if the changes made to this RAT have been written to the associated dataset.

Returns:

  • (Boolean)


66
67
68
# File 'lib/gdal/raster_attribute_table.rb', line 66

def changes_written_to_file?
  FFI::GDAL::GDAL.GDALRATChangesAreWrittenToFile(@c_pointer)
end

#cloneGDAL::RasterAttributeTable

Clone using the C API.



55
56
57
58
59
60
# File 'lib/gdal/raster_attribute_table.rb', line 55

def clone
  rat_ptr = FFI::GDAL::GDAL.GDALRATClone(@c_pointer)
  return nil if rat_ptr.nil? || rat_ptr.null?

  self.class.new(rat_ptr)
end

#column_countInteger

Returns:



71
72
73
# File 'lib/gdal/raster_attribute_table.rb', line 71

def column_count
  FFI::GDAL::GDAL.GDALRATGetColumnCount(@c_pointer)
end

#column_name(index) ⇒ String Also known as: name_of_col

Parameters:

  • index (Integer)

    The column number.

Returns:



77
78
79
80
81
82
# File 'lib/gdal/raster_attribute_table.rb', line 77

def column_name(index)
  name, ptr = FFI::GDAL::GDAL.GDALRATGetNameOfCol(@c_pointer, index)
  ptr.autorelease = false

  name
end

#column_of_usage(field_usage) ⇒ Integer

Returns The column number or nil.

Parameters:

  • field_usage (GDALRATFieldUsage)

Returns:

  • (Integer)

    The column number or nil.



101
102
103
104
105
106
# File 'lib/gdal/raster_attribute_table.rb', line 101

def column_of_usage(field_usage)
  column_number = FFI::GDAL::GDAL.GDALRATGetColOfUsage(@c_pointer, field_usage)
  return if column_number.negative?

  column_number
end

#column_type(index) ⇒ GDALRATFieldType Also known as: type_of_col

Parameters:

  • index (Integer)

    The column number.

Returns:

  • (GDALRATFieldType)


94
95
96
# File 'lib/gdal/raster_attribute_table.rb', line 94

def column_type(index)
  FFI::GDAL::GDAL.GDALRATGetTypeOfCol(@c_pointer, index)
end

#column_usage(index) ⇒ GDALRATFieldUsage Also known as: usage_of_col

Parameters:

  • index (Integer)

    The column number.

Returns:

  • (GDALRATFieldUsage)


87
88
89
# File 'lib/gdal/raster_attribute_table.rb', line 87

def column_usage(index)
  FFI::GDAL::GDAL.GDALRATGetUsageOfCol(@c_pointer, index)
end

#create_column(name, type, usage) ⇒ Object

Parameters:

  • name (String)
  • type (FFI::GDAL::GDALRATFieldType)
  • usage (FFI::GDAL::GDALRATFieldUsage)

Raises:



112
113
114
115
116
# File 'lib/gdal/raster_attribute_table.rb', line 112

def create_column(name, type, usage)
  GDAL::CPLErrorHandler.manually_handle("Unable to create column") do
    FFI::GDAL::GDAL.GDALRATCreateColumn(@c_pointer, name, type, usage)
  end
end

#destroy!Object



46
47
48
49
50
# File 'lib/gdal/raster_attribute_table.rb', line 46

def destroy!
  RasterAttributeTable.release(@c_pointer)

  @c_pointer = nil
end

#dump_readable(file_path = nil) ⇒ Object

Parameters:

  • file_path (String) (defaults to: nil)

    Without giving a file_path, dumps to STDOUT.



221
222
223
224
225
# File 'lib/gdal/raster_attribute_table.rb', line 221

def dump_readable(file_path = nil)
  file_ptr = file_path ? FFI::CPL::Conv.CPLOpenShared(file_path, "w", false) : nil
  FFI::GDAL::GDAL.GDALRATDumpReadable(@c_pointer, file_ptr)
  FFI::CPL::Conv.CPLCloseShared(file_ptr) if file_ptr
end

#linear_binningHash{row_0_minimum => Float, bin_size => Float}

Returns:

  • (Hash{row_0_minimum => Float, bin_size => Float})


189
190
191
192
193
194
195
196
197
198
199
# File 'lib/gdal/raster_attribute_table.rb', line 189

def linear_binning
  row_0_min_ptr = FFI::MemoryPointer.new(:double)
  bin_size_ptr = FFI::MemoryPointer.new(:double)
  result = FFI::GDAL::GDAL.GDALRATGetLinearBinning(@c_pointer, row_0_min_ptr, bin_size_ptr)
  return unless result

  {
    row_0_minimum: row_0_min_ptr.read_double,
    bin_size: bin_size_ptr.read_double
  }
end

#row_countInteger

Returns The number of rows.

Returns:

  • (Integer)

    The number of rows.



119
120
121
# File 'lib/gdal/raster_attribute_table.rb', line 119

def row_count
  FFI::GDAL::GDAL.GDALRATGetRowCount(@c_pointer)
end

#row_count=(count) ⇒ Integer

Returns The number of rows.

Returns:

  • (Integer)

    The number of rows.



124
125
126
# File 'lib/gdal/raster_attribute_table.rb', line 124

def row_count=(count)
  FFI::GDAL::GDAL.GDALRATSetRowCount(@c_pointer, count)
end

#row_of_value(pixel_value) ⇒ Integer

Get the row for a pixel value.

Parameters:

Returns:

  • (Integer)

    Index of the row or nil.



132
133
134
135
136
137
# File 'lib/gdal/raster_attribute_table.rb', line 132

def row_of_value(pixel_value)
  row_index = FFI::GDAL::GDAL.GDALRATGetRowOfValue(@c_pointer, pixel_value)
  return if row_index.negative?

  row_index
end

#set_linear_binning(row_0_minimum, bin_size) ⇒ Object

Parameters:

Raises:



204
205
206
207
208
# File 'lib/gdal/raster_attribute_table.rb', line 204

def set_linear_binning(row_0_minimum, bin_size)
  GDAL::CPLErrorHandler.manually_handle("Unable to set linear binning") do
    FFI::GDAL::GDAL.GDALRATSetLinearBinning(@c_pointer, row_0_minimum, bin_size)
  end
end

#set_value_as_double(row, field, value) ⇒ Object Also known as: set_value_as_float

Parameters:



175
176
177
# File 'lib/gdal/raster_attribute_table.rb', line 175

def set_value_as_double(row, field, value)
  FFI::GDAL::GDAL.GDALRATSetValueAsDouble(@c_pointer, row, field, value)
end

#set_value_as_integer(row, field, value) ⇒ Object Also known as: set_value_as_int

Parameters:



183
184
185
# File 'lib/gdal/raster_attribute_table.rb', line 183

def set_value_as_integer(row, field, value)
  FFI::GDAL::GDAL.GDALRATSetValueAsInt(@c_pointer, row, field, value)
end

#set_value_as_string(row, field, value) ⇒ Object

Parameters:



168
169
170
# File 'lib/gdal/raster_attribute_table.rb', line 168

def set_value_as_string(row, field, value)
  FFI::GDAL::GDAL.GDALRATSetValueAsString(@c_pointer, row, field, value)
end

#to_color_table(entry_count = -1)) ⇒ GDAL::ColorTable?

Parameters:

  • entry_count (Integer) (defaults to: -1))

    The number of entries to produce. The default will try to auto-determine the number.

Returns:



213
214
215
216
217
218
# File 'lib/gdal/raster_attribute_table.rb', line 213

def to_color_table(entry_count = -1)
  color_table_pointer = FFI::GDAL::GDAL.GDALRATTranslateToColorTable(@c_pointer, entry_count)
  return if color_table_pointer.nil? || color_table_pointer.null?

  GDAL::ColorTable.new(color_table_pointer)
end

#value_as_double(row, field) ⇒ Float Also known as: value_as_float

Parameters:

Returns:



160
161
162
# File 'lib/gdal/raster_attribute_table.rb', line 160

def value_as_double(row, field)
  FFI::GDAL::GDAL.GDALRATGetValueAsDouble(@c_pointer, row, field)
end

#value_as_integer(row, field) ⇒ Integer Also known as: value_as_int

Parameters:

Returns:



152
153
154
# File 'lib/gdal/raster_attribute_table.rb', line 152

def value_as_integer(row, field)
  FFI::GDAL::GDAL.GDALRATGetValueAsInt(@c_pointer, row, field)
end

#value_as_string(row, field) ⇒ String

Parameters:

Returns:



142
143
144
145
146
147
# File 'lib/gdal/raster_attribute_table.rb', line 142

def value_as_string(row, field)
  value_string, ptr = FFI::GDAL::GDAL.GDALRATGetValueAsString(@c_pointer, row, field)
  ptr.autorelease = false

  value_string
end