Как получить имя поля поля функции ShapeFile?

Я использую gdal-ruby для анализа шейп-файлы ESRI, как в этой демо. Я хочу перебрать все функции, чтобы передать значения полей в базу данных. Однако я не могу найти, как получить имя каждого поля, которое мне нужно для соответствия столбцу базы данных. К настоящему времени я могу работать только с индексом поля поля, например:

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

Я проверил доступные методы с помощью irb и изучил документацию по API. Кажется, я ищу неправильные термины.


person JJD    schedule 16.07.2013    source источник


Ответы (1)


Глядя на сам OGR API, я думаю, вам нужно перейти через feature.GetDefnRef , чтобы получить определение функции, затем .GetFieldDefn для соответствующего поля и, наконец, .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
...
person Juffy    schedule 17.07.2013