#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 есть некоторые ошибки. В любом случае удачи!