Сбой Python при добавлении поля в шейп-файл с помощью ogr

#python #gdal #shapefile #ogr

#python #gdal #шейп-файл #ogr

Вопрос:

При добавлении поля в шейп-файл с использованием пакета ogr в python программа завершает работу на последнем шаге, который называется «SetFeature». Об этой проблеме сообщалось ранее, но я не смог решить ее на основе других сообщений.

Вот пример кода, в котором фиктивное значение «100» добавляется в качестве нового поля для всех функций в шейп-файле, за которым следуют связанные вопросы и вещи, которые я пробовал.

Есть идеи, что я мог бы попробовать? Спасибо за ваше время.

SDB

* РЕДАКТИРОВАТЬ: произошел конфликт между этим кодом и модулем, который я написал. Это сложно воспроизвести, поэтому я соглашаюсь на обходной путь: импортируйте вызывающий досаду модуль после использования приведенного ниже кода. Спасибо всем за понимание и время!

 # Load shapefile
shapefile = ogr.Open(shapefile_path, 1)

layer = shapefile.GetLayer()
layer_defn = layer.GetLayerDefn()


new_field_defn = ogr.FieldDefn("New_field", ogr.OFTReal)
new_field_defn.SetWidth(50)
new_field_defn.SetPrecision(11)
layer.CreateField(new_field_defn)


# Walk through shapefile, setting new field for each feature
for feature in layer :
    geometry = feature.GetGeometryRef()             

    band_value = 100
    feature.SetField("New_field",np.double(band_value))

    # This is the line that crashes the program
    layer.SetFeature(feature)

shapefile.Destroy()
  

Использование этого решения не сработало :
https://gis.stackexchange.com/questions/109194/setfeature-creates-infinite-loop-when-updating-sqlite-feature-using-ogr

Я считаю, что мой код следует этому примеру: http://www.digital-geography.com/create-and-edit-shapefiles-with-python-only/#.V_0YtPnhCUk

Я думаю, что я избежал связанной ошибки http://trac.osgeo.org/gdal/wiki/PythonGotchas#PythonbindingsdonotraiseexceptionsunlessyouexplicitlycallUseExceptions

Комментарии:

1. Какая ошибка выводится при сбое? Я попробовал ваш код в шейп-файле, и он работал без проблем. Вы уверены, что у вас есть доступ на запись к файлу?

2. Сообщения об ошибке нет, python (запускаемый из Sublime Text 2) зависает, а затем завершает работу, печатая только системный путь. Я проверю разрешения! Спасибо.

3. Я не могу воспроизвести его как с python 2, так и с 3; возможно, вы могли бы указать версию python / ogr, которую вы используете. Также вы уверены, что значение, которое вы пытаетесь установить, не больше того, которое вы определили для этого поля? (даже если это явно не должно привести к сбою вашего интерпретатора python)

4. Оказывается, мой код также работает для меня при запуске как автономный, но когда я пытаюсь определить его как функцию — скажем, «add_data_to_shapefile» — и вызываю его в основном скрипте (именно так я его настроил), он вылетает. Функция отлично работает при локальном запуске с помощью «if name == ‘ main ‘: add_data_to_shapefile()». Но когда я вызываю add_data_to_shapefile() в другом скрипте, происходит сбой python. Есть идеи?

5. На самом деле, трудно сказать, не видя контекста / проблемного кода, поскольку, как вы указали, в привязках ogr / gdal есть некоторые ошибки. В любом случае удачи!