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

Александр Савелов (Все сообщения пользователя)

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

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 58 След.
ГИС Оператор: сохранение в файл определенного места карты по известным координатам.
 
Здравствуйте!

В дополнение к приведенному ранее примеру разработки автономного ГИС-приложения на базе ГИС Конструктор привожу исходный код того же примера в формате прикладной задачи для ГИС Оператор SE:[CODE]#include <QImage>

#include "mapapi.h"

int SaveMapRegionToFileFunction(HMAP mapHandle, TASKPARMEX * taskParmEx)
{
 if (!mapHandle || !taskParmEx)
   return 0;

 double x1 = 6200000;  // в метрах
 double y1 = 7460000;
 double x2 = 6190000;
 double y2 = 7470000;

 // перевод в пиксели
 mapPlaneToPicture(mapHandle, &x1, &y1);
 mapPlaneToPicture(mapHandle, &x2, &y2);

 int paintWidthInPixels = abs(x2 - x1);
 int paintHeightInPixels = abs(y2 - y1);

 RECT drawRectInPixels;
 drawRectInPixels.left = x1;
 drawRectInPixels.top = y1;
 drawRectInPixels.right = x1 + paintWidthInPixels;
 drawRectInPixels.bottom = y1 + paintHeightInPixels;

 const int paintDepthInBits = 32;

 char *paintMemory = AllocateTheMemory(paintWidthInPixels * paintHeightInPixels * paintDepthInBits / 8);
 if (paintMemory)
 {
   XIMAGEDESC xImageDesc;
   xImageDesc.Point = paintMemory;
   xImageDesc.Width = paintWidthInPixels;
   xImageDesc.Height = paintHeightInPixels;
   xImageDesc.Depth = paintDepthInBits;
   xImageDesc.CellSize = xImageDesc.Depth / 8;
   xImageDesc.RowSize = paintWidthInPixels * xImageDesc.CellSize;

   if (mapPaintToXImage(mapHandle, &xImageDesc, 0, 0, &drawRectInPixels))
   {
     QImage image((uchar *)paintMemory, paintWidthInPixels, paintHeightInPixels, QImage::Format_RGB32);
     image.save("/tmp/out.png");
   }
 }

 FreeTheMemory(paintMemory);

 return 1;
}

extern "C"
{
 long int _export WINAPI GetInterfaceVersion() { return 0; }

 long int _export WINAPI CallGisFunctionEx(HMAP mapHandle, TASKPARMEX *taskParmEx)
 {
   return SaveMapRegionToFileFunction(mapHandle, taskParmEx);
 }
}
[/CODE]pro-файл:[CODE]TEMPLATE = lib
CONFIG += shared plugin

INCLUDEPATH += /tmp/SDK/include/

SOURCES += \
   task.cpp

LIBS += -L/usr/Operator14 -lmapacces
[/CODE]Здесь /tmp/SDK - путь к распакованному архиву со средствами разработки для ГИС Оператор SE 14 ([URL=https://gisinfo.ru/download/download_linux.htm#13]https://gisinfo.ru/download/download_linux.htm#13[/URL]).
В состав SDK также входит пример прикладной задачи example_pantask.
Более подробно описание создания прикладных задач приведено в разделе 7. "Разработки прикладных задач в ГИС" документа "Прикладные задачи. Разработка новых модулей." ([URL=https://gistoolkit.com/download/doc/mapapi.pdf]https://gistoolkit.com/download/doc/mapapi.pdf[/URL]).

Реализация собственного функционала возможна одним из двух способов:
- написание автономного ГИС-приложения на базе ГИС Конструктор ([URL=https://gisinfo.ru/download/download_linux.htm#5]https://gisinfo.ru/download/download_linux.htm#5[/URL]). Пример такого приложения на основе Ваших требований приведен в сообщении выше ([URL=https://gisweb.ru/forum/messages/forum7/topic12270/message92604/12270-gis-operator_-sokhranenie-v-fayl-opredelennogo-mesta-karty-po-izvestnym-koordinatam.#message92604]https://gisweb.ru/forum/messages/forum7/topic12270/message92604/12270-gis-operator_-sokhranenie-v-fa...[/URL]).
При таком подходе используются заголовочные файлы и библиотеки из состава ГИС Конструктор (для актуальной версии ГИС Конструктор 14 заголовочные файлы расположены в каталоге /usr/include/gisdesigner/, библиотеки - /usr/lib, пример библиотеки - libqdmapacces.so).
Созданное на базе ГИС Конструктор ГИС-приложение является автономным исполняемым файлом с библиотеками и не требует для запуска других программ.

- написание прикладной задачи для ГИС Оператор SE или ГИС Панорама для Linux ([URL=https://gisinfo.ru/download/download_linux.htm#9]https://gisinfo.ru/download/download_linux.htm#9[/URL]). Пример такой прикладной задачи приведен в данном сообщении.
При таком подходе используются заголовочные файлы из состава SDK (для актуальной версии ГИС Оператор SE 14: [URL=https://gisinfo.ru/download/download_linux.htm#13]https://gisinfo.ru/download/download_linux.htm#13[/URL]) и библиотеки из состава ГИС Оператор SE или ГИС Панорама для Linux (для актуальной версии ГИС Оператор SE 14 каталоги /usr/Operator14 и /usr/Panorama14, пример библиотеки - libmapacces.so).
Созданная прикладная задача представляет собой библиотеку, которая запускается с помощью режима "Запуск приложений" из состава программы ГИС Оператор SE или ГИС Панорама для Linux (более подробно описано в разделе 4.5.5 "Запуск приложений" Руководства оператора: [URL=https://gistoolkit.com/download/doc/panmanuallin.pdf]https://gistoolkit.com/download/doc/panmanuallin.pdf[/URL]).

Для правильного ответа на возникшие у Вас вопросы, пожалуйста, уточните:
- какой из двух подходов при разработке собственного функционала Вы используете;
- какой продукт используется при разработке и его версия (из состава какого изделия Вы используете библиотеки при разработке);
- если Вы разрабатываете прикладную задачу для ГИС Оператор SE или ГИС Панорама, уточните, пожалуйста, откуда был взят комплект SDK.

Спасибо!
Lazarus ?, Lazarus и компоненты GIS Toolkit Free
 
Здравствуйте!

Актуальные инсталляции продуктов для Linux доступны для скачивания на нашем сайте в разделе "Скачать": [URL=https://gisinfo.ru/download/download_linux.htm]https://gisinfo.ru/download/download_linux.htm[/URL]
Также на сайте доступна актуальная версия средств разработки для ГИС "Оператор" SE и ГИС "Панорама": [URL=https://gisinfo.ru/download/download_linux.htm#13]https://gisinfo.ru/download/download_linux.htm#13[/URL]

Обращаем Ваше внимание, что на текущий момент поддерживается разработка прикладных задач только на языках C++/Python.
Ошибка при сборке программы
 
Здравствуйте!

Для решения проблемы пересечения имен функций max() и min() можно добавить в сборке проекта макроопределение HIDEMAXMIN.
ГИС Оператор: сохранение в файл определенного места карты по известным координатам.
 
Здравствуйте!

Для сохранения изображения области карты по двум координатам (в метрах) в файл можно воспользоваться следующим примером кода:[CODE]#include <QApplication>
#include <QImage>

#include "mapapi.h"
#include "qdmcmp.h"

int main(int argc, char **argv)
{
 QApplication app(argc, argv);
 QDMapView();  // инициализация функций принтерно-растрового вида

 HMAP mapHandle = mapOpenAnyData(WTEXT("/usr/share/gisdesigner/examples/Data/Планы городов/Noginsk/Noginsk.sit"));
 if (!mapHandle)  
   return 1;

 double x1 = 6200000;  // в метрах
 double y1 = 7460000;
 double x2 = 6190000;
 double y2 = 7470000;

 // перевод в пиксели
 mapPlaneToPicture(mapHandle, &x1, &y1);
 mapPlaneToPicture(mapHandle, &x2, &y2);

 int paintWidthInPixels = abs(x2 - x1);
 int paintHeightInPixels = abs(y2 - y1);

 RECT drawRectInPixels;
 drawRectInPixels.left = x1;
 drawRectInPixels.top = y1;
 drawRectInPixels.right = x1 + paintWidthInPixels;
 drawRectInPixels.bottom = y1 + paintHeightInPixels;
 
 int paintDepthInBits = 32;

 char *paintMemory = AllocateTheMemory(paintWidthInPixels * paintHeightInPixels * paintDepthInBits / 8);
 if (paintMemory)
 {
   XIMAGEDESC xImageDesc;
   xImageDesc.Point = paintMemory;
   xImageDesc.Width = paintWidthInPixels;
   xImageDesc.Height = paintHeightInPixels;
   xImageDesc.Depth = paintDepthInBits;
   xImageDesc.CellSize = xImageDesc.Depth / 8;
   xImageDesc.RowSize = paintWidthInPixels * xImageDesc.CellSize;

   if (mapPaintToXImage(mapHandle, &xImageDesc, 0, 0, &drawRectInPixels))
   {
     QImage image((uchar *)paintMemory, paintWidthInPixels, paintHeightInPixels, QImage::Format_RGB32);
     image.save("/tmp/out.png");
   }
 }
 
 FreeTheMemory(paintMemory);

 mapCloseData(mapHandle);
 mapCloseMapAccess();

 return 0;
}
[/CODE]pro-файл:[CODE]SOURCES += main.cpp

INCLUDEPATH += /usr/include/gisdesigner/
LIBS += -lmapcomponents -lqdmapacces
[/CODE]Дополнительно в состав ГИС Конструктор входит набор тестовых примеров, демонстрирующих базовый функционал работы с картами (каталог /usr/share/gisdesigner/examples/).
Например, в примерах myfirst и mapview реализовано отображение карты с помощью готового визуального компонента QDMapView и с помощью функций интерфейса MAPAPI соответственно.
Медленная работа функций mapOpenAnyData и mapAppendData
 
Здравствуйте!

USB-ключ может быть проброшен для использования в виртуальную машину - при этом необходимо учитывать, что после проброса он будет недоступен на хостовой операционной системе.
Ошибка при сборке программы
 
Здравствуйте!

Если проблема возникает на этапе компиляции, то информация об ошибках должна попадать в стандартный вывод - пожалуйста, проанализируйте данную информацию.
Не работает свойство transparency у кнопок расположенных над отрисованной картой
 
Здравствуйте!

Для уточнения причины данного поведения приведите, пожалуйста, пример используемого исходного кода.
ГИС Оператор: сохранение в файл определенного места карты по известным координатам.
 
Здравствуйте!

Привожу приблизительный порядок действий для решения задачи:
- получить информацию о паспортных данных карты (в том числе, имена номенклатурных листов карты) можно с помощью функции mapGetMapInfoPro (mapapi.h):[CODE] // Запросить паспортные данные векторной карты
 // Структуры MAPREGISTER и LISTREGISTER описаны в mapcreat.h
 // hmap - идентификатор открытых данных
 // sheetnumber - номер листа карты для
 // которого запрашиваются паспортные данные
 // При ошибке возвращает ноль
_MAPIMP long int _MAPAPI mapGetMapInfoPro(HMAP hmap, long int sheetnumber, MAPREGISTEREX *map, LISTREGISTER *sheet,
                                         SHEETNAMES * sheetnames);[/CODE]- вывод текста можно реализовать путем создания объектов типа "Подпись" на временной карте. Для создания временной карты используются функции семейства mapCreateTempSite() (mapapi.h) - например, mapCreateAndAppendTempSitePro.
Более подробное создание пользовательских карт описано в разделе 3.8.3 "Открытие и создание пользовательских карт" Руководства программиста ([URL=https://gistoolkit.com/download/doc/gisdesigner_prog.pdf]https://gistoolkit.com/download/doc/gisdesigner_prog.pdf[/URL]);[CODE] // Создать временную пользовательскую карту по открытой карте
 // hmap     - идентификатор открытых данных
 // rscname  - полное имя файла ресурсов, если равно 0 - выбирается
 //            из открытой карты
 // inmemory - признак создания карты в оперативной памяти или 0
 // Файлы карты размещаются в рабочей директории системы
 // и имеют уникальные имена, генерируемые автоматически
 // При закрытии пользовательской карты все файлы данных автоматически удаляются
 // Если параметр inmemory не равен 0, то все данные хранятся только в оперативной памяти
 // и освобождаются при закрытии карты
 // Возвращает идентификатор открытой пользовательской карты
 // При ошибке возвращает ноль
_MAPIMP HSITE _MAPAPI mapCreateAndAppendTempSitePro(HMAP hMap, const WCHAR *rscname, long int inmemory);[/CODE]- создать объект для вывода текстовой информации можно с помощью функций mapCreateObject(), mapRegisterObject(), mapCommitObjec() (mapapi.h). Более подробно создание и редактирование объектов описано в разделе 3.8.16 "Редактирование объектов" Руководства программиста.
Для создания объекта, вид которого не описан в классификаторе, объект регистрируется как графический с помощью функции mapRegisterDrawObject() (mapapi.h). Более подробно создание и редактирование объектов описано в разделе 3.8.18 "Создание графических объектов на карте" Руководства программиста. Пример создания графического объекта приведен в тестовом приложении myfirst из состава инсталляции ГИС Конструктор.
- формирование выходного изображения области карты производится с помощью семейства функций mapPaintToXImage() (mapapi.h). Более подробно формирование изображения карты описано в разделе 3.8.4 "Управление визуализацией и печатью" Руководства программиста и примере mapview из состава инсталляции ГИС Конструктор.[CODE] // Вывести изображение карты в XImage (массив)
// Описание структуры XIMAGEDESC в maptype.h
// hmap - идентификатор открытых данных
// x,y - координаты левого верхнего угла внутри
// битовой области XImage для размещения изображения
// rect - выводимый фрагмент карты
// При ошибке в параметрах возвращает ноль
_MAPIMP long int _MAPAPI mapPaintToXImage(HMAP hmap, XIMAGEDESC *imagedesc, long int x, long int y, RECT *rect);[/CODE]- полученный образ изображения карты в формате XImage можно сохранить в файле с помощью класса QImage библиотек Qt. Пример кода:[CODE]if (mapPaintToXImage(MapHandle, &xImageDesc, 0, 0, &rectDraw))
{        
 QImage image((uchar *)BitMap, cw, ch, QImage::Format_RGB32);        
 image.save("/tmp/output.png");
}[/CODE]
Изменено: Александр Савелов - 22.09.2022 11:48:42 (Добавлено сохранение изображения карты в формате XImage в файл)
Медленная работа функций mapOpenAnyData и mapAppendData
 
Здравствуйте!

Обновленная версия ГИС Конструктор для ОС Astra Linux SE доступна для скачивания на нашем сайте ([URL=https://gisinfo.ru/download/download_linux.htm#5]https://gisinfo.ru/download/download_linux.htm#5[/URL]).
Ошибка построения MTW при использовании mapMessageEnable(0)
 
Здравствуйте!

Привожу более сжатый вариант ответа на вопрос о поведении функции построения матрицы по карте mapBuildMtwwUn() при включенном выводе сообщений об ошибках на экран ("выключенный mapMessageEnable(0)"):
- при запуске функции в отдельном потоке вывод сообщения об ошибке приведет к завершению приложения в связи с особенностями использования библиотек Qt. Более подробное описание причины и обходные пути использования приведены выше. В дальнейшем планируем доработать функцию, чтобы она корректно выводила сообщение на экран в отдельном потоке;
- на текущий момент поддерживается актуальная версия ГИС Конструктор 14 - проверки выполняются на данной версии.
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 58 След.



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

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