GIS-LAB

Географические информационные системы и дистанционное зондирование


Форумы GIS-Lab.info

Геоинформационные системы (ГИС) и Дистанционное зондирование Земли


Работа с векторными данными при помощи OGR и Python

Обсуждение материалов сайта: вопросы, замечания, предложения

Работа с векторными данными при помощи OGR и Python

Сообщение updates-bot » 15 апр 2010, 06:19

Обсуждение статьи "Работа с векторными данными при помощи OGR и Python"

http://gis-lab.info/qa/ogr-python.html
  • 0

updates-bot
Bot
 
Зарегистрирован: 04 фев 2008
 
Сообщения: 276
Репутация: 2

Re: Работа с векторными данными при помощи OGR и Python

Сообщение yellow-sky » 15 апр 2010, 11:13

Статья очень хорошая и полезная!
Но хотелось бы немного добавить по тексту:
  • При открытии DataSource, все таки лучше явно указывать драйвер явно, как это сделано в 5том пункте - огр ведет себя непредсказуемо когда в одной физической директории находятся данные разных форматов. Но если в роли DataSource - конкретный файл - проблем ни каких нет.
  • При обращению к слою в GDAL 1.6 можно использовать индексаторы - это более походит на python-style:
    Код: Выделить всё
         # обращаемся к слою по индексу
         layer = ogrData.GetLayer( 0 )
        # или
         layer = ogrData[0]

         # или по имени
          layer = ogrData.GetLayerByName( "points" )
         # или
          layer = ogrData["points"]

    Индексаторы очень удобны при работе в циклах:
    Код: Выделить всё
    #все слои в датасорсе
    for layer in ogrData:
        print layer.GetName()
  • В примере получения информации и работы с объектами строку
    Код: Выделить всё
    featDef = layer.GetLayerDefn() # схема (таблица атрибутов) слоя

    нужно вынести за границы цикла (такая же опечатка и в самом последнем скрипте) (кстати куда то пропал пункт за номером 6 )
  • 0

yellow-sky
Гуру
 
Зарегистрирован: 30 мар 2009
Откуда: Королев (на карте)
 
Сообщения: 588
Репутация: 55
Статьи: 4
Проекты: 3

Re: Работа с векторными данными при помощи OGR и Python

Сообщение Максим Дубинин » 15 апр 2010, 19:13

Спасибо за комментарии (хотя я не автор статьи).

Я поправил названия разделов, добавил варианты обращения к слою и вынес layer.GetLayerDefn() из цикла.

Voltron, я тоже приношу благодарности за статью, я уже на основе твоего скрипта сделал свой и OGR уже пошел перемалывать 500 мегабайтные шейп-файлы. Прощай Arcinfo. Спасибо.
  • 0

пристегивайтесь, турбулентность прямо по курсу
Аватара пользователя
Максим Дубинин
NextGIS
 
Зарегистрирован: 06 окт 2003
Откуда: Москва (на карте)
 
Сообщения: 8863
Репутация: 627
Статьи: 231
Проекты: 12/6

Re: Работа с векторными данными при помощи OGR и Python

Сообщение Voltron » 15 апр 2010, 21:20

Спасибо за комментарии и отзывы. Рад, что статья пришлась ко двору и уже есть первые результаты, полученные с ее помощью
  • 0

Voltron
Гуру
 
Зарегистрирован: 29 мар 2007
Откуда: Ukraine (на карте)
 
Сообщения: 2627
Репутация: 32
Статьи: 31
Проекты: 4/1

Re: Работа с векторными данными при помощи OGR и Python

Сообщение antimirov » 11 июн 2010, 13:28

Спасибо, полезная статья. Мне нужно было скопировать схему одного shapefile в другой, а тут всё уже есть :)
  • 0

antimirov
Новоприбывший
 
Зарегистрирован: 11 июн 2010
 
Сообщения: 1
Репутация: 0

Re: Работа с векторными данными при помощи OGR и Python

Сообщение Boris » 10 сен 2010, 15:51

Если можно чуть подробней как от
Будем исходить из того, что все программное обеспечение установлено при помощи установщика OSGeo4W. Для использования OGR совместно с Python необходимо наличие соответствующих обёрток для этого языка (bindings). В стеке программ OSGeo4W нужный пакет называется gdal-python (для GDAL/OGR 1.5.x) или gdal16-python (для GDAL/OGR 1.6.x). Рекомендую использовать версию 1.6.x.

перейти к общению с python? а то на команду "gdal16-python" командная строка OSGeo4W не реагирует, а если просто запустить python, то после набранной команды
Код: Выделить всё
from osgeo import ogr

выходит сообщение
>>> from osgeo import ogr
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\OSGeo4W\apps\gdal-17\pymod\osgeo\__init__.py", line 24, in <module>
import _gdal
ImportError: DLL load failed: The specified module could not be found.
  • 0

Boris
Гуру
 
Зарегистрирован: 10 апр 2006
Откуда: Париж (на карте)
 
Сообщения: 3867
Репутация: 327
Статьи: 3
Проекты: 1

Re: Работа с векторными данными при помощи OGR и Python

Сообщение Voltron » 10 сен 2010, 17:01

Статья немного устарела, уже есть gdal17 и gdal17-python соответственно. И, судя по сообщению об ошибке, именно они используются по умолчанию.

Чтобы перейти к "общению с python" необходимо:
  • открыть командную строку OSGeo4W
  • дать команду gdal17.bat (или gdal16.bat, если используется старая версия)
  • запустить Python и начать работать
Перед запуском готовых скриптов тоже необходимо установить необходимые переменные окружения, т.е. запустить gdal17.bat. Если на компьютере нет еще одной инсталляции Python, то необходимые пути можно прописать один раз "Пуск-Настройки-Панель управления-Система-Дополнительно-Переменные среды"
  • 0

Voltron
Гуру
 
Зарегистрирован: 29 мар 2007
Откуда: Ukraine (на карте)
 
Сообщения: 2627
Репутация: 32
Статьи: 31
Проекты: 4/1

Re: Работа с векторными данными при помощи OGR и Python

Сообщение Boris » 11 сен 2010, 10:20

видимо придется попросить еще подробней ;(
[list=]
gdal17 - я запускаю, видимо это и есть gdal17.bat
запустить Python и начать работать
- что надо большее сделать, чем набрать в строке команду Python ? если просто команду, то он у меня запускается.
но при подключении библиотеки он же находит импортируемый файл, но не находит потом библиотеку, которая лежит рядом с импортируемым файлом:
[/list]
C:\OSGeo4W\apps\gdal-17\pymod>dir /s /o:n
Volume in drive C is

Directory of C:\OSGeo4W\apps\gdal-17\pymod

10.09.2010 13:02 <DIR> .
10.09.2010 13:02 <DIR> ..
26.08.2010 17:24 128 gdal.py
26.08.2010 17:24 143 gdalconst.py
26.08.2010 17:24 147 gdalnumeric.py
26.08.2010 17:24 125 ogr.py
10.09.2010 13:02 <DIR> osgeo
26.08.2010 17:24 125 osr.py
5 File(s) 668 bytes

Directory of C:\OSGeo4W\apps\gdal-17\pymod\osgeo

10.09.2010 13:02 <DIR> .
10.09.2010 13:02 <DIR> ..
26.08.2010 17:24 778 __init__.py
10.09.2010 14:59 907 __init__.pyc
26.08.2010 17:24 13 264 _gdal.exp
26.08.2010 17:24 22 084 _gdal.lib
26.08.2010 17:24 237 568 _gdal.pyd
26.08.2010 17:24 10 804 _gdal_array.exp
26.08.2010 17:24 18 494 _gdal_array.lib
26.08.2010 17:24 45 056 _gdal_array.pyd
26.08.2010 17:24 620 _gdalconst.exp
26.08.2010 17:24 1 774 _gdalconst.lib
26.08.2010 17:24 19 456 _gdalconst.pyd
26.08.2010 17:24 3 813 _ogr.exp
26.08.2010 17:24 7 038 _ogr.lib
26.08.2010 17:24 249 856 _ogr.pyd
26.08.2010 17:24 3 813 _osr.exp
26.08.2010 17:24 7 038 _osr.lib
26.08.2010 17:24 159 744 _osr.pyd
26.08.2010 17:24 49 139 gdal.py
26.08.2010 17:24 11 441 gdal_array.py
26.08.2010 17:24 6 172 gdalconst.py
26.08.2010 17:24 45 gdalnumeric.py
26.08.2010 17:24 128 328 ogr.py
26.08.2010 17:24 29 144 osr.py
23 File(s) 1 026 376 bytes

Total Files Listed:
28 File(s) 1 027 044 bytes
5 Dir(s) 62 782 308 352 bytes free
  • 0

Boris
Гуру
 
Зарегистрирован: 10 апр 2006
Откуда: Париж (на карте)
 
Сообщения: 3867
Репутация: 327
Статьи: 3
Проекты: 1

Re: Работа с векторными данными при помощи OGR и Python

Сообщение Voltron » 11 сен 2010, 14:02

Boris писал(а):gdal17 - я запускаю, видимо это и есть gdal17.bat

Все правильно. Этот файл устанавливает необходимые переменные окружения, в частности путь к папке pymod GDAL.
Boris писал(а):
запустить Python и начать работать
- что надо большее сделать, чем набрать в строке команду Python ? если просто команду, то он у меня запускается.
но при подключении библиотеки он же находит импортируемый файл, но не находит потом библиотеку, которая лежит рядом с импортируемым файлом

Просто набрать в командной строке
Код: Выделить всё
python


Возможно, имеет место конфликт между двумя версиями GDAL. В соседней теме видно, что в PATH есть еще одна папка
Код: Выделить всё
C:\GIS\gdal\gdalwin32-1.6\bin

Может и в PYTHONPATH она тоже присутсвует?
  • 0

Voltron
Гуру
 
Зарегистрирован: 29 мар 2007
Откуда: Ukraine (на карте)
 
Сообщения: 2627
Репутация: 32
Статьи: 31
Проекты: 4/1

Re: Работа с векторными данными при помощи OGR и Python

Сообщение Denis Rykov » 31 июл 2011, 16:52

2Voltron
А можно ссылку на документацию, где говорится, что в SetField можно использовать имя поля? Может я что-то не так понимаю, но например здесь вроде указан тип int, хотя с именем поля прекрасно работает.
  • 0

Spatial is now, more than ever, just another column- The Geometry Column.
Аватара пользователя
Denis Rykov
Author
 
Зарегистрирован: 11 апр 2008
 
Сообщения: 3255
Репутация: 475
Статьи: 33
Проекты: 9

Re: Работа с векторными данными при помощи OGR и Python

Сообщение Voltron » 31 июл 2011, 17:40

В документации в явном виде такого нет. Но в том же API Tutorial'е используется SetField с именем поля, а если заглянуть в код, то увидим следующее
Код: [ Загрузить ] [ Спрятать ]
    void                SetField( const char *pszFName, int nValue )
                           { SetField( GetFieldIndex(pszFName), nValue ); }
    void                SetField( const char *pszFName, double dfValue )
                           { SetField( GetFieldIndex(pszFName), dfValue ); }
    void                SetField( const char *pszFName, const char * pszValue)
                           { SetField( GetFieldIndex(pszFName), pszValue ); }
    void                SetField( const char *pszFName, int nCount,
                                  int * panValues )
                         { SetField(GetFieldIndex(pszFName),nCount,panValues);}
    void                SetField( const char *pszFName, int nCount,
                                  double * padfValues )
                         {SetField(GetFieldIndex(pszFName),nCount,padfValues);}
    void                SetField( const char *pszFName, char ** papszValues )
                           { SetField( GetFieldIndex(pszFName), papszValues); }
    void                SetField( const char *pszFName, OGRField * puValue )
                           { SetField( GetFieldIndex(pszFName), puValue ); }
    void                SetField( const char *pszFName,
                                  int nYear, int nMonth, int nDay,
                                  int nHour=0, int nMinute=0, int nSecond=0,
                                  int nTZFlag = 0 )
                           { SetField( GetFieldIndex(pszFName),
                                       nYear, nMonth, nDay,
                                       nHour, nMinute, nSecond, nTZFlag ); }
 

Т.е. это просто обертки над обычным SetField.
  • 0

Voltron
Гуру
 
Зарегистрирован: 29 мар 2007
Откуда: Ukraine (на карте)
 
Сообщения: 2627
Репутация: 32
Статьи: 31
Проекты: 4/1

Re: Работа с векторными данными при помощи OGR и Python

Сообщение Denis Rykov » 31 июл 2011, 17:48

Спасибо. Вот вот, в документации нет, а в туториале используют - не хорошо.
  • 0

Spatial is now, more than ever, just another column- The Geometry Column.
Аватара пользователя
Denis Rykov
Author
 
Зарегистрирован: 11 апр 2008
 
Сообщения: 3255
Репутация: 475
Статьи: 33
Проекты: 9

Re: Работа с векторными данными при помощи OGR и Python

Сообщение alexkarta » 27 июл 2012, 10:37

Администраторам!

Ссылка на статью "Работа с растрами при помощи GDAL и Python" отображает неверную статью - "Работа с векторными данными при помощи OGR и Python"
  • 0

alexkarta
Участник
 
Зарегистрирован: 27 янв 2009
 
Сообщения: 91
Репутация: 0

Re: Работа с векторными данными при помощи OGR и Python

Сообщение Voltron » 27 июл 2012, 12:18

alexkarta писал(а):Ссылка на статью "Работа с растрами при помощи GDAL и Python" отображает неверную статью - "Работа с векторными данными при помощи OGR и Python"

Ну так взяли бы и исправили
  • 0

Voltron
Гуру
 
Зарегистрирован: 29 мар 2007
Откуда: Ukraine (на карте)
 
Сообщения: 2627
Репутация: 32
Статьи: 31
Проекты: 4/1

Re: Работа с векторными данными при помощи OGR и Python

Сообщение Максим Дубинин » 27 июл 2012, 13:50

alexkarta, эта статья является редактируемой, вы можете нажать "редактировать" и поправить ссылку

Изображение
  • 0

пристегивайтесь, турбулентность прямо по курсу
Аватара пользователя
Максим Дубинин
NextGIS
 
Зарегистрирован: 06 окт 2003
Откуда: Москва (на карте)
 
Сообщения: 8863
Репутация: 627
Статьи: 231
Проекты: 12/6

След.

Вернуться в Материалы сайта

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

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


(Геокруг)

© GIS-Lab и авторы, 2002-2013. При использовании материалов сайта, ссылка на GIS-Lab и авторов обязательна. Содержание материалов - ответственность авторов (подробнее).