Чтение и обработка .shp файлов при помощи Python
- Prince660
- Активный участник
- Сообщения: 164
- Зарегистрирован: 25 мар 2011, 20:12
- Репутация: 15
- Ваше звание: Питоновод
- Откуда: г. Симферорполь
- Контактная информация:
Чтение и обработка .shp файлов при помощи Python
Введение: Возникла необходимость обрабатывать объекты из .shp файла при помощи Python и сохранять их в другой .shp
Суть: Необходимо из шейпа считывать полигональные объекты, по одному > получить координаты точек объекта > провести с ними вычисления > получившийся результат записать в новый шейп по дному объекту.
Почитал такую статью по использованию OGR: http://gis-lab.info/qa/ogr-python.html, но это не совсем то что мне нужно.
- Предполагемые шейп файлы будут весить по несколько гигабайт - поэтому считывание объектов (а потом и запись в другой файл) должно происходить по одному, а не загружать в оперативку сразу весь тяжеленный файл.
- Также необходимо получить координаты точек объекта для вычислений - в выше указанной статье я ничего такого не нашёл.
- Ну и после обработки эти координаты объекта в другой шейп записать.
Помогите разобраться с этими действиями, может статью какую посоветуете, желательно русскоязычную, в английском не силён. Либо варианты других модулей для работы с шейпами.
Заранее благодарен!
Суть: Необходимо из шейпа считывать полигональные объекты, по одному > получить координаты точек объекта > провести с ними вычисления > получившийся результат записать в новый шейп по дному объекту.
Почитал такую статью по использованию OGR: http://gis-lab.info/qa/ogr-python.html, но это не совсем то что мне нужно.
- Предполагемые шейп файлы будут весить по несколько гигабайт - поэтому считывание объектов (а потом и запись в другой файл) должно происходить по одному, а не загружать в оперативку сразу весь тяжеленный файл.
- Также необходимо получить координаты точек объекта для вычислений - в выше указанной статье я ничего такого не нашёл.
- Ну и после обработки эти координаты объекта в другой шейп записать.
Помогите разобраться с этими действиями, может статью какую посоветуете, желательно русскоязычную, в английском не силён. Либо варианты других модулей для работы с шейпами.
Заранее благодарен!
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: Чтение и обработка .shp файлов при помощи Python
А с чего вы решили, что в данном примере все объекты загружаются в память?
Spatial is now, more than ever, just another column- The Geometry Column.
- Prince660
- Активный участник
- Сообщения: 164
- Зарегистрирован: 25 мар 2011, 20:12
- Репутация: 15
- Ваше звание: Питоновод
- Откуда: г. Симферорполь
- Контактная информация:
Re: Чтение и обработка .shp файлов при помощи Python
Ну если взять такой кусочек кода:
Я предположил что это он так ссылается на этот файл уже в оперативной памяти памяти.
Но после вашего сообщения попробовал в пороцессе выполнения кода понаблюдать за оперативкой и существенных изменений не заметил.
Хорошо.
Идём дальше:
Как мне получить координаты точек объекта полученного из файла?
Код: Выделить всё
ogrData = ogr.Open( "/home/alex/test/points.shp", False )
print ogrData
# выдаёт:
<osgeo.ogr.DataSource; proxy of <Swig Object of type 'OGRDataSourceShadow *' at 0x7fbeed47d8d0> >
Но после вашего сообщения попробовал в пороцессе выполнения кода понаблюдать за оперативкой и существенных изменений не заметил.
Хорошо.

Идём дальше:
Как мне получить координаты точек объекта полученного из файла?
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: Чтение и обработка .shp файлов при помощи Python
В статье написано как получить геометрию фичи, дальше читаем:
Iterate over Geometries in a Geometry
Iterate over Points in a Geometry
Iterate over Geometries in a Geometry
Iterate over Points in a Geometry
Spatial is now, more than ever, just another column- The Geometry Column.
- Prince660
- Активный участник
- Сообщения: 164
- Зарегистрирован: 25 мар 2011, 20:12
- Репутация: 15
- Ваше звание: Питоновод
- Откуда: г. Симферорполь
- Контактная информация:
Re: Чтение и обработка .shp файлов при помощи Python
Спасибо, пока вроде разобрался!
Не сразу понял терминологию, что "геометрия объекта" включает в себя его координаты.
Не сразу понял терминологию, что "геометрия объекта" включает в себя его координаты.
- Prince660
- Активный участник
- Сообщения: 164
- Зарегистрирован: 25 мар 2011, 20:12
- Репутация: 15
- Ваше звание: Питоновод
- Откуда: г. Симферорполь
- Контактная информация:
Re: Чтение и обработка .shp файлов при помощи Python
Вроде со всем справился, осталась проблема кодировки.
В исходном DBF есть поля заполненные кириллицей и при их копировании в новый слой появляется вот такое сообщение:
и в новом слое они отображаются не кириллицей, а знаками вопроса.
Как с этим бороться? Как указать в какой кодировке копировать?
В исходном DBF есть поля заполненные кириллицей и при их копировании в новый слой появляется вот такое сообщение:
Код: Выделить всё
Warning 1: One or several characters couldn't be converted correctly from UTF-8 to ISO-8859-1.
Как с этим бороться? Как указать в какой кодировке копировать?
- Prince660
- Активный участник
- Сообщения: 164
- Зарегистрирован: 25 мар 2011, 20:12
- Репутация: 15
- Ваше звание: Питоновод
- Откуда: г. Симферорполь
- Контактная информация:
Re: Чтение и обработка .shp файлов при помощи Python
Проблему с кодировкой решил.
Может кому ещё понадобится:
при создании слоя указать её в 'options', в моём случае это UTF-8
Может кому ещё понадобится:
Код: Выделить всё
layer_save = ogrData_save.CreateLayer( layerName, None, geom_type = ogr.wkbPolygon, options = ['ENCODING=UTF-8'] )
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 12 гостей