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

Python и gisdesigner. Появился баг.

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: 1 2 След.
RSS
Python и gisdesigner. Появился баг.
 
При обновлении gisdesigner c версии 3.1.* на 13.4.0.3 перестали работать обвязки на mapapi для питона. Есть подобная функция - mapIsMapHandleCorrect возвращает 1.

Код
HMAP mapOpenDataUnExt(wstring name, long int mode = GENERIC_WRITE) {
    vector<WCHAR> mapVec = convertWstringToWchar(name);
    long int error = 0;
    HMAP hMap = mapOpenAnyData(mapVec.data(), mode, &error);
    if (!mapIsMapHandleCorrect(hMap)) {
        throw std::runtime_error("Open map data failed");
    }

    cout << "cpp is correct: " << mapIsMapHandleCorrect(hMap) << endl; 

    return hMap;
}


На питоне это выглядит так и panorama.is_map_handle_correct стала возвращать 0

Код
hmap = panorama.open_data(alias)
print('open data: ', hmap, panorama.is_map_handle_correct(hmap)


Вопрос. Есть ли у вас чейнджлог и можно ли понять что принципиально изменилось у вас коде? Возможно добавлена работа с умными указателями как вариант? Если так понять проблему нельзя, то можно ли остаться на версии 3.1.* в которой все работало корректно?
 
Здравствуйте.

Провели тестирование присланного фрагмента кода на ГИС Конструктор для Qt Designer x64 (версия 13.4.0.3, Qt 4, Qt 5, платформа x64, ОС "Astra Linux Special Edition", релиз "Смоленск") при открытии локальной карты Ногинск из состава инсталляции. Функция mapIsMapHandleCorrect в обоих случаях вернула 1.

Список изменений для версии указывается в файле readme.txt, который входит в состав инсталляции.
При разработке приложений можно использовать удобную для Вас версию ГИС Конструктора.

 
Цитата
Константин Ганюшин написал:
Здравствуйте.  Провели тестирование присланного фрагмента кода на ГИС Конструктор для Qt Designer x64 (версия 13.4.0.3, Qt 4, Qt 5, платформа x64, ОС "Astra Linux Special Edition", релиз "Смоленск") при открытии локальной карты Ногинск из состава инсталляции. Функция mapIsMapHandleCorrect в обоих случаях вернула 1.  Список изменений для версии указывается в файле readme.txt, который входит в состав инсталляции.
При разработке приложений можно использовать удобную для Вас версию ГИС Конструктора.

Можно ли получить версию Qt Designer 13.1.*?
 
Добавил тестовую функцию и сделал на нее обвязки.
Код
void test(HMAP m) {
    cout << "Test: " << (void *) m  << "zz: " << mapIsMapHandleCorrect(m) << endl;
}


Вызов из кода на питоне:

Код
alias = panorama.build_alias_name('localhost', 2047, 'Layers_4f62c948-1a86-11ea-9cd2-b271382053e7_map_map.sit')
connNumber = panorama.open_connection('localhost', 2047, 'User1', '1')
hmap = panorama.open_data(alias)
panorama.test(hmap)


И в результате:

Код
Is connected: 0x6630544604f0 Error: 0
Test: 0x7fff8feab470zz: 0


Кто-то перезаписал указатель на HMAP...
 
Уточните, пожалуйста, на каких данных или примерах, проявляется данная ошибка на крайней версии?
 
Цитата
Константин Ганюшин написал:
Уточните, пожалуйста, на каких данных или примерах, проявляется данная ошибка на крайней версии?

Вышлите, пожалуйста, версию 13.1.1. Хотя бы убедиться, что откат версии решает проблему.
 
Нашел версию 13.1.1.41. у себя. Откат решил проблему.
 

Провели тестирование с открытием данных с ГИС Сервера с помощью следующего кода:

Код
  const char *host = "localhost";
  int port = 2047;
  int connectNumber = mapOpenConnect(host, port);

  TMCUSERPARM userparm;
  StrCopy(userparm.Name, "User1", sizeof(userparm.Name));

  char password[64];
  StrCopy(password, "1", sizeof(password));

  typedef long int(WINAPI * STRINGTOHASH)(const char *source, char *target, long int size);
  HINSTANCE instance = 0;
  STRINGTOHASH svStringToHash;
  svStringToHash = (STRINGTOHASH) mapLoadLibrary("libqdmapscena.so", &instance, "svStringToHash");

  if (svStringToHash)
  {
    (*svStringToHash)(password, userparm.Password, sizeof(userparm.Password));
    mapFreeLibrary(instance);
  }

  mapRegisterUserEx(connectNumber, &userparm);

  char aliasname[1024];
  mapBuildAliasName(host, port, "Noginsk", aliasname, sizeof(aliasname));

  HMAP hMap = mapOpenData(aliasname);

  std::cout << mapIsMapHandleCorrect(hMap) << std::endl;

  mapCloseData(hMap);
  mapCloseConnect(connectNumber);

Указанное поведение при тестировании не повторилось. Пожалуйста, уточните на каких данных проявляется данное поведение? При необходимости модифицируйте данный код для воспроизведения проблемы при тестировании.

 
Цитата
Константин Ганюшин написал:
Указанное поведение при тестировании не повторилось. Пожалуйста, уточните на каких данных проявляется данное поведение? При необходимости модифицируйте данный код для воспроизведения проблемы при тестировании.

Ну я приблизительно так и работаю. Вы не совсем поняли, возможно. Я в заголовке темы указал, что я сделал биндинги на мапапи для  питона и я вызываю ваши функции из питоновского скрипта. Для создание биндингов использовалась либа pybind11 - https://pybind11.readthedocs.io/

Все корректно работает на версии 3.1.1.41, начиная с 13.4.0.2 перестало - на других я не тестировал, не было надобности обновлять.  Что-то стало происходить с  HMAP;  // УКАЗАТЕЛЬ НА TMapAccess.

Мне сейчас бы понять могу ли я остаться на работающий версии или если обновлять ГИС Сервер, и ГИС ВебСервис, то нужно поднимать версию  ГИС Конструктор для Qt Designer.
 
Для диагностики данной проблемы нужно ее воспроизвести с помощью кода на С++, либо с помощью примера из состава инсталляции.
Тестовый пример mapgisserver  из состава инсталляции предназначен для демонстрации работы с ГИС Сервером.
Страницы: 1 2 След.
Читают тему (гостей: 1)



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

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