Работа с векторными данными при помощи OGR и Python
-
- Bot
- Сообщения: 276
- Зарегистрирован: 03 фев 2008, 23:13
- Репутация: 3
Работа с векторными данными при помощи OGR и Python
Обсуждение статьи "Работа с векторными данными при помощи OGR и Python"
http://gis-lab.info/qa/ogr-python.html
http://gis-lab.info/qa/ogr-python.html
-
- Гуру
- Сообщения: 588
- Зарегистрирован: 30 мар 2009, 21:53
- Репутация: 55
- Откуда: Королев
Re: Работа с векторными данными при помощи OGR и Python
Статья очень хорошая и полезная!
Но хотелось бы немного добавить по тексту:
Но хотелось бы немного добавить по тексту:
- При открытии 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()
- В примере получения информации и работы с объектами строку
нужно вынести за границы цикла (такая же опечатка и в самом последнем скрипте) (кстати куда то пропал пункт за номером 6 )
Код: Выделить всё
featDef = layer.GetLayerDefn() # схема (таблица атрибутов) слоя
- Максим Дубинин
- MindingMyOwnBusiness
- Сообщения: 9129
- Зарегистрирован: 06 окт 2003, 20:20
- Репутация: 748
- Ваше звание: NextGIS
- Откуда: Москва
- Контактная информация:
Re: Работа с векторными данными при помощи OGR и Python
Спасибо за комментарии (хотя я не автор статьи).
Я поправил названия разделов, добавил варианты обращения к слою и вынес layer.GetLayerDefn() из цикла.
Voltron, я тоже приношу благодарности за статью, я уже на основе твоего скрипта сделал свой и OGR уже пошел перемалывать 500 мегабайтные шейп-файлы. Прощай Arcinfo. Спасибо.
Я поправил названия разделов, добавил варианты обращения к слою и вынес layer.GetLayerDefn() из цикла.
Voltron, я тоже приношу благодарности за статью, я уже на основе твоего скрипта сделал свой и OGR уже пошел перемалывать 500 мегабайтные шейп-файлы. Прощай Arcinfo. Спасибо.
пристегивайтесь, турбулентность прямо по курсу
-
- Гуру
- Сообщения: 2627
- Зарегистрирован: 29 мар 2007, 14:12
- Репутация: 34
- Откуда: Ukraine
Re: Работа с векторными данными при помощи OGR и Python
Спасибо за комментарии и отзывы. Рад, что статья пришлась ко двору и уже есть первые результаты, полученные с ее помощью
-
- Новоприбывший
- Сообщения: 1
- Зарегистрирован: 11 июн 2010, 12:27
- Репутация: 0
Re: Работа с векторными данными при помощи OGR и Python
Спасибо, полезная статья. Мне нужно было скопировать схему одного shapefile в другой, а тут всё уже есть 

-
- Гуру
- Сообщения: 4231
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: -344969098
- Откуда: Париж
Re: Работа с векторными данными при помощи OGR и Python
Если можно чуть подробней как от
выходит сообщение
перейти к общению с python? а то на команду "gdal16-python" командная строка OSGeo4W не реагирует, а если просто запустить python, то после набранной командыБудем исходить из того, что все программное обеспечение установлено при помощи установщика OSGeo4W. Для использования OGR совместно с Python необходимо наличие соответствующих обёрток для этого языка (bindings). В стеке программ OSGeo4W нужный пакет называется gdal-python (для GDAL/OGR 1.5.x) или gdal16-python (для GDAL/OGR 1.6.x). Рекомендую использовать версию 1.6.x.
Код: Выделить всё
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.
-
- Гуру
- Сообщения: 2627
- Зарегистрирован: 29 мар 2007, 14:12
- Репутация: 34
- Откуда: Ukraine
Re: Работа с векторными данными при помощи OGR и Python
Статья немного устарела, уже есть gdal17 и gdal17-python соответственно. И, судя по сообщению об ошибке, именно они используются по умолчанию.
Чтобы перейти к "общению с python" необходимо:
Чтобы перейти к "общению с python" необходимо:
- открыть командную строку OSGeo4W
- дать команду gdal17.bat (или gdal16.bat, если используется старая версия)
- запустить Python и начать работать
-
- Гуру
- Сообщения: 4231
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: -344969098
- Откуда: Париж
Re: Работа с векторными данными при помощи OGR и Python
видимо придется попросить еще подробней ;(
- 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
-
- Гуру
- Сообщения: 2627
- Зарегистрирован: 29 мар 2007, 14:12
- Репутация: 34
- Откуда: Ukraine
Re: Работа с векторными данными при помощи OGR и Python
Все правильно. Этот файл устанавливает необходимые переменные окружения, в частности путь к папке pymod GDAL.Boris писал(а):gdal17 - я запускаю, видимо это и есть gdal17.bat
Просто набрать в командной строкеBoris писал(а):- что надо большее сделать, чем набрать в строке команду Python ? если просто команду, то он у меня запускается.запустить Python и начать работать
но при подключении библиотеки он же находит импортируемый файл, но не находит потом библиотеку, которая лежит рядом с импортируемым файлом
Код: Выделить всё
python
Код: Выделить всё
C:\GIS\gdal\gdalwin32-1.6\bin
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: Работа с векторными данными при помощи OGR и Python
2Voltron
А можно ссылку на документацию, где говорится, что в SetField можно использовать имя поля? Может я что-то не так понимаю, но например здесь вроде указан тип int, хотя с именем поля прекрасно работает.
А можно ссылку на документацию, где говорится, что в SetField можно использовать имя поля? Может я что-то не так понимаю, но например здесь вроде указан тип int, хотя с именем поля прекрасно работает.
Spatial is now, more than ever, just another column- The Geometry Column.
-
- Гуру
- Сообщения: 2627
- Зарегистрирован: 29 мар 2007, 14:12
- Репутация: 34
- Откуда: Ukraine
Re: Работа с векторными данными при помощи OGR и Python
В документации в явном виде такого нет. Но в том же API Tutorial'е используется SetField с именем поля, а если заглянуть в код, то увидим следующее
Т.е. это просто обертки над обычным 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.
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: Работа с векторными данными при помощи OGR и Python
Спасибо. Вот вот, в документации нет, а в туториале используют - не хорошо.
Spatial is now, more than ever, just another column- The Geometry Column.
-
- Участник
- Сообщения: 91
- Зарегистрирован: 27 янв 2009, 00:22
- Репутация: 0
Re: Работа с векторными данными при помощи OGR и Python
Администраторам!
Ссылка на статью "Работа с растрами при помощи GDAL и Python" отображает неверную статью - "Работа с векторными данными при помощи OGR и Python"
Ссылка на статью "Работа с растрами при помощи GDAL и Python" отображает неверную статью - "Работа с векторными данными при помощи OGR и Python"
-
- Гуру
- Сообщения: 2627
- Зарегистрирован: 29 мар 2007, 14:12
- Репутация: 34
- Откуда: Ukraine
Re: Работа с векторными данными при помощи OGR и Python
Ну так взяли бы и исправилиalexkarta писал(а):Ссылка на статью "Работа с растрами при помощи GDAL и Python" отображает неверную статью - "Работа с векторными данными при помощи OGR и Python"
- Максим Дубинин
- MindingMyOwnBusiness
- Сообщения: 9129
- Зарегистрирован: 06 окт 2003, 20:20
- Репутация: 748
- Ваше звание: NextGIS
- Откуда: Москва
- Контактная информация:
Re: Работа с векторными данными при помощи OGR и Python
alexkarta, эта статья является редактируемой, вы можете нажать "редактировать" и поправить ссылку


пристегивайтесь, турбулентность прямо по курсу
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя