如何检索ShapeFile特征字段的字段名称



我使用gdal ruby来解析ESRI ShapeFiles,就像这个演示中一样。我想遍历所有特性,以便将字段值推送到数据库中。但是,我找不到如何检索每个字段的名称,我需要它来匹配数据库列。到目前为止,我只能使用字段的字段索引,例如:

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文档。我好像在找错误的术语。

看看OGR API本身,我认为您需要通过特性。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
...
ds = ogr.Open(filename, 1)
layer = ds.GetLayer()
for i in range(len(layer.schema)):
    print(layer.schema[i].name)

最新更新