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

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

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

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 116 След.
XIMAGEDESC - получение изображения
 
[QUOTE]Alexander Volovikov написал:
А есть ли еще другие примеры для получения изображения?[/QUOTE]

К сожалению, из кросс-платформенных примеров дали Вам всё что было.

Попробуйте в Linux использовать экранный вид карты (VT_SCREEN = 1), а не принтерный (см. [URL=http://help.gisinfo.ru/showresult.php?file=mapapi.htm&search=mapSetViewType#1]mapSetViewType[/URL]).

Дело в том, что для отрисовки карты в принтерном виде в Линукс требуется дополнительная обработка "снаружи", для чего используются обратные функции, которые либо реализованы в компоненте QDMapView (если используются компоненты ГИС Конструктор для Qt Creator), либо такие функции необходимо реализовать самостоятельно (реализацию можно посмотреть в проекте mapqtdraw [URL=https://gisinfo.ru/download/download_linux.htm#13]в SDK для linux[/URL]).
В случае экранного вида карты это не требуется.

В Windows самостоятельная обработка отрисовки карты в принтерном виде не требуется.
Ошибка конвертации Bmp -> Rsw, Используется функция LoadBmpToRstByPlace из mappicex.h
 
[QUOTE]Алесь Побожный написал:
[DllImport("gis32picex.dll", EntryPoint = "LoadBmpToRstByPlace", CharSet = CharSet::Ansi, ExactSpelling = true, CallingConvention = CallingConvention::StdCall)]
     static long int LoadBmpToRstByPlace(int hmap, int handle,
        String ^bmpname,
        String ^rstname,
        double scale,
        DFRAME *frame); DFRAME *frame;[/QUOTE]

А нельзя в С++/Сli воспользоваться штатным описанием функции из mappicex.h? Обязательно надо писать обертку в виде [DllImport]?
Специалистом в .Net не являюсь, поэтому не могу сказать, насколько корректно String^ передавать в неуправляемый код в качестве указателя на массив символов.
Тут не должен применяться маршалинг по аналогии с C#?

Написанный Вами прототип будет работать только в x32 приложениях. Компилировать его надо будет именно как x32, AnyCPU использовать нельзя.
Рекомендую типы хэндлов ([B]H[/B]MAP,[B] H[/B]OBJ, [B]H[/B]SITE, [B]H[/B]MESSAGE и др.) объявлять как IntPtr, так как в x64 они будут занимать 8 байт, а в x32 - 4 байта.
Имена библиотек объявить константой, определяемой через дефайн, соответствующий определённой разрядности собираемого приложения ("gis32picex.dll"/"gis64picex.dll").

Далее самой главное - вызов.
[QUOTE]// Конвертор Bmp -> Rsw
//    [B]hmap - идентификатор открытых данных[/B]
//    handle  - диалог визуального сопровождения процесса обработки;
//    bmpname - имя BMP-файла;
//    rstname - имя RST-файла;
//    scale   - масштаб создаваемого растра;
//    frame   - габариты растра(в метрах на местности)
//    При ошибке возвращает ноль
//
//    Диалогу визуального сопровождения процесса обработки посылаются
//    сообщения:
//    -  (WM_PROGRESSBAR) Извещение об изменении состояния процесса
//       WPARAM - текущее состояние процесса в процентах (0% - 100%)
//       Если функция-отклик возвращает WM_PROGRESSBAR, то процесс завершается.
//
//    -  (WM_ERROR) Извещение об ошибке
//       LPARAM - указатель на структуру ERRORINFORMATION
//       Структура ERRORINFORMATION описана в picexprm.h,
//       WM_PROGRESSBAR и WM_ERROR - в maptype.h

_PICIMP long int _PICAPI LoadBmpToRstByPlace(HMAP hmap, HMESSAGE handle,
                                      const char * bmpname,
                                      const char * rstname,
                                      double scale,
                                      DFRAME *frame);

_PICIMP long int _PICAPI LoadBmpToRstByPlaceUn( HMAP Map, HMESSAGE Handle,
                                       const WCHAR * BmpName,
                                       const WCHAR * RstName,
                                       double scale,
                                       DFRAME *frame);[/QUOTE]

Параметр hmap - это идентификатор открытых данных. Единицей он никак быть не может, так как является идентификатором экземпляра класса внутри ГИС-ядра, работающего с открытой картой.
HMAP Вы получаете, когда отрываете пространственные данные, например, с помощью функции
[QUOTE] // Открыть данные с автоматическим определением их типа
 // (векторные,растровые,матричные...)
 // name - имя открываемого файла (MAP, SIT, MTW, RSW, MPT) в кодировке UNICODE
 // mode - режим чтения/записи (GENERIC_READ, GENERIC_WRITE или 0)
 // GENERIC_READ - все данные только на чтение, при этом не открываются
 // файлы \Log\name.log и \Log\name.tac - протокол работы и журнал транзакций
 // error - после выполнения функции переменная содержит код ошибки
 //        (когда HMAP равен 0) или 0; коды ошибок приведены в maperr.rh
 // password - пароль доступа к данным из которого формируется 256-битный код
 //            для шифрования данных (при утрате пароля данные не восстанавливаются)
 // size     - длина пароля в байтах !!!
 // Передача пароля необходима, если при создании карты он был указан.
 // Если пароль не передан, а он был указан при создании,
 // то автоматически вызывается диалог scnGetMapPassword из mapscena.dll (gisdlgs.dll)
 // Если выдача сообщений запрещена (mapIsMessageEnable()), то диалог
 // не вызывается, а при отсутствии пароля происходит отказ открытия данных
 // После завершения использования карты необходимо освободить ресурсы функцией mapCloseData
 // При ошибке возвращает ноль

_MAPIMP HMAP _MAPAPI mapOpenAnyDataPro(const WCHAR *name, long int mode, long int *error,
                                      const WCHAR *password, long int size);[/QUOTE]

[QUOTE]Алесь Побожный написал:
Пути к папкам библиотек x32/x64 лежат в системных переменных в path.Если локально для программы - в папках Debug/Release актуальной версии программы.[/QUOTE]

Проверьте, не подгружаются ли в процесс одновременно библиотеки из разных мест расположения.
Такое возможно, например, когда в приложении есть использование компонентов - тогда gisaccess.dll будет загружена не процессом, а библиотекой *.ocx, а все остальные библиотеки будут подгружаться процессом [URL=https://docs.microsoft.com/ru-ru/windows/win32/dlls/dynamic-link-library-search-order]по правилам Windows[/URL].
Использование библиотек ГИС-ядра, находящихся в разных местах, равно как и использование библиотек ГИС-ядра из разных сборок, - недопустимо и может приводить в AccessViolation.
Применяйте функцию mapSetPathShellUn в самом начале работы приложения:

[QUOTE]// Установить/Запросить путь к директории приложения, где
// располагаются вспомогательные файлы для функционирования
// ГИС-ядра (библиотеки ядра, библиотеки отрисовки программируемых знаков *.iml,
// файлы базы данных epsg.*, wmslist_xx.xml, xml-схемы и другие файлы)
// Рекомендуется устанавливать при запуске приложения

_MAPIMP void _MAPAPI mapSetPathShellUn(const WCHAR* path);[/QUOTE]
Ошибка конвертации Bmp -> Rsw, Используется функция LoadBmpToRstByPlace из mappicex.h
 
Прототип API-функции используется из mappicex.h или вы сами его объявили?
Покажите код вызова (полностью - включая как объявляются переменные, передаваемые в функцию).
[QUOTE]Алесь Побожный написал:
язык С++/Сli[/QUOTE]
Приложение .Net, я так полагаю?

Где располагаются библиотеки ГИС-ядра?
Вы используете только MAPAPI-вызовы или еще и компоненты GisToolKit Active (регистрируется ли библиотека *.OCX в системе)?

и уточните, пожалуйста версию GisToolKit Active 14 (точная версия указана в дистрибутиве, откуда проводилась инсталляция - посмотреть можно либо при запуске setup.exe, либо прочитать в шапке файла readme.txt), а также версию библиотек ГИС-ядра - gis64acces.dll и gis64picex.dll (посмотреть можно в свойствах файла).
XIMAGEDESC - получение изображения
 
Добрый день!

[QUOTE]Alexander Volovikov написал:
Функция mapViewImageToXImage возвращает в указатель xImage.Point - массив заполненный 255 значением (белый). Причем, я пробовал все карты, которые входят в комплект. Под Windows этот же код, работает без нареканий.[/QUOTE]

Используемые Вами функции работают корректно - и в Windows, и в Linux.
[URL=https://gisweb.ru/forum/messages/forum2/topic11943/message91063/11943-c_-linux_-izobrazhenie-karty#message91063]Ранее я Вам давал пример[/URL] их использования в приложении на Qt.
Прикладываю это же приложение, адаптированное под Linux.
Изображение карты формируется и сохраняется в BMP без проблем.

Исследовать возможности технологий .Net по работе с неуправляемым кодом и использованием стандартов API в Linux мы не имеем возможности.
Надеемся на понимание.

Не знаю, чем вызван столь необычный стек технологий для разработки под Linux, отговаривать Вас я не берусь, но, как я уже как-то Вам говорил, помочь Вам с C# и тем более с C# в Linux мы не сможем.

PS
Для сведения - про использование .Net Core в Astra SE:
[URL=https://wiki.astralinux.ru/pages/viewpage.action?pageId=63802854]Использование стороннего программного обеспечения в аттестованных информационных системах, функционирующих под управлением ОС Astra Linux Special Edition[/URL]
Не обновляются данные с ГИС Сервера, mvMap.AdjustData
 
Данного фрагмента не достаточно для анализа того, что происходит в приложении.
Пришлите полностью пример.
Не обновляются данные с ГИС Сервера, mvMap.AdjustData
 
Спасибо за сообщение.
Руководство поправим. Программа gisadmin64.exe в состав ГИС Сервер больше не входит и ее работа не поддерживается.
Функционал данной программы теперь полностью в web-приложении ГИС Администратор (см. раздел "Состояние ГИС сервера"), причем это теперь доступно удаленно - для всех у кого есть доступ к web-приложению.

[QUOTE]Сергей Викторович написал:
И еще при описании
MapObj1.Semantic.SemanticValue[2]
написано что оно возвращает значение семантики,
понятнее было бы, если написали: предназначено для редактирования значения семантики.[/QUOTE]

Согласен. Не сразу понятно, что данное свойство работает и на чтение, и на запись.
Поправим.
Спасибо!
Не обновляются данные с ГИС Сервера, mvMap.AdjustData
 
[QUOTE]Сергей Викторович написал:
Надеемся на команду form_main.mvMap.AdjustData;

Версия GisToolKit Free 14.1.1.0
Версия ГИС Сервера 8.3
[/QUOTE]

При таком разрыве в версиях клиента и сервера не стоит сильно надеяться на корректную работу AdjustData.

Логика Вашей программы очень сильно фрагментирует хранение данных на сервере.
В связи с тем, что Вы каждый раз сначала удаляете все семантики найденного объекта, затем заново их заполняете, объект в хранилище не может быть помещен на то же место и всегда дописывается в новую область.
С времени версии 8.3 было великое множество изменений и в протоколах взаимодействия клиента с сервером, и в системе хранения данных на сервере.
Версия 8.3 просто физически может не знать о том, что от нее просит команда AdjustData, поступившая от клиента 14-ой версии, и вполне возможно, клиент 14 версии не получает полностью блоки данных.
В Вашем случае (сервер версии 8 и клиент версии 14) команда AdjustData скорее вредит, чем помогает.
Без нее и сохранение объекта и поиск будут выполняться по локальному кэшу данных и подобных ошибок быть не должно. Правда поиск не найдет и объектов, сохраненных на ГИС Сервере из других клиентских приложений. Периодически ГИС-ядро само выполняет команду AdjustData, так что даже если Вы не будете ее вызывать, рано или поздно всё равно получите ту картину, что имеете.

Отсюда два совета:

1. Обновить ГИС Сервер до актуальной версии 10.3.

2. При необходимости обновления семантик объекта выполнять именно их обновление (найти нужную у объекта и обновить значение), а не удаление и добавление семантик заново. В этом случае в момент сохранения объекта, если новые значения семантик не превышают по длине предыдущие, данные будут сохранены на том же месте в хранилище, что позволит избежать ненужного разрастания хранилища и его фрагментации.
XIMAGEDESC - получение изображения
 
[QUOTE]Alexander Volovikov написал:
Может быть вообще все проблемы в том, что все функции корректно работают только с USB ключом?[/QUOTE]

Лицензионный ключ проверяется только при открытии карты. Если карта открылась, все функции будут с ней работать.
[URL=https://gisinfo.ru/download/download.htm#trlicense]Без ключа (в режиме ознакомления) открываются не все карты[/URL].

[QUOTE]Alexander Volovikov написал:
Добавляю я в проекте карту, что бы вместе с компиляцией карта в целевой каталог автоматически бы копировалось.[/QUOTE]
Интересное решение...



Добавил в пример установку масштаба карты по размерам картинки.

[IMG]https://i.postimg.cc/xdf1HDNK/ximage.png[/IMG]
XIMAGEDESC - получение изображения
 
[QUOTE]Alexander Volovikov написал:
Карты Moskow.sitx не нашел в поставке. Заменил на military.sitx[/QUOTE]

Во-первых, указанная карта есть в самом примере - см. \bin\x64\Debug\moskow.sitx

Во-вторых, данная карта имеется и в инсталляции GTK14 (\GisTool14\Example\data\moscow\moskow.sit), и в в инсталляции GTK14 Active (\GisToolActive14\Example\data\moscow\moskow.sitx).
Снова возникает вопрос, какие версии каких инструментариев Вы используете?

В-третьих, Вы с картой military.sitx в Windows получили изображение? Карта military.sitx не имеет объектов в верхнем левом углу, при определенных параметрах экрана и масштабе отображения карты очень велик шанс того, что пустая картинка на выходе - это правильный результат, так как объектов нет.
Поэтому для Вас в пример я и добавил карту Moskow.sitx, у которой в запрашиваемом фрагменте объекты есть всегда.

PS
Зачем добавлять карты в проект?
[IMG]https://i.postimg.cc/HxyrKN8h/2022-07-11-090019445.png[/IMG]
XIMAGEDESC - получение изображения
 
[QUOTE]Alexander Volovikov написал:
Получается, что изначально все верно убыло сделано.[/QUOTE]

Нет, не всё.
Изначально было упущено заполнение изображения в HIMAGE.
И сейчас до сих пор у Вас в примере задан стандарт вызова API как CDECL.

Как задавать габариты и смещения изображения (например, при скроллинге или масштабировании) - смотрите в примере на Qt.

[QUOTE]Alexander Volovikov написал:
Конечно, у меня нет под рукой другого инструмента, чтобы сравнивать. [/QUOTE]

Желательно пользоваться какими-то настольными ГИС из наших продуктов, чтобы как минимум контролировать данные и сверять работу своего разрабатываемого приложения.

Самый недорогой вариант - [URL=https://gisinfo.ru/products/mapview12.htm]ГИС Панорама-Мини[/URL] (на данный момент всего 2400р).

Любой продукт, представленный в разделе [URL=https://gisinfo.ru/download/download.htm]Скачать[/URL] Вы можете использовать бесплатно и без приобретения лицензии [URL=https://gisinfo.ru/download/download.htm#trlicense]для ознакомления на следующих условиях[/URL].
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 116 След.



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

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