Чтение и обработка .shp файлов при помощи Python

Вопросы по нескольким пакетам сразу, или вопросы, которые непонятно к какой ГИС отнести
Ответить
Аватара пользователя
Prince660
Активный участник
Сообщения: 164
Зарегистрирован: 25 мар 2011, 20:12
Репутация: 15
Ваше звание: Питоновод
Откуда: г. Симферорполь
Контактная информация:

Чтение и обработка .shp файлов при помощи Python

Сообщение Prince660 »

Введение: Возникла необходимость обрабатывать объекты из .shp файла при помощи Python и сохранять их в другой .shp
Суть: Необходимо из шейпа считывать полигональные объекты, по одному > получить координаты точек объекта > провести с ними вычисления > получившийся результат записать в новый шейп по дному объекту.

Почитал такую статью по использованию OGR: http://gis-lab.info/qa/ogr-python.html, но это не совсем то что мне нужно.

- Предполагемые шейп файлы будут весить по несколько гигабайт - поэтому считывание объектов (а потом и запись в другой файл) должно происходить по одному, а не загружать в оперативку сразу весь тяжеленный файл.

- Также необходимо получить координаты точек объекта для вычислений - в выше указанной статье я ничего такого не нашёл.

- Ну и после обработки эти координаты объекта в другой шейп записать.

Помогите разобраться с этими действиями, может статью какую посоветуете, желательно русскоязычную, в английском не силён. Либо варианты других модулей для работы с шейпами.

Заранее благодарен!
Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Чтение и обработка .shp файлов при помощи Python

Сообщение Denis Rykov »

А с чего вы решили, что в данном примере все объекты загружаются в память?
Spatial is now, more than ever, just another column- The Geometry Column.
Аватара пользователя
Prince660
Активный участник
Сообщения: 164
Зарегистрирован: 25 мар 2011, 20:12
Репутация: 15
Ваше звание: Питоновод
Откуда: г. Симферорполь
Контактная информация:

Re: Чтение и обработка .shp файлов при помощи Python

Сообщение Prince660 »

Ну если взять такой кусочек кода:

Код: Выделить всё

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

Сообщение Denis Rykov »

В статье написано как получить геометрию фичи, дальше читаем:
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 »

Спасибо, пока вроде разобрался!
Не сразу понял терминологию, что "геометрия объекта" включает в себя его координаты.
Аватара пользователя
Prince660
Активный участник
Сообщения: 164
Зарегистрирован: 25 мар 2011, 20:12
Репутация: 15
Ваше звание: Питоновод
Откуда: г. Симферорполь
Контактная информация:

Re: Чтение и обработка .shp файлов при помощи Python

Сообщение Prince660 »

Вроде со всем справился, осталась проблема кодировки.
В исходном 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

Сообщение Prince660 »

Проблему с кодировкой решил.
Может кому ещё понадобится:

Код: Выделить всё

layer_save = ogrData_save.CreateLayer( layerName, None, geom_type = ogr.wkbPolygon, options = ['ENCODING=UTF-8'] )
при создании слоя указать её в 'options', в моём случае это UTF-8
Ответить

Вернуться в «Общий - ПО»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 12 гостей