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

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

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

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

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

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

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

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

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

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

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

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

Изменено: KFF - 20.08.2018 19:34:18
Не тот глуп кто не знает, а тот, кто не знает где искать.
Справочная система
 
-
Изменено: KFF - 20.08.2018 12:39:27
Не тот глуп кто не знает, а тот, кто не знает где искать.
Ошибка в диалоге свойств объекта
 
Здравствуйте господа разработчики
Просьба проверить работу диалога свойств объекта (закладка метрика)
Меняю высоту вот в этом месте - И ГИС Оператор просто исчезает с экрана





На всякий случай добавляю тестовую карту СКАЧАТЬ


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


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

===========

ГИС Оператор 11.13.9
ОС Ubuntu 18
Не тот глуп кто не знает, а тот, кто не знает где искать.
Ошибки и пожелания ГИС Панорама 12 x64
 
Цитата
Елена Кузнецова написал:
Проверили в версии 12.5.4 от 23.03.2018 ошибка не повторилась.Знак минус добавляется точка.... точка в восточное полушарие не уходит.
Проверил на скачанной вчера версии, минус добавляется только при значениях менее 1 но при нажатии "Сохранить" он сбрастывается
При значения долготы или широты более еденицы минус добавить не удалось

Пример карты можно скачать тут СКАЧАТЬ
Не тот глуп кто не знает, а тот, кто не знает где искать.
Ошибки и пожелания ГИС Панорама 12 x64
 
Здравствуйте !

Проекция цилиндрическая а шаре
Точка в западном полушарии (долгота отрицательна)
Начинаю редактировать долготу .... знак минус не могу добавить. Точка уходит в восточное полушарие.?


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

Не тот глуп кто не знает, а тот, кто не знает где искать.
Вывод подсказки кнопки на панели задач, PanTask
 
Цитата
но ничего не выходит
Добавление точки на панель не означает что будет работать Hint
Тут всё по другому.
Hint подсвечивается на функции utsEnableAction в которой возвращается информация о доступности кнопки и о её названии которое должно появляться в виде подсказки.

Обратите внимание Дарина, что во всех примерах SDK12 по PanTask, каждая кнопка задаётся в виде специального массива записей типа констант
Так вот, эти записи нужны для того, чтобы в экспортных функциях возвращать те или иные аттрибуты кнопки
(доступность, хинт, нажатие, принадлежность к панели и так далее)
Не тот глуп кто не знает, а тот, кто не знает где искать.
Нанесение точечного объекта
 
Варианты
Вариант 1 (тот который Вы хотите)
Код
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;

Вариант 2
Берём описание объекта из классификатора
Код
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;
Вариант 3
Работа с обычным объектом
Код
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;
Какой вариант приемлем Вам - придётся выбирать самому =)
Изменено: KFF - 24.02.2018 22:48:58
Не тот глуп кто не знает, а тот, кто не знает где искать.
Страницы: Пред. 1 ... 4 5 6 7 8 9 10 11 12 13 14 ... 327 След.



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

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