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

Денис Вицко (Все сообщения пользователя)

Поиск  Пользователи  Правила  Войти
Форум » Пользователи » Денис Вицко
Выбрать дату в календареВыбрать дату в календаре

Страницы: Пред. 1 ... 6 7 8 9 10 11 12 13 14 15 16 ... 142 След.
Ошибка при массовом нанесении объекта типа Подпись на карту, mapCreateSiteObject
 
[QUOTE]Сергей Викторович написал:
Запустили под отладчиком,
ошибку выдает стабильно.
Подскажите, что можно из сообщений отладчика понять, почему программа слетает?[/QUOTE]

В диалоге на последнем скриншоте нажать "Break" и смотреть стек вызовов (Call Stack). Там процедуры внутри ядра будут показаны адресами, а перед ними будут вызовы, откуда программа туда приходит из Вашего кода.

Судя по скриншотам падение происходит строго на 88 записи.
Если бы это было связано с утечкой памяти, ошибка была бы плавающая.
Попробуйте сделать обработку не в цикле, а только этой конкретной записи.
Если ошибка появляется на ней одной, надо смотреть содержимое, что из нее передается в MAPAPI.

Как предположение, bd_Zones.QSanitZonesDopIDObject.AsString может указывать на строку, не завершающуюся нулем, либо эта строка содержит не юникод-символы.

Также память может портиться где-то в другом месте программы, а падать уже в ГИС-ядре.
К примеру, на смену записи в DataSet добавлен обработчик. Когда Вы в цикле проходите по записям, выполняется код обработчика. Надо смотреть, что внутри.

Вариант проверить где именно портится память - в ГИС-ядре или в коде программы, - временно разделить обработку.
Переберите в цикле все площадные объекты карты и также как сейчас создайте подписи для их точек метрики (но без обращения к БД).
В mapAppendSemanticUnicode вместо bd_Zones.QSanitZonesDopIDObject.AsString передайте произвольный текст, чтобы не трогать БД.
Эффект тот же?
Ошибка при массовом нанесении объекта типа Подпись на карту, mapCreateSiteObject
 
На первый взгляд ошибок не видно.

1. Выполните запуск по отладчиком и при ошибке по памяти он покажет строчку кода, которая вызывает ошибку.

2. Что за библиотека GISACCESS32.DLL? Имеется в виду gis32acces.dll? Выполните запуск с включенным диагностическим протоколом ядра и пришлите его нам.
[URL=https://gisweb.ru/forum/messages/forum2/topic11726/message90907/11726-faq#message90907]Как включить протокол[/URL].


Как всегда рекомендую добавить проверку кодов возврата.

Такой код тяжело читать, а потом будет тяжело отлаживать.
Рекомендую дублирующийся код вынести в отдельную функцию:
Скрытый текст
Сертифицированная версия (ГИС Сервер SE), Сертифицированная версия (ГИС Сервер SE)
 
[QUOTE]Сергей Осокин написал:
Здравствуйте! Попытался запустить log_table.sql для создания журнала изменений. Выдало сообщение (на картинке) и ничего не создала.[img]e:\Screenshot_20230814_120922.png[/img][/QUOTE]

Скрипт перед созданием/пересозданием таблицы сначала пытается удалить все объекты, которые он будет создавать
Судя по всему, скрипт отработал без ошибок, так как на скриншоте только предупреждения о том, что скрип не удалил старые триггеры, так как их на момент запуска скрипта и не было

Обновите в pgAdmin в дереве объектов БД перечень таблиц в схеме public
Таблица журнала (если Вы не модифицировали скрипт) называется pgis2map_dbchanges_log и находится в схеме public
Проблема с разработкой прикладной задачи MVS 2019 C++
 
Нет, пример CmpTask64.sln - это прикладная задача в виде динамической библиотеки.
Вы, судя по коду, начали писать автономное приложение, значит в результате у Вас должен получиться исполняемый файл *.exe.
Для запуска этого *.exe ГИС Панорама не требуется.

Сразу несколько замечаний.
1. Старайтесь всегда проверять код возврата функций.
2. В пункте 3 надо будет задать параметры вашей системы координат (по вашему условию - со смещением и прочим)
3. В пункте 4 - выгрузка фрагмента растра по габаритам ячейки вашей новой номенклатуры. Это по идее должно выполнятся в цикле по всем ячейкам. Но в любом случае надо задать габариты (frame).
4. Для сборки Вам потребуется прилинковать статические библиотеки mapacces и mapices или надо вызывать API-функции, загружая библиотеки с помощью LoadLibrary. В любом случае для разработки автономных ГИС-приложений используйте библиотеки ГИС-ядра [URL=https://gisinfo.ru/download/?id=291]из состава GIS ToolKit[/URL] (там вместе с ними есть и библиотеки для статической линковки gis64*.lib). А во время выполнения вашего *.exe рядом с ним должны находится gis64*.dll ГИС-ядра.
Сертифицированная версия (ГИС Сервер SE), Сертифицированная версия (ГИС Сервер SE)
 
тег img - это вставка ссылки на рисунок
разместите, пожалуйста, ваш скриншот на фото-хостинге, например [URL=https://postimages.org/]тут[/URL], и добавьте сюда ссылку в теге img
пока, к сожалению, ответить нечего, мы картинку не видим
Проблема с разработкой прикладной задачи MVS 2019 C++
 
[QUOTE]Сергей написал:
Объясните подробнее как тогда добавить более понятным способом кнопку непосредственно написав подобным образом код? Я думал, что на основе данного проекта-примера cmptask64.sln можно дополнить панель с инструментами под свои задачи, написав новый класс для кнопки и так далее.[/QUOTE]

В составе SDK есть пример разработки задачи с среде Visual Studio - pantask\visualc
Собрав проект Вы получите работающую библиотеку.
В этом примере показано, как добавить панель, добавить на нее кнопки, для кнопок добавить обработчики.
Показан пример трех видов взаимодействия с окном карты: выбор объекта карты, нанесение линии, выбор точки на карте.

Вы по аналогии пишите свою задачу.

[QUOTE]Сергей написал:
И то есть сделать таким образом утилиту с моими задачами нет возможности?[/QUOTE]

Есть все возможности.
Я лишь указал на то, что писать в прикладной задаче функционал, который и так штатно есть в ГИС Панорама, - это лишняя работа.
Это касается только открытия растров в Вашем случае. Остальное Вы будете реализовывать в свое задаче.

PS
Написание прикладных задач - это более сложный процесс, чем написание собственной утилиты.
Для начала Вы можете попробовать сделать простое приложение (можно даже консольное), которое само откроет данные, обработает их и закроет.

[QUOTE]Денис Вицко написал:
Задача примерно будет сводиться к применению следующий MAPAPI-функций:

1. Открыть первый растр -  [URL=http://help.gisinfo.ru/showresult.php?file=mapapi.htm&search=mapOpenAnyDataPro#1]mapOpenAnyDataPro[/URL]
2. Последовательно добавить к нему все остальные -  [URL=http://help.gisinfo.ru/showresult.php?file=mapapi.htm&search=mapAppendAnyDataPro#1]mapAppendAnyDataPro[/URL]
3. Установить параметры проекции документа для отображения -  [URL=http://help.gisinfo.ru/showresult.php?file=mapapi.htm&search=mapSetDocProjectionPro#1]mapSetDocProjectionPro[/URL]
4. Сохранить растр по габаритам ячейки сетки новой номенклатуры (по каждой ячейке) - в зависимости от выходного формата файлов:
   - Сохранить карту в формате RSW -  [URL=http://help.gisinfo.ru/showresult.php?file=mappicex.htm&search=LoadDocumentImageToRswFile#1]LoadDocumentImageToRswFile[/URL]
   - Сохранить карту в формате BMP, JPEG, PNG -  [URL=http://help.gisinfo.ru/showresult.php?file=mappicex.htm&search=LoadDocumentImageToPictureFile#1]LoadDocumentImageToPictureFile[/URL]
   - Сохранить карту в формате TIFF -  [URL=http://help.gisinfo.ru/showresult.php?file=mappicex.htm&search=LoadDocumentImageToTiffFile#1]LoadDocumentImageToTiffFile[/URL]
5. Закрыть данные -  [URL=http://help.gisinfo.ru/mapapi.htm#mapCloseData]mapCloseData[/URL] [/QUOTE]

Далее, когда процесс обработки будет отлажен, можно будет его оформить в виде прикладной задачи.
Проблема с разработкой прикладной задачи MVS 2019 C++
 
Если Вы пишете прикладную задачу, которая будет работать "внутри" оболочки ГИС Панорама, зачем дублировать функции оболочки?
Открывайте данные штатными средствами, а Ваша прикладная задача уже пусть работает с тем, что открыто.
В этом суть разработки прикладных задач - использовать штатные возможности ГИС Панорама, а не дублировать их, и добавлять только новый функционал.

Иначе будет проще написать новое отдельное приложение, которое само откроет данные, установит систему координат, выполнит сохранение растров по новой разграфке и закроет данные.
Проблема с разработкой прикладной задачи MVS 2019 C++
 
[URL=https://gisinfo.ru/download/?id=279]обновили SDK14 на сайте[/URL]
Проблема с разработкой прикладной задачи MVS 2019 C++
 
[QUOTE]Сергей написал:
[B]private: [/B]
HMAP mapOpenAnyDataPro(const WCHAR* mapname, long int mode, long int* error, const WCHAR* password, long int size);[/QUOTE]

Для чего объявлять private-метода класса с тем же именем, что и API-функция?
mapOpenAnyDataPro - функция MAPAPI, для ее вызова необходимо подключить заголовочный файл с ее описанием (в данном случае это mapapi.h) и прилинковать статическую библиотеку (mapacces64.lib).
Проблема с разработкой прикладной задачи MVS 2019 C++
 
[QUOTE]Сергей написал:
Могу ли я получить от кого-то пример реализации с использованием mapOpenAnyDataPro?[/QUOTE]

Уточните, какие сложности у Вас вызвал вызов mapOpenAnyDataPro?

В SDK14 есть поддиректория с примерами mapexam, в файле  \mapexam\mapexam50.cpp описан вызов указанной функции:

[QUOTE]
int CallApplication(HMAP hMap, HWND handle)
{
 const WCHAR * out = L"c:\\Panorama11\\Data\\1.sitx";

 long int error = 0;

HMAP hmap = mapOpenAnyDataPro(out, 0, &error, 0, 0);
 
 if (error != 0)
   {
     WCHAR message[64];
     swprintf(message, L"Код ошибки = %u", error);
     ::MessageBoxW(0, message, out, MB_OK);
   }

 if (hmap != 0)
   mapCloseData(hmap);

 return 0;
}
[/QUOTE]
Страницы: Пред. 1 ... 6 7 8 9 10 11 12 13 14 15 16 ... 142 След.



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

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