Страница 1 из 1
Программирование с помощью GDAL и MapInfo (+PostGRES)
Добавлено: 24 ноя 2012, 19:06
glax2020
Добрый день!
Я только начал заниматься программированием с использованием библиотеки GDAL,
и столкнулся с проблемами:
1) в результате экспорта таблицы MapInfo в таблицу MapInfo у меня потерялись графические атрибуты (стили) для объектов (геометрия и атрибутика по полям переносится).
В чем может быть проблема? Что неправильно?
Вот примерный текст кода (исходный код почерпнул у Барышникова Дмитрия):
Код: Выделить всё
OGRCoordinateTransformation *poCT = OGRCreateCoordinateTransformation( pSrcSpaRef, &oDstSpaRef);
if(poCT)
{
OGRFeature* pSrcFeature;
while((pSrcFeature = pSrcLayer->GetNextFeature()) != NULL)
{
OGRGeometry *pSrcGeom = pSrcFeature->GetGeometryRef();
if(pSrcGeom)
{
OGRGeometry* pDstGeom = NULL;
if ( pCutGeom )
pDstGeom = pSrcGeom->Intersection(pCutGeom);
else
pDstGeom = pSrcGeom;
if(pDstGeom && pDstGeom->transform(poCT) == OGRERR_NONE)
{
OGRFeature *poDstFeature = OGRFeature::CreateFeature( poDstLayer->GetLayerDefn() );
OGRFeatureDefn* pSrcFeatureDefn = pSrcFeature->GetDefnRef();
for(size_t j = 0; j < pSrcFeatureDefn->GetFieldCount(); ++j)
{
poDstFeature->SetField(j, pSrcFeature->GetRawFieldRef(j));
}
poDstFeature->SetGeometryDirectly(pDstGeom);
if( poDstLayer->CreateFeature( poDstFeature ) != OGRERR_NONE )
{
printf( "[%d] Failed to create feature in shapefile.\n" , nRows);
exit( 1 );
}
OGRFeature::DestroyFeature( poDstFeature );
nRows++;
}
}
}
OCTDestroyCoordinateTransformation(poCT);
printf( "[%d] Exported.\n" , nRows);
}
2) Пока не обнаружил и не разобрался, как я могу найти и подключить драйвера для PostGRES и как с ними работать в этой библиотеке GDAL ?
Буду благодарен за любые советы и рекомендации
С уважением, Александр
Re: Программирование с помощью GDAL и MapInfo (+PostGRES)
Добавлено: 24 ноя 2012, 19:32
Voltron
Лучше не валить вопросы в кучу, а каждый оформлять отдельной темой.
Теперь касательно драйверов.
Тут смотрели?
Re: Программирование с помощью GDAL и MapInfo (+PostGRES)
Добавлено: 24 ноя 2012, 22:45
glax2020
Спасибо за ответ.
Вот уже несколько часов борюсь и пытаюсь преодолеть проблему -- Linker Tools Error LNK1107, когда присоединил PostGress'овские библиотеки, включая libpq.dll.
У меня: "Microsoft Visual Studio 2008" и "PostgreSQL 9.2".
Проблема весьма известная в инете, как я вижу, но я пробую выполнять рекомендации - устанавливать опции компиляции, и переименовывать "libpq.dll" в " libpq.lib" -- и позитивного результата пока нет увы никакого

Re: Программирование с помощью GDAL и MapInfo (+PostGRES)
Добавлено: 24 ноя 2012, 22:57
Дмитрий Барышников
1) GDAL имеет ограниченную поддержку стилей (в моем коде вообще стили не учитывались, ведь это пример).
http://www.gdal.org/ogr/ogr_feature_style.html
2) С любыми данными GDAL работает одинаково через GDALDatasedt/OGRLayer. Т.е. нет специальных классов под PostGIS. А вот поддержку Postgres/PostGIS в виде драйвера компилировать надо - если хотите пользоваться.
Вот вывод всех поддерживаемых драйверов.
Код: Выделить всё
for(size_t i = 0; i < OGRSFDriverRegistrar::GetRegistrar()->GetDriverCount(); ++i)
{
OGRSFDriver *pDrv = OGRSFDriverRegistrar::GetRegistrar()->GetDriver(i);
printf(pDrv->GetName());
}
Re: Программирование с помощью GDAL и MapInfo (+PostGRES)
Добавлено: 24 ноя 2012, 22:59
Дмитрий Барышников
glax2020 писал(а):
Проблема весьма известная в инете, как я вижу, но я пробую выполнять рекомендации - устанавливать опции компиляции, и переименовывать "libpq.dll" в " libpq.lib" -- и позитивного результата пока нет увы никакого

Никогда так не делайте. Вам нужен libpq.lib (обычно ставится вместе с Postgres - у меня путь такой: C:\Program Files\PostgreSQL\9.1\lib). Поищите поиском в его директории установки. *.dll != *.lib
Re: Программирование с помощью GDAL и MapInfo (+PostGRES)
Добавлено: 24 ноя 2012, 23:42
glax2020
Дмитрий Барышников писал(а):glax2020 писал(а):
Проблема весьма известная в инете, как я вижу, но я пробую выполнять рекомендации - устанавливать опции компиляции, и переименовывать "libpq.dll" в " libpq.lib" -- и позитивного результата пока нет увы никакого

Никогда так не делайте. Вам нужен libpq.lib (обычно ставится вместе с Postgres - у меня путь такой: C:\Program Files\PostgreSQL\9.1\lib). Поищите поиском в его директории установки. *.dll != *.lib
Спасибо за рекомендацию.
Компиляция у меня уже проходит.
Но, после выполнения команд:
Код: Выделить всё
RegisterOGRPG();
// OGRSFDriverRegistrar::GetRegistrar()->RegisterDriver( new OGRPGDriver() );
printf("postgresql %s\r\n",OGRSFDriverRegistrar::GetRegistrar()->GetDriverByName("PostgreSQL"));
НЕ ПОЛУЧАЮ, информацию что драйвер доступен (печатается: "(null)")
нет его и в списке:
Код: Выделить всё
//выведем список драйверов которые поддерживает GDAL
for(size_t i = 0; i < OGRSFDriverRegistrar::GetRegistrar()->GetDriverCount(); ++i)
{
OGRSFDriver *pDrv = OGRSFDriverRegistrar::GetRegistrar()->GetDriver(i);
const char* pszDrvName = pDrv->GetName();
printf(pszDrvName);
printf("\n");
}
НО печатается сообщение (!):
Код: Выделить всё
Sun Nov 25 00:38:46 2012: OGR: Auto register C:\postgres\gdal\bin\gdal\plugins\ogr_PG.dll using RegisterOGRPG.
Пытаюсь с этой ситуацией разобраться...
Буду благодарен за любые советы и рекомендации
Re: Программирование с помощью GDAL и MapInfo (+PostGRES)
Добавлено: 25 ноя 2012, 02:19
glax2020
Добрый вечер!
Может кто то из вас сможет мне посоветовать.
Предполагаю, что моя проблема может быть связана, что при компиляции с PostGRES происходит рассогласование версий.
1) Мне не удалось найти готовую бинарную сборку gdal 1.9.2.
2) Я нашел source версию gdal 1.9.2, но когда я выполняю полную компиляцию для Microsoft Visual Studio 2008,
то все проходит без ошибок, но НЕ генерируется к примеру "GDAL\bin" ???
ПРОБЛЕМА:
a) как с генерировать директорию "GDAL\bin" из source ?
b) как с генерировать "ogr_pg.dll" ?
3) Для работы я использовал GDAL "GDAL 2.0dev, released 2011/12/29", и базовые библиотеки от Baryshnikov Dmitriy,
которые как мне кажется происходят от gdal 1.9.2.
Причем "ogr_pg.dll" брал из "GDAL 2.0dev, released 2011/12/29" -- другого варианта, впрочем у меня и нет.
4) Я попробовал работать с gdal-19-1500-core.msi ( Generic installer for the GDAL core components;
http://www.gisinternals.com/sdk/Package ... er-6-2.zip )
НО там нет собственного драйвера "ogr_pg.dll", а также на сайте нет предложение загрузить драйвер для PostgreSQL.
Итого: из программы после оператора "RegisterOGRPG()", драйвер для PostgreSQL по прежнему не загружается и не перечисляется в списке доступных драйверов
Может у кого - нибудь из Вас, будут советы и предложения? Буду очень благодарен. Спасибо
Re: Программирование с помощью GDAL и MapInfo (+PostGRES)
Добавлено: 25 ноя 2012, 10:31
glax2020
Дмитрий Барышников писал(а):
2) С любыми данными GDAL работает одинаково через GDALDatasedt/OGRLayer. Т.е. нет специальных классов под PostGIS. А вот поддержку Postgres/PostGIS в виде драйвера компилировать надо - если хотите пользоваться.
Добрый день, Дмитрий!
Вы не смогли бы посоветовать, как можно скомпилировать или найти библиотеку файлов "gdal-1.9.2\lib\x86", которую Вы использовали в качестве исходников на конференции.
При компиляции source из "gdal-1.9.2" (
http://download.osgeo.org/gdal/) у меня во первых, не генерируется папка "\x86", и тот набор библиотек, который генерируется отличается по составу от вашего (например не генерируется gdal19d.dll, или к примеру geos_c.dll). Для генерации "source" использую проект "gdal-1.9.2\makegdal90.vcproj".
Спасибо.
С уважением, Александр
Re: Программирование с помощью GDAL и MapInfo (+PostGRES)
Добавлено: 25 ноя 2012, 11:30
Voltron
Ещё раз обращаю ваше внимание, что сваливание вопросов в кучу не способствует быстрому и качественному ответу.
- gdal19d.dll — отладочная версия, собирается в режиме Debug
- geos_c.dll — библиотека GEOS, собирается отдельно, не входит в состав GDAL.
- версии 2.0 и 1.9.2 это разные версии одной библиотеки. Используйте одну из них, не делайте сборную солянку
- на сайте есть как миниму 2 статьи, описывающих сборку GDAL из исходников, ознакомьтесь с ними
Re: Программирование с помощью GDAL и MapInfo (+PostGRES)
Добавлено: 25 ноя 2012, 12:17
glax2020
Посмотрел я статьи и в том числе
Сборка GDAL используя Visual C++ Express Edition 2008 и
FAQ - Installation and Building.
мне кажется я тоже примерно так делаю (тем текстам уже несколько лет). Проблема не в том в частности - что код не компилируется - код компилируется, и к примеру предлагаемая контрольный тест работает: "gdalinfo --version".
Проблема в том, что не генерируются "gdal\bin" папка и ее вложения. Причем НЕТ ССЫЛОК НА "gdal\bin" в проектных файлах для построителя: "makegdal90.vcproj" и "makefile.vc". -- Вот в этом хочется разобраться !!! Существует ли для версии gdal 9.2.1 полный source build с папками "gdal\bin", и включая драйвера, в том числе драйвер для PostGRES ???
В настоящее время я параллельно выполнил сборки gdal 9.2.1 для Microsoft Visual Studio 2008 и для Microsoft Visual Studio 2010 Express. А также собрал и под настроил программу, которая загружает и использует драйвер PostGRES тоже в компиляциях для Microsoft Visual Studio 2008 и для Microsoft Visual Studio 2010 Express (исходный текст это программа Baryshnikov Dmitriy с конференции).
Проблема как я и рассказывал ранее: нет драйвера PostGRES в списке доступных (хотя и грузится "ogr_pg.dll" в build "GDAL 2.0dev, released 2011/12/29").
Sun Nov 25 12:37:45 2012: OGR: Auto register C:\postgres\gdal\bin\gdal\plugins\ogr_PG.dll using RegisterOGRPG.
//выведем список драйверов которые поддерживает GDAL
for(size_t i = 0; i < OGRSFDriverRegistrar::GetRegistrar()->GetDriverCount(); ++i)
{
OGRSFDriver *pDrv = OGRSFDriverRegistrar::GetRegistrar()->GetDriver(i);
const char* pszDrvName = pDrv->GetName();
printf(pszDrvName);
printf("\n");
}
Я понимаю, что это разные сборки gdal 9.2.1 и "GDAL 2.0dev, released 2011/12/29", и вижу перед собою проблему и цель - собрать полноценную сборку gdal 9.2.1 с папками "gdal\bin", и включая драйвера, в том числе драйвер для PostGRES.
У меня складывается впечатление что в текущей версии source (
http://download.osgeo.org/gdal/ ), это не предусмотрено.
Поэтому у меня сейчас основной вопрос: как собрать полноценную сборку gdal 9.2.1 с папками "gdal\bin", и включая драйвера, в том числе драйвер для PostGRES. Это возможно ???
Спасибо. С уважением, Александр
Re: Программирование с помощью GDAL и MapInfo (+PostGRES)
Добавлено: 25 ноя 2012, 12:50
Voltron
glax2020 писал(а):Существует ли для версии gdal 9.2.1 полный source build с папками "gdal\bin", и включая драйвера, в том числе драйвер для PostGRES ???
Архив с исходниками содержит все полный исходный код GDAL, в том числе и код всех драйверов. Причин, по которым они (драйвера) могут не собраться не так много: либо у вас отсутствуют необходимые зависимости, либо вы отключили сборку драйвера на этапе конфигурирования.
Re: Программирование с помощью GDAL и MapInfo (+PostGRES)
Добавлено: 25 ноя 2012, 17:42
glax2020
директория "bin" появилась,
но нет директории "plugin", и не вижу скомпилированных драйверов,
но просматривается директория "gdal-1.9.2\ogr\ogrsf_frmts" где находятся драйверы, в том числе и для "PostGRES",
но непонятно как их компилировать, и что надо сделать, чтобы с генерировалась директория "plugin" ^(
Re: Программирование с помощью GDAL и MapInfo (+PostGRES)
Добавлено: 25 ноя 2012, 19:37
Дмитрий Барышников
Я собирал так:
http://gis-lab.info/qa/gdal19-vs2010.html
Причем исходники для 1.9.2
Там есть поддержка PostGIS.
По поводу bin/plugin - обычно все драйвера собираются монилитно в dll и папка plugin не используется. Я не встречал версии скомпилированной иначе, хотя функционал загрузки отдельных dll драйверов из папки plugin имеется.
А вообще нет единого подхода к компиляции GDAL - каждый разработчик делает как удобнее ему.
Re: Программирование с помощью GDAL и MapInfo (+PostGRES)
Добавлено: 25 ноя 2012, 21:55
glax2020
Мне удалось собрать желаемую сборку. Проверил, действительно и драйвер PostGRES загружается, и контакт с PostGRES базой данных происходит.
По поводу bin/plugin -- действительно, сам скомпилировал ogr_pg.dll, сам создал такую папку и положил в нее откомпилированный dll, ну а в вызове программы через известный параметр установил с нею связь, и это работает меня меня.
Советы участников в теме и Ваши мне помогли. Большое спасибо.
----
в дальнейшем у меня еще будут вопросы, в развитие этой темы.
1) Меня интересует вопрос компиляции gdal - библиотек, и связанного с ним программного кода, с Windows программами. С первой попытки не получилось.
2) По поводу gdal и стилей MapInfo - еще вероятно буду изучать ситуацию. При первой попытке, с обрезанием по рамке - сработало но криво - цвета хорошие, но регионы стали дробиться на квадратики, хотя в программе кажется удалил операторы, которые могли бы к этому приводить... Но когда без вырезки - то происходил полный облом и exception при обработке каждого объекта (пользовался оператором типа " poDstFeature->SetFrom(pSrcFeature);".
Вероятно со временем открою новую тему, специально по поводу gdal и стилей MapInfo.
Большое спасибо. С уважением, Александр
Re: Программирование с помощью GDAL и MapInfo (+PostGRES)
Добавлено: 25 ноя 2012, 22:54
Дмитрий Барышников
По сути вопросов я честно ничего не понял в чем проблема. Посему по вашим вопросам:
1) Отдельная тема - описание более конкретное. Что делали, примеры кода, скриншоты и т.п.
2) Отдельная тема - описание более конкретное. Что делали, примеры кода, скриншоты и т.п.