На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты

Вопрос по работе с классификатором и Iml-бибилиотеками

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: 1
RSS
Вопрос по работе с классификатором и Iml-бибилиотеками
 
Добрый день.

Вопрос такой. Есть ли разница по работе с файлом классификатора с использованием MAPAPI, когда функционал реализован в динамической библиотеке?

Столкнулся со следующим:
1. Есть приложение, которое загружает библиотеку(плагин Qt), в которой реализована работа с картой и классификатором и которая динамически линкуется с qdmapacces;
2. Файл классификатора положили в /tmp, библиотеку imlname.iml64, указанную в классификаторе - ту да же;
3. Создаю карту в /tmp и пытаюсь указать для нее классификатор, используя функцию mapCreateSiteUn;
4. При вызове данной функции выскакивает сообщение, что "Библиотека не найдена - /tmp/imlname.iml64", хотя он там есть;
5. Создаю тестовое приложение, которое аналогично плагину динамически линкуется с qdmapacces;
6. Из этого приложения аналогично п.3 создаю карту;
7. Карта создается и никаких сообщений о том, что библиотека не найдена не появляется.

В чем может быть проблема?

Спасибо.
 
Здравствуйте!

Функции MAPAPI используются одинаково как из приложения, так и из библиотеки.
Дополнительно привожу последовательность, в которой ГИС-ядро производит поиск библиотек iml при открытии карты :
- рядом с открываемым файлом классификатора;
- в каталоге, где хранятся общие классификаторы, установленным с помощью функции mapSetCommonRscPath (mapapi.h):
Код
  // Установить путь к общим файлам классификаторам (RSC)
  // При ошибке возвращает ноль

_MAPIMP const char* _MAPAPI mapSetCommonRscPath(const char *rscpath);
_MAPIMP long int _MAPAPI mapSetCommonRscPathUn(const WCHAR *rscpath);
- по пути приложения, установленным с помощью функции mapSetCommonRscPath (mapapi.h):
Код
  // Установить/Запросить путь к директории приложения, где
  // располагаются вспомогательные файлы для функционирования
  // ГИС-ядра (библиотеки ядра, библиотеки отрисовки программируемых знаков *.iml,
  // файлы базы данных epsg.*, wmslist_xx.xml, xml-схемы и другие файлы)
  // Рекомендуется устанавливать при запуске приложения

_MAPIMP void _MAPAPI mapSetPathShellUn(const WCHAR *path);
_MAPIMP void _MAPAPI mapGetPathShellUn(WCHAR *path, long int size);
_MAPIMP const WCHAR * _MAPAPI mapGetPathShellUnicode();

_MAPIMP void _MAPAPI mapSetPathShell(const char *path);
_MAPIMP const char* _MAPAPI mapGetPathShell();
_MAPIMP void _MAPAPI mapGetPathShellEx(char *path, long int size);
 
Уже и mapSetCommonRscPathUn, и mapSetPathShellUn установил по пути, где лежит и классификатор, и iml к нему. Но все равно при вызове mapCreateSiteUn из моего qt-шного плагина выдается сообщение, но теперь уже, что по установленному пути нет iml-файла.

Можно как-то продиагностировать, что не так?

Спасибо.
 
Здравствуйте!

Предлагаю попробовать следующие варианты:
- подготовить маленький автономный пример Qt-плагина, который Вы создаете, чтобы мы могли повторить у себя данное поведение;
- выполнить отладку целого приложения с помощью утилиты strace и проанализировать системные вызовы на предмет поиска iml-библиотеки:
Код
sudo strace -f <имя_приложения> &> /tmp/strace.log
 
Здравствуйте, Александр.
Сейчас попробую.

Спасибо.
 
Сделал пример на основе Qt-примеров plugandpaint. Ситуация аналогичная.

Есть смысл куда-то пример выложить или прислать?
 
Да, конечно - можно выложить пример здесь на форуме (текстом или ссылкой).
 
Эта проблема касается не всех iml-библиотек, как показали проведенные тесты. Со многими iml-библиотеками нет проблем, если работать с классификатором из плагина.

Но в некоторых случаях, как раз с которым столкнулся я, такая проблема может возникнуть.

Найдено 2 способа решить эту проблему:
1. явно прилинковать libqdmapaccess.so к исполняемому файлу приложения(меня это не устраивает).
2. явно прилинковать к iml libqdmapaccess.so (мне помог данный вариант).

Спасибо за помощь Александру.
Изменено: Сергей - 16.08.2019 15:28:59 (орфографические ошибки)
Страницы: 1
Читают тему (гостей: 3)



© КБ Панорама, 1991-2021

Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности