'How to retrieve the field name of a ShapeFile feature field?

I am using gdal-ruby to parse ESRI ShapeFiles like in this demo. I want to iterate through all features in order to push the field values into a database. However, I cannot find out how to retrieve the name of each field which I need to match the database column. By now I can only work with the field index of the field such as:

dataset = Gdal::Ogr.open(filename)
number_of_layers = dataset.get_layer_count
number_of_layers.times do |layer_index|
  layer = dataset.get_layer(layer_index)
  layer.get_feature_count.times do |feature_index|
    feature = layer.get_feature(feature_index)
    feature.get_field_count.times do |field_index|
      field_value = feature.get_field(field_index)
      # How can I find out the name of the field?
      puts "Value = #{field_value} for unknown field name"
    end
  end
end

I checked the available methods with irb and looked into the API documentation. It seems as if I am searching for the wrong terms.



Solution 1:[1]

Looking at the OGR API itself, I think you need to go via feature.GetDefnRef, to get the feature definition, then .GetFieldDefn for the relevant field, and finally .GetNameRef...?

...
feature.get_field_count.times do |field_index|
  defn_ref = feature.get_defn_ref
  field_defn = defn_ref.get_field_defn(field_index)
  field_name = field_defn.get_name
  field_value = feature.get_field(field_index)
  puts "Value = #{field_value} for field named #{field_name}"
end
...

Solution 2:[2]

ds = ogr.Open(filename, 1)
layer = ds.GetLayer()

for i in range(len(layer.schema)):
    print(layer.schema[i].name)

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 JJD
Solution 2 f.ashouri