Страница 1 из 4

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

Добавлено: 15 апр 2010, 05:19
updates-bot
Обсуждение статьи "Работа с векторными данными при помощи OGR и Python"

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

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

Добавлено: 15 апр 2010, 10:13
yellow-sky
Статья очень хорошая и полезная!
Но хотелось бы немного добавить по тексту:
  • При открытии 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 )

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

Добавлено: 15 апр 2010, 18:13
Максим Дубинин
Спасибо за комментарии (хотя я не автор статьи).

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

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

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

Добавлено: 15 апр 2010, 20:20
Voltron
Спасибо за комментарии и отзывы. Рад, что статья пришлась ко двору и уже есть первые результаты, полученные с ее помощью

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

Добавлено: 11 июн 2010, 12:28
antimirov
Спасибо, полезная статья. Мне нужно было скопировать схему одного shapefile в другой, а тут всё уже есть :)

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

Добавлено: 10 сен 2010, 14:51
Boris
Если можно чуть подробней как от
Будем исходить из того, что все программное обеспечение установлено при помощи установщика 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.

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

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

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

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

Добавлено: 11 сен 2010, 09:20
Boris
видимо придется попросить еще подробней ;(
  • gdal17 - я запускаю, видимо это и есть gdal17.bat
    запустить Python и начать работать
    - что надо большее сделать, чем набрать в строке команду Python ? если просто команду, то он у меня запускается.
    но при подключении библиотеки он же находит импортируемый файл, но не находит потом библиотеку, которая лежит рядом с импортируемым файлом:
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

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

Добавлено: 11 сен 2010, 13:02
Voltron
Boris писал(а):gdal17 - я запускаю, видимо это и есть gdal17.bat
Все правильно. Этот файл устанавливает необходимые переменные окружения, в частности путь к папке pymod GDAL.
Boris писал(а):
запустить Python и начать работать
- что надо большее сделать, чем набрать в строке команду Python ? если просто команду, то он у меня запускается.
но при подключении библиотеки он же находит импортируемый файл, но не находит потом библиотеку, которая лежит рядом с импортируемым файлом
Просто набрать в командной строке Возможно, имеет место конфликт между двумя версиями GDAL. В соседней теме видно, что в PATH есть еще одна папка

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

C:\GIS\gdal\gdalwin32-1.6\bin
Может и в PYTHONPATH она тоже присутсвует?

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

Добавлено: 31 июл 2011, 15:52
Denis Rykov
2Voltron
А можно ссылку на документацию, где говорится, что в SetField можно использовать имя поля? Может я что-то не так понимаю, но например здесь вроде указан тип int, хотя с именем поля прекрасно работает.

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

Добавлено: 31 июл 2011, 16:40
Voltron
В документации в явном виде такого нет. Но в том же 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.

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

Добавлено: 31 июл 2011, 16:48
Denis Rykov
Спасибо. Вот вот, в документации нет, а в туториале используют - не хорошо.

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

Добавлено: 27 июл 2012, 09:37
alexkarta
Администраторам!

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

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

Добавлено: 27 июл 2012, 11:18
Voltron
alexkarta писал(а):Ссылка на статью "Работа с растрами при помощи GDAL и Python" отображает неверную статью - "Работа с векторными данными при помощи OGR и Python"
Ну так взяли бы и исправили

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

Добавлено: 27 июл 2012, 12:50
Максим Дубинин
alexkarta, эта статья является редактируемой, вы можете нажать "редактировать" и поправить ссылку

Изображение