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

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

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

Страницы: Пред. 1 ... 4 5 6 7 8 9 10 11 12 13 14 ... 327 След.
mapSetScreenImageSize, корректное использование
 
Приветствую господа разработчики!

Нужна консультация по использованию функции [B]mapSetScreenImageSize[/B]
В поиске нашёл некоторые пояснения от Олега Валентиновича[URL=http://gisweb.ru/forum/messages/forum2/topic4304/message27497/4304#message27497] http://gisweb.ru/forum/messages/forum2/topic4304/message27497/4304#message27497[/URL] но они не совсем поясняют мой вопрос.

Итак. Имеем на входе
1. Видеокарту в двухмониторном режиме с двумя подключенными мониторами
2. Разрешение основного монитора (который слева FullHD 1920 х 1080 - диагональ 22")
3. Разрешение дополнительного монитора (на котором карта) - 1600х1200 (4:3 диагональ 19")

Перед открытием всех карт в секции инициализации (initialization)
устанавливаю следующие параметры буфера[B] mapSetScreenImageSize[/B](4000, 3000)

В итоге
на правом (дополнительном мониторе) все объекты становятся очень мелкими, а в масштабе 1:500 000 (1см/5км) видно территорию всего "золотого кольца"
ну и карта естественно очень сильно тормозит при перемещении.

Опытным путём было вычислено, что вышеуказанная функция меняет не только размер буфера, а и размер "Диагонали" монитора по умолчанию
Исходя из этого, достигается эффект отображения района карты который размещается на дисплее размером в 33" (после увеличения буфера)
на мониторе с реальной диагональю 22".

По сути, функция mapSetScreenImageSizeне только устанавливает буфер экрана, а и пересчитывает "под себя" параметр
которые возвращается и уста навивается функциями  [B]mapGetScreenSize / mapSetScreenSize [/B]

Чтобы достичь эффекта увеличения буфера без масштабирования карты функцию  mapSetScreenImageSize использую вот так:[QUOTE]int scrSize = mapGetScreenSize(); // запоминаю диагональ
mapSetScreenImageSize(screen.Width*2, screen.Height*2); // расширяю буфер в два раза
mapSetScreenSize (scrSize);   // возвращаю диагональ [/QUOTE]
Вопрос 1: это правильное применение функции выделения буфера, или я что-то делаю не так:
Вопрос 2: это правильно, что функция mapSetScreenImageSize пересчитывает параметр который возвращается функцией mapGetScreenSize ?
Изменено: KFF - 25.01.2019 20:26:50
Комплекс подготовки документов аэронавигационной информации, Обсуждение проблем, возникающих при использовании комплекса
 
[QUOTE]Владимир Кул написал:
В ГИС Панорама 12 можно определить магнитное склонение? Спасибо!  [/QUOTE]
Да!, Можно!
Мало того, в комплексе предусмотрен режим автоматического расчёта метрики маршрута по магнитному склонению.
Алгоритм выглядит следующим образом:
- по публикуемым данным ARINC по магнитным склонениям формируется матрица магнитных склонений дл чего:
- официальные данные магнитных склонений импортируются конвертором ARINC
- по созданным объектам - строится [I]матрица магнитных склонений[/I]*
[I] ([B]матрица магнитных склонений - [/B]это обычная матрица качеств ГИС Панорама, которая содержит значения магнитного склонения на указанной территории.)[/I]
Порядок построения матрицы описан в руководстве по построению матриц качесств ГИС Карты
- оператор создаёт воздушную трассу по предопределённым точкам с заданными координатами
По координате из матрицы качеств выбирается значение магнитного склонения в точке из созданной матрицы и используется для расчёта МПУ по ИПУ
ИПУ и расстояние по ортодромии рассчитывается функцией обратной геодезической задачи ядра ГИС
Добавление bmp файла на карту, Проблемы с добавлением изображения на карту
 
[QUOTE]tmpGraf : TIMGGRAPHICMARK;
[S]pointGraf : PIMGGRAPHICMARK;[/S]
FillChar(tmpGraf , sizeof(TIMGGRAPHICMARK), 0);
tmpGraf.FileType := 1;
tmpGraf.Height := 1000;
tmpGraf.Width := 1000;
tmpGraf.Length := [S]50[/S]; sizeof(TIMGGRAPHICMARK);
[S]tmpGraf.Name := 'test.bmp';[/S]
StrLCopy(tmpGraf.Name, ПУТЬ+'test.bmp', sizeof(tmpGraf.Name));
tmpGraf.PosV := [S]1000[/S]; 0;
tmpGraf.PosH := [S]1000[/S];0;

tmpobj1 := mapCreateObject(rMap, 0, KM_IDFLOAT2, OL_LINE);
tmpSite := mapGetObjectSiteIdent(rMap, tmpObj1);
tmpobj := mapCreateSiteObject(rMap, tmpSite, KM_IDFLOAT2[S], 1[/S]);
mapRegisterDrawObject(tmpobj, 0, [S]OL_LINE[/S] OL_MARK);
mapAppendSemantic(tmpobj, 9, 'Маршрут движения', 150);
[S]pointGraf := @tmpGraf;[/S]
mapAppendDraw(tmpobj, IMG_GRAPHICMARK, [S]pointGraf[/S]@tmpGraf);
mapAppendPointPlane(tmpobj, rX, rY, 0);
[S]mapCommitWithPlace(tmpobj); [/S] mapCommitObject(tmpobj);
mapFreeObject(tmpobj);
mapview.Repaint();
[/QUOTE]

[IMG WIDTH=960 HEIGHT=565]https://b.radikal.ru/b30/1808/e9/0f1e2119123d.png[/IMG]
Изменено: KFF - 20.08.2018 19:34:18
Справочная система
 
-
Изменено: KFF - 20.08.2018 12:39:27
Ошибка в диалоге свойств объекта
 
Здравствуйте господа разработчики
Просьба проверить работу диалога свойств объекта (закладка метрика)
Меняю высоту вот в этом месте - И ГИС Оператор просто исчезает с экрана


[IMG WIDTH=566 HEIGHT=427]https://b.radikal.ru/b27/1808/a6/9398843e9fea.png[/IMG]


На всякий случай добавляю тестовую карту [URL=http://files.dp.ua/file?source=18081511293736933356]СКАЧА[/URL][URL=http://files.dp.ua/file?source=18081511293736933356]ТЬ[/URL]


Изменено: KFF - 15.08.2018 11:30:33 (+URL)
Смиена системы отображаемых координат
 
Здравствуйте господа разработчики !
Как сменить систему отображаемых координат в статусной панели?


PS - просьба откорректировать "ГеодеЗИДИческая" на "геодезическая" (см. рисунок)

===========

ГИС Оператор 11.13.9
ОС Ubuntu 18
[IMG WIDTH=703 HEIGHT=461]https://a.radikal.ru/a00/1808/1a/0687cba83004.png[/IMG]
Ошибки и пожелания ГИС Панорама 12 x64
 
[QUOTE]Елена Кузнецова написал:
Проверили в версии 12.5.4 от 23.03.2018 ошибка не повторилась.Знак минус добавляется точка.... точка в восточное полушарие не уходит.[/QUOTE]
Проверил на скачанной вчера версии, минус добавляется только при значениях менее 1 но при нажатии "Сохранить" он сбрастывается
При значения долготы или широты более еденицы минус добавить не удалось

Пример карты можно скачать тут [URL=https://ru.files.fm/u/sksxpbxc]СКАЧАТЬ[/URL]
Ошибки и пожелания ГИС Панорама 12 x64
 
Здравствуйте !

Проекция цилиндрическая а шаре
Точка в западном полушарии (долгота отрицательна)
Начинаю редактировать долготу .... знак минус не могу добавить. Точка уходит в восточное полушарие.?
[IMG WIDTH=500 HEIGHT=331]https://d.radikal.ru/d19/1804/2a/8aa2c829834d.png[/IMG]

Как установить (вернуть) знак минус в этом диалоге

[IMG WIDTH=505 HEIGHT=358]https://d.radikal.ru/d01/1804/8e/ac58dc7355fb.png[/IMG]
Вывод подсказки кнопки на панели задач, PanTask
 
[QUOTE]но ничего не выходит[/QUOTE]
Добавление точки на панель не означает что будет работать Hint
Тут всё по другому.
Hint подсвечивается на функции utsEnableAction в которой возвращается информация о доступности кнопки и о её названии которое должно появляться в виде подсказки.

Обратите внимание Дарина, что во всех примерах SDK12 по PanTask, каждая кнопка задаётся в виде специального массива записей типа констант
Так вот, эти записи нужны для того, чтобы в экспортных функциях возвращать те или иные аттрибуты кнопки
(доступность, хинт, нажатие, принадлежность к панели и так далее)
Нанесение точечного объекта
 
[B]Варианты [/B]
Вариант 1 (тот который Вы хотите)
[CODE]procedure TForm1.Button1Click(Sender: TObject);
var obj  : HObj;
   mark : TIMGMARK; // описание объекта типа "точка"
{
где
TIMGMARK = packed record               // (137) ТОЧЕЧНЫЙ РАСТРОВЫЙ ОБ'ЕКТ  (size = 16 + 128 = 144)
 Color : TColor;                       // Цвет знака
 Size  : cardinal;                     // Размер в микронах (для печати)
 PosV  : cardinal;                     // Точка привязки знака PosV,PosH < Size
 PosH  : cardinal;                     //  (для IMGSQUAREMARK - шаг сетки >= Size
 case byte of
   0: (Bits  : array [0..127] of byte);    // Растровое изображение 32x32 с верхнего угла
   1: (Rows  : array [0..31] of Cardinal);
end;

}
begin
 FillChar(mark, sizeof(TIMGMARK), 0); // чистим
 mark.Color := clRed;  // устанавливаем цвет ТУТ МЕНЯЕТСЯ ЦВЕТ !
 mark.Size  := 5000;   // устанавливаме размер в микрона - это 5 мм на карте
 mark.PosV  := 0;    mark.PosH  := 0; //точка привязки знака в 32х32 битной матрице
 mark.Rows[0] := $F0FF0000;  // первая строка рисунка
 mark.Rows[1] := $10800000;  // вторая строка рисунка
 mark.Rows[2] := $10800000;
 mark.Rows[3] := $10800000;
 mark.Rows[4] := $10800000;
 mark.Rows[5] := $F0FF0000;  // крайняя строка рисунка

 obj := mapCreateSiteObject(MapScreen1.MapHandle, MapScreen1.MapHandle); // создаём объект на карте
 mapRegisterDrawObject(obj, 0, OL_MARK); // регистрируем его в системном слое как точка
 mapAppendDraw(obj, IMG_MARK, @mark); // присоединяем наше описание
 mapAppendPointPlane(obj, 6215000, 7444000, 0); // добавляем точку метрики (это верхниё левый угол карты Ногиснка из примера)
 mapCommitObject(obj); // записываем на карту
 mapFreeObject(obj); // освобождаем болванку

 MapScreen1.Repaint; // переписовка
end;[/CODE]
Вариант 2
Берём описание объекта из классификатора[CODE]var obj : HObj;
   rsc  : HRsc;
   parm : TIMGSUBPRIMITIVE; // тип - объединённый указатель примитивов
   func, incode : integer;
begin
 Rsc    := mapGetRscIdent(MapScreen1.MapHandle, MapScreen1.MapHandle);
 incode := mapGetRscObjectCodeByNumber(Rsc, 31332000, OL_MARK, 1);    // скалы надводные берём номер объекта в классфикаторе
 func   := mapGetRscObjectFunction(Rsc, incode);  // берём код функции отрисовки
 parm.Address :=  mapGetRscObjectParameters(Rsc, incode); // берём описание (тот PARM который Вы спрашивали в стартпосте)

 obj := mapCreateSiteObject(MapScreen1.MapHandle, MapScreen1.MapHandle); // создаём объект на карте
 mapRegisterDrawObject(obj, 0, OL_MARK); // регистрируем его в системном слое как точка
 mapAppendDraw(obj, IMG_MARK, @mark); // присоединяем наше описание
 mapAppendPointPlane(obj, 6215000, 7444000, 0); // добавляем точку метрики (это верхниё левый угол карты Ногиснка из примера)
 mapCommitObject(obj); // записываем на карту
 mapFreeObject(obj); // освобождаем болванку

 MapScreen1.Repaint; // переписовка
end;[/CODE]Вариант 3
Работа с обычным объектом[CODE]var obj : HObj;
begin
 obj := mapCreateSiteObject(MapScreen1.MapHandle, MapScreen1.MapHandle); // создаём объект на карте
 mapRegisteObject(obj, 31332000, OL_MARK); // регистрируем его в системном слое объект классификатора
 mapAppendPointPlane(obj, 6215000, 7444000, 0); // добавляем точку метрики
 mapAppendSemanticLong(obj, 31002, $000000FF);  // через служебную семантику "ЦВЕТ" назначаем объекту цвет (это красный)
 mapAppendSemanticLong(obj, 31001, 80);  // через служебную семантику "РАСТЯЖЕНИЕ в %" сжимаем его до 80%
 mapCommitObject(obj); // записываем на карту
 mapFreeObject(obj); // освобождаем болванку
 MapScreen1.Repaint; // переписовка
end;[/CODE]Какой вариант приемлем Вам - придётся выбирать самому =)
Изменено: KFF - 24.02.2018 22:48:58
Страницы: Пред. 1 ... 4 5 6 7 8 9 10 11 12 13 14 ... 327 След.



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

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