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

Вылетает в конце mapBuildRaster() и mapBuildRsw()

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: 1
RSS
Вылетает в конце mapBuildRaster() и mapBuildRsw()
 
Добрый день!
Тестируем на устройстве с 512Мб RAM и без SWAP.
При переводе растра в вектор в конце выполнения функции mapBuildRaster() программа вылетает на последних процентах (99%).
На ПК для разработки все проходит на "ура", только в конце на 99% происходит задержка, видимо для создания объектов.

Наши мысли склоняются в недостаточной свободной памяти на момент окончания функции, для ее завершения.

Есть советы или известны ли этапы функции перевода из растра в вектор?
 
Здравствуйте!

В текущей версии ГИС Конструктор отсутствует функция mapBuildRaster.
Функция mapBuildRsw входит в состав API, но предназначена для обратной задачи -  создания растра качеств по векторной карте:
Код
 // Построение растра качеств по векторной карте на заданный
 // участок района работ
 // При ошибке возвращает ноль
 // hMap    - исходная карта для построения растра,
 // rstname - полное имя создаваемого растра,
 // filtername - полное имя служебного текстового файла
 //   Вместе с картой должен располагаться фильтр объектов -
 //   служебный текстовый файл MАP2RSW.INI, содержащий перечень кодов
 //   объектов, используемых при построении растра
 // mtrparm - параметры создаваемого растра,
 // handle   - идентификатор окна диалога, которому посылаются
 // сообщения о ходе процесса :
 //   0x0581 - сообщение о проценте выполненных работ (в WPARAM),
 //   если процесс должен быть принудительно завершен, в ответ
 //   должно вернуться значение 0x0581.
 // Если handle равно нулю - сообщения не посылаются


_MAPIMP long int _MAPAPI mapBuildRsw(HMAP hMap, const char *rstname, const char *filtername,
                                     BUILDMTW *mtrparm, HWND handle);
_MAPIMP long int _MAPAPI mapBuildRswUn(HMAP hMap, const WCHAR *rstname, const WCHAR *filtername,
                                       BUILDMTW *mtrparm, HWND handle);
 
Александр Савелов, к сожалению я перепутал.
Вышеописанная проблема с функцией mtrRstToVector() и mtrMtqToVector().
Есть информация о принципе работы функции, так как делали проверку даже на маленьких картах, где < 10 объектов, что не дало результатов.
 
Это сложные функции, которые вызываются из соответствующих задач в ГИС Панорама.
Они не являются стандартными возможностями ГИС Контструктор и не входят в стандартные тактико-технические требования - http://gistoolkit.ru/download/doc/gisdesigner_tt.pdf
Для построения векторных объектов формируется большой объем служебных массивов. Нехватка памяти может приводить к аварийному завершению программы.
Код
// Преобразование растра в вектор
// hmap       - основная карта
// hsit       - векторная карта в которую пишутся объекты
// rstnum     - номер исходного растра, добавленного к карте
// isfilter   - признак фильтрации точек, лежащих на одной прямой (0..1)
// hselect    - содержит созданные объекты (если = 0, то не заполняется)
// classes    - распознаваемые классы
// classcount - количество классов
// border     - объект, ограничивающий область преобразования растра в вектор
// iscuthole  - признак вырезания подобъектов
//              если = 0, то внутренний объект всегда имеет больший номер (Key), чем внешний
// handle     - идентификатор окна диалога, которому посылается cообщение 0x0581
//              в wParam - процент выполненной обработки
//              в lParam - адрес строки с названием выполняемого этапа
//              Если процесс должен быть принудительно завершен, в ответ
//              должно вернуться значение 0x0581.
// fcallback  - функция обратного вызова для сообщения статуса выполнения (процентов),
//              это функция типа EVENTCALL (см. описание в maptype.h), первым параметром
//              в нее будет возвращено значение eventparam, вторым - код сообщения
//              (0x0581),
//              в третьем параметре  - процент выполненной обработки
//              в чевертом параметре - адрес строки с названием выполняемого этапа
//              Если процесс должен быть принудительно завершен, в ответ
//              должно вернуться значение 0x0581.
// eventparam - параметр, передаваемый в функцию обратного вызова для идентификации
//              отклика на вызывающей стороне.
// Если handle (или fcallback) равно нулю - сообщения не посылаются.
// Текст передается в кодировке Unicode (UTF16).
// В случае ошибки возвращает 0.
long int MTREXPORT mtrRstToVector(HMAP hmap, HSITE hsit, long int rstnum, long int isfilter,
                                  HSELECT hselect, MTRCLASS *classes, long int classcount, HOBJ border,
                                  long int iscuthole, HMESSAGE handle);

long int MTREXPORT mtrRstToVectorCallBack(HMAP hmap, HSITE hsit, long int rstnum, long int isfilter,
                                  HSELECT hselect, MTRCLASS *classes, long int classcount, HOBJ border,
                                  long int iscuthole, EVENTCALL fcallback, void *eventparam);
 
Oleg Belenkov, Уменьшили карту до, примерно, 1x1 км, шаг создания растра 100м, но все равно выкидывает.
Пробовали векторизовать растр зоны видимости 100х100м с шагом матрицы высот 25м - результат идентичный.
Так же протестировали на машине, которая соответствует ТТТ, маленькие карты  - все отлично, но при обработке многолистовой карты, так же завершается аварийно.
Изменено: Алексей Елохин - 14.02.2020 10:20:57
Страницы: 1
Читают тему (гостей: 1)



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

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