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

Сергей Геннадьевич (Все сообщения пользователя)

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

Страницы: 1 2 3 След.
Работа c MapAPI в ОС AstraLinux на языке PASCAL
 
Добрый день
Предлагаю небольшой проект для Lazarus, который показывает возможность использования интерфейса MAPAPI в среде Lazarus для программ на языке Pascal.
Функциональность примера: открывает, отображает, масштабирует и закрывает картографические данные.
Использовал Lazarus 1.6.2, операционную систему Astra Linux 1.5, ГИС Конструктор для Qt Designer версии 11.10.x
В приложении – исходные тексты примера.
Работа c MapAPI в ОС AstraLinux на языке PASCAL
 
Здравствуйте!

Предлагаю обратить внимание на ветку по обсуждению Lazarus - среды разработки на Паскале для Linux.
Ссылка - [URL=http://gisweb.ru/forum/messages/forum2/topic3325/message20801/3325#message20801]http://gisweb.ru/forum/messages/forum2/topic3325/message20801/3325#message20801[/URL]
В данной теме я изложил пути адаптации GisToolkit для Lazarus, выложил исходные тексты прикладных задач на Паскале для ГИС Панорамы под Linux как с использованием только MAPAPI-интерфейса, так и с применением PANAPI-интерфейса, описал шаги по настройке принтерно-растрового вида карты в Lazarus.
Lazarus ?, Lazarus и компоненты GIS Toolkit Free
 

Здравствуйте!
   За последний год отечественные производители операционных систем (ОС) Astra Linux, AltLinux начали включать в дистрибутивы среду разработки Lazarus.  

  В продолжении знакомства с программированием прикладных задач в среде Lazarus (Операционная система Astra Linux CE) для ГИС Оператор предлагаю краткий обзор разработки с применением классов TPanTask, TPanWindow, TPanAction. Сначала напомню, что необходимо учитывать:

1.Задача разрабатывалась на базе исходных текстов из архива SDK для ГИС Оператор, который можно скачать по ссылке [URL=http://gisinfo.ru/download?id=131]http://gisinfo.ru/download?id=131[/URL]

2. Структуры и параметры необходимо привести к требованиям 64-битной ОС. Пример:

[CODE]TTASKPARMEX = packed record
Language:int64;    
Resource : int64;    
HelpName : int64;    
IniName  : int64;    
PathShell: int64;    
ApplicationName : int64;    
Handle : int64;    
DocHandle : int64;    
StayOnTop : int64;  
end;[/CODE]

 За образец я взял исходные тексты на C++.

3.При использовании диалогового интерфейса необходимо учитывать последовательность объявления unit. Главное: unit Interfaces должен быть объявлен до unit Forms.

4.Перед началом разработки необходимо сделать “линк”-ссылку на библиотеку ГИС Оператор – libmapacces.so командой: ln –s /usr/Operator11/libmapacces.so /usr/lib/libmapacces.so

Далее для работы необходимо адаптировать классы TPanTask, TPanWindow, TPanAction для работы в Lazarus. В качестве эталона я использовал тексты на С++: pantask.cpp, h, panwin.h, panact.h. Главное, как упоминал выше, необходимо привести структуры и параметры к требованиям 64-битной ОС. В моем случае – это ОС Astra Linux CE (релиз Орел). Опишу главные моменты:

1.В описание TPanWindow необходимо добавить ссылку на функцию-обработчик главной программы:

[CODE]{$IFDEF LINUXAPI} MessageHandler: MSGHANDLER;{$ENDIF}[/CODE]

Описание типа функции представлено ниже:

[CODE]{$IFDEF LINUXAPI} MSGHANDLER = function (hwnd : int64; code : int64; p1 : int64; p2: int64; typemsg: int64) : int64; cdecl;{$ENDIF}[/CODE]

2.Далее в конструкторе класса укажем реальный адрес:

[CODE]{$IFNDEF LINUXAPI}
FHMainWindow := parm.Handle;      
{$ELSE}        
FHMainWindow := 0;        
MessageHandler := MSGHANDLER(aparm.Handle);
{$ENDIF}[/CODE]

3.Для функций класса TPanWindow необходимо для указателей-параметров задавать  преобразование к 64-битной переменной:

[CODE] procedure TPanWindow.SetWindowTitle(const amessage : PChar);
begin  
{$IFDEF LINUXAPI}    
if GetHandle <> 0         then MessageHandler(GetHandle,int64(MT_MAPWINPORT), int64(MWP_SETWINDOWTEXT),int64(amessage),0);  
{$ENDIF}  
end;[/CODE]

4.В функцию добавления кнопки в панель для Lazarus необходимо внести следующие изменения:

[CODE]function TPanTask.InsertButton(panelId : integer ; bmpFace : int64; bmpName : Pchar; command : integer; after : integer): integer;
var  BitmapH : HBITMAP;  
hInst   : HMODULE;
buttonInfo : TBUTTONINFO ;  
res : integer;
begin{$IFDEF LINUXAPI}  
if Assigned(MessageHandler) then   begin    
buttonInfo.Command := command;    
buttonInfo.BitmapIdent := bmpface;    
buttonInfo.Sibling := 0;    
result := MessageHandler(0,  AW_INSERTBUTTON, WPARAM(panelID), LPARAM(@buttonInfo), 0);  
end   else result := 0;
{$ENDIF}
end;[/CODE]

В указанном выше описании я привел основные ньюансы по созданию прикладной задачи в среде Лазарус для Linux.[B] Исходные тексты прилагаются к данной теме. На рисунках представлен результат работы задачи в среде ГИС Оператор под Astra Linux CE.[/B]

Изменено: Сергей Геннадьевич - 27.03.2018 11:47:34
Проблемы с открытием карт в PandroidMini, Не открывается пользовательская карта
 
Скачал "ГИС Панорама Мини для ОС Android". Протестировал на карте Москвы. Карта отображается, изменение масштаба работает, местоположение определяется, трек записывается.
Нет опции выхода из приложения. ОС Андроид 7.1.1
Изменено: Сергей Геннадьевич - 21.12.2017 15:57:10
Компонент граф дорог, ГИС Конструктор версия 12, вопросы
 
Скачал последнюю версию, проверил. 3амечание устранено. Спасибо.
По диалогу. У меня не стандартное разрешение 1366 x 663  - в этом проблема. Вопрос снимается.
Изменено: Сергей Геннадьевич - 13.12.2017 16:53:11
использование функции mapViewSelect, прикладная задача для ГИС Панорама12
 
Использую функцию [B]mapSelectSampleByNumber [/B]в версии 12 под Astra Linux. После создания контекста функцией [B]mapCreateSiteSelectContext[/B], вызываю функцию очистки [B]mapClearSample[/B]. Затем пользуюсь функцию [B]mapSelectSampleByNumber[/B]. Пока замечаний нет.
Компонент граф дорог, ГИС Конструктор версия 12, вопросы
 
Здравствуйте!

Собираемся закупать указанный продукт. Скачал для ознакомления  ГИС Конструктор для Qt Designer x64 (версия 12.1.0, Qt 4.8, Qt 5.5, платформа x64, ОС "Astra Linux Special Edition", релиз "Смоленск"). Попробовал протестировать функцию создания графа с диалогом и в бездиалоговом режиме [B]onCreateNetDlgEx[/B]. Что не устраивает:
1.В бездиалоговом режиме отсутствует возможность настройки параметров построения. В частности нет возможности записи семантики в объекты создаваемого графа. Хотелось бы это видеть.
2.Диалог построения графа для Qt5 не читабелен.
3.Открыл карту Подольска, вызвал диалог построения графа, нажал кнопку построить, выдает сообщение: "Нелегальная копия модуля - libqdmapacces.so"
Мне кажется, что на тестовых данных такой ошибки быть не должно.
Отключение вывода ошибок, Отключение вывода ошибок
 
Понадобились тексты mapvecex. Скачал последнюю версию sdk12, обновление для данного проекта от 23.11.2017. В файлах map2.sxf.h, map2sxfex.cpp, mapsorts.cpp, sxf2map.h, sxf2mapex.cpp есть ссылки на экземпляры классов TMapAccess, TMap. Проект не собирается, так как полностью не переведен на MAPAPI.
Lazarus ?, Lazarus и компоненты GIS Toolkit Free
 
Здравствуйте!
Решил подвести первые итоги работы с Lazarus.
Общие выводы:
1. Лазарус является [B][U]бесплатным [/U][/B]продуктом.
2. [B][U]Н[/U][/B][B][U]аличие исходных текстов[/U][/B] позволяет использовать данный продукт для разработки программ, которые в дальнейшем необходимо [B][U]сертифицировать[/U][/B].
3. Lazarus является [U][B]кроссплатформенной средой разработки[/B][/U]. То есть разработанную программу в Windows можно перенести на Linux и наоборот.
4. Достаточная [B][U]совместимость Lazarus с Delphi[/U][/B] позволяет перенести наработки с Delphi на Lazarus.

Выводы по взаимодействию с программой ГИС Конструктор. Выделю  два:
1. Программа, написанная на Лазарус в сборке с Qt4, [U][B]может использовать диалоги ГИС Конструктор, которые написаны на Qt4.
[/B][/U]2. Программа, написанная на Лазарус в сборке с Qt4, может отображать[U][B] карту в принтерно-растровом виде[/B][/U], который реализован в ГИС Конструктор на Qt4 на уровне MAPAPI-интерфейса.
Изменено: Сергей Геннадьевич - 26.04.2017 20:59:28
ГИС Оператор 11 > Разработка прикладной задачи > Использование своего файла классификатора карты
 
1.Как сказано на сайте помощи по MAPAPi (ссылка [URL=http://help.gisinfo.ru/]http://help.gisinfo.ru/[/URL]):[CODE] // Создать пользовательскую карту по открытой карте
 // hmap -  идентификатор открытых данных
 // mapname - полное имя файла карты
 // rscname - полное имя файла ресурсов
 // Структура CREATESITE описана в maptype.h
 // Возвращает идентификатор открытой пользовательской карты
 // При ошибке возвращает ноль
 _MAPIMP HSITE _MAPAPI mapCreateAndAppendSite(HMAP hmap, const char * mapname, const char * rscname, CREATESITE * createsite);[/CODE]Значит желательно указать полные пути вместе с каталогами к файлам RSC и паспорту карты (SIT).
2.Символьная информация, в том числе в структурах, выдается в кодировке CP1251, либо в Unicode для функций с префиксом Un (Unicode).
Так же и Вы должны подавать на вход параметры в кодировке CP1251, либо в Unicode для функций с префиксом Un (Unicode).
Страницы: 1 2 3 След.



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

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