Работа GDAL на С++. Перепроецирование, ГК, RGB
-
- Участник
- Сообщения: 93
- Зарегистрирован: 04 дек 2013, 02:14
- Репутация: 1
Работа GDAL на С++. Перепроецирование, ГК, RGB
Есть GeoTiff.
Необходимо на C++ получить другую проекцию (EPSG:32654).
После этого нужен доступ по пикселам (нового перепроецированного в EPSG:32654) изображения как к географическим данным (широта долгота) так и цветовым (RGB).
Необходимо на C++ получить другую проекцию (EPSG:32654).
После этого нужен доступ по пикселам (нового перепроецированного в EPSG:32654) изображения как к географическим данным (широта долгота) так и цветовым (RGB).
- Дмитрий Барышников
- Гуру
- Сообщения: 2572
- Зарегистрирован: 17 ноя 2009, 19:17
- Репутация: 261
- Откуда: Москва
Re: Работа GDAL на С++. Перепроецирование, ГК, RGB
Я как раз на GISConf2012 проводил мастер класс по перепроецированию растров (жаль видео не осталось).
Если пройти на сайт конференции на мою страничку (http://gisconf.ru/ru/u25/) видим ссылочку: http://gis-lab.info/docs/gisconf/baryshnikov/gdal_mc.7z . В архиве в папке files\gdalmc\main.cpp код довольно плотно покрытый комментариями.
Кстати, на выходе не обязательно писать файл, можно воспользоваться драйвером mem (http://gdal.org/frmt_mem.html)
Ну а по поводу получения значений пикселов писал и давал код здесь:
1) перевод из пиксельных координат в географические: viewtopic.php?f=30&t=6603&p=35652&hilit ... orm#p35674
2) для обратного преобразования из географических в пиксельные используем функцию http://www.gdal.org/gdal_8h.html#ae5445 ... 8eddd8b64d
3) Для чтения блока пикселей в массив: http://www.gdal.org/classGDALDataset.ht ... b891a05743
P.S. Активность участников ГИС-Лаба удручает. С таким интересом (около 25 чел.) конфы в этом году может и не быть.
Если пройти на сайт конференции на мою страничку (http://gisconf.ru/ru/u25/) видим ссылочку: http://gis-lab.info/docs/gisconf/baryshnikov/gdal_mc.7z . В архиве в папке files\gdalmc\main.cpp код довольно плотно покрытый комментариями.
Кстати, на выходе не обязательно писать файл, можно воспользоваться драйвером mem (http://gdal.org/frmt_mem.html)
Ну а по поводу получения значений пикселов писал и давал код здесь:
1) перевод из пиксельных координат в географические: viewtopic.php?f=30&t=6603&p=35652&hilit ... orm#p35674
2) для обратного преобразования из географических в пиксельные используем функцию http://www.gdal.org/gdal_8h.html#ae5445 ... 8eddd8b64d
3) Для чтения блока пикселей в массив: http://www.gdal.org/classGDALDataset.ht ... b891a05743
P.S. Активность участников ГИС-Лаба удручает. С таким интересом (около 25 чел.) конфы в этом году может и не быть.
-
- Участник
- Сообщения: 93
- Зарегистрирован: 04 дек 2013, 02:14
- Репутация: 1
Re: Работа GDAL на С++. Перепроецирование, ГК, RGB
Не могу собрать твой main.cpp из архива. Линкер ругается на отсутствие либ, реализующих следующие классы:
OGRSpatialReference
OGRLineString
OGRPolygon
OGRGeometry
GDALDataset
GDALRasterBand
GDALDriver
GDALWarpOperation
OGRSFDriverRegistrar
OGRFeatureDefn
OGRFeature
OGRDataSource
и функцию (насколько понимаю глобальную)
OGRCreateCoordinateTransformation(OGRSpatialReference*, OGRSpatialReference*).
Я в своих поделках-попытках (которые успешно собирались) линкую gdal_i.lib и geos_c.lib (уже не помню откуда взял инфу), но для твоего кода требуется что-то еще. Может, глядя на приведенный список классов, подскажешь чего не хватает? ибо в файлах к cmake из архива я так и не нашел этот список (вернее раскрытие параметра ${GDAL_LIBRARIES}), что меня сильно удивило - ведь VC++ нужно явно указывать список либ.
P.S: Черт возьми, какая же все-таки сложная эта либа GDAL, и никакой документации (пара жалких примеров и API List не в счет) - как так можно писать софт, не понимаю.
P.P.S: CMake, SCons, Ant... (никогда не любил эти всякие системы сборки за то, что их дохрена и КАЖДАЯ из них добавляет новую абстракцию, которая куда огромнее чем та которую она скрывает). Ну ладно, что-то я разворчался - накипело...
OGRSpatialReference
OGRLineString
OGRPolygon
OGRGeometry
GDALDataset
GDALRasterBand
GDALDriver
GDALWarpOperation
OGRSFDriverRegistrar
OGRFeatureDefn
OGRFeature
OGRDataSource
и функцию (насколько понимаю глобальную)
OGRCreateCoordinateTransformation(OGRSpatialReference*, OGRSpatialReference*).
Я в своих поделках-попытках (которые успешно собирались) линкую gdal_i.lib и geos_c.lib (уже не помню откуда взял инфу), но для твоего кода требуется что-то еще. Может, глядя на приведенный список классов, подскажешь чего не хватает? ибо в файлах к cmake из архива я так и не нашел этот список (вернее раскрытие параметра ${GDAL_LIBRARIES}), что меня сильно удивило - ведь VC++ нужно явно указывать список либ.
P.S: Черт возьми, какая же все-таки сложная эта либа GDAL, и никакой документации (пара жалких примеров и API List не в счет) - как так можно писать софт, не понимаю.
P.P.S: CMake, SCons, Ant... (никогда не любил эти всякие системы сборки за то, что их дохрена и КАЖДАЯ из них добавляет новую абстракцию, которая куда огромнее чем та которую она скрывает). Ну ладно, что-то я разворчался - накипело...
- Дмитрий Барышников
- Гуру
- Сообщения: 2572
- Зарегистрирован: 17 ноя 2009, 19:17
- Репутация: 261
- Откуда: Москва
Re: Работа GDAL на С++. Перепроецирование, ГК, RGB
Вопросы по сборке GDAL и компиляции совершенно не соответствуют теме. Это уже надо в новой теме спрашивать или хотя бы вот в этих:
1. viewtopic.php?t=10428
2. viewtopic.php?f=30&t=7469
Ну а следующие непонятные классы и структуры, перечисленные вами, суть являются самим GDAL:
1. http://gdal.org/annotated.html
2. http://gdal.org/ogr/annotated.html
1. viewtopic.php?t=10428
2. viewtopic.php?f=30&t=7469
Ну а следующие непонятные классы и структуры, перечисленные вами, суть являются самим GDAL:
1. http://gdal.org/annotated.html
2. http://gdal.org/ogr/annotated.html
-
- Участник
- Сообщения: 93
- Зарегистрирован: 04 дек 2013, 02:14
- Репутация: 1
Re: Работа GDAL на С++. Перепроецирование, ГК, RGB
Огромное спасибо за материал. Я немного продвинулся благодаря коду в gdal_mc.7z, и на его основе (вернее удалив все, что не нужно) написал пример, но натолкнулся на ошибку трансформации гтифа. Лог огромный да и как его выводить в TXT я не знаю, поэтому я собрал пример, снабдил его необходимыми DLL и файлами (пути относительные), а также приложил исходник. Пожалуйста глянь и скажи что не так?
- Вложения
-
- gdal.part03.rar
- (9.6 МБ) 421 скачивание
-
- gdal.part02.rar
- (10 МБ) 350 скачиваний
-
- gdal.part01.rar
- (10 МБ) 397 скачиваний
-
- Участник
- Сообщения: 93
- Зарегистрирован: 04 дек 2013, 02:14
- Репутация: 1
Re: Работа GDAL на С++. Перепроецирование, ГК, RGB
Программа успешно открывает файл, но потом выдает ошибки в лог и стопорится. При этом новый (как бы перепроецированный) файл создается, но он весит 2 Гига (исходник = 64 Мб) и естественно не открывается ни в одной программе. В чем проблема - не знаю. Прилагаю логи, может по ним кто-нибудь разберется.
- Вложения
-
- log.txt
- логи
- (216.82 КБ) 616 скачиваний
-
- Участник
- Сообщения: 93
- Зарегистрирован: 04 дек 2013, 02:14
- Репутация: 1
Re: Работа GDAL на С++. Перепроецирование, ГК, RGB
Поправка к предыдущему сообщению: программа не стопорится, она просто оооочень долго проводит перепроецирование и выходной геотиф получается в >1000 раз больше (гигабайты) входного (несколько мегобайт). И файл всеравно не открывается.
-
- Новоприбывший
- Сообщения: 2
- Зарегистрирован: 27 авг 2014, 14:54
- Репутация: 0
Re: Работа GDAL на С++. Перепроецирование, ГК, RGB
Удалось разобраться почему так выходит? У меня 5 мб файл на входе превращается в 2.4Гб и более. Падает с сообщением:
Исходный размер изображения: 743x685x310:56:52.049 Debug: nPixels 46733 nLines 111190
ERROR 1: Too many points (441 out of 441) failed to transform,
unable to compute output bounds.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 28 гостей