Нужна консультация по использованию функции [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 ?
[QUOTE]Владимир Кул написал: В ГИС Панорама 12 можно определить магнитное склонение? Спасибо! [/QUOTE] Да!, Можно! Мало того, в комплексе предусмотрен режим автоматического расчёта метрики маршрута по магнитному склонению. Алгоритм выглядит следующим образом: - по публикуемым данным ARINC по магнитным склонениям формируется матрица магнитных склонений дл чего: - официальные данные магнитных склонений импортируются конвертором ARINC - по созданным объектам - строится [I]матрица магнитных склонений[/I]* [I] ([B]матрица магнитных склонений - [/B]это обычная матрица качеств ГИС Панорама, которая содержит значения магнитного склонения на указанной территории.)[/I] Порядок построения матрицы описан в руководстве по построению матриц качесств ГИС Карты - оператор создаёт воздушную трассу по предопределённым точкам с заданными координатами По координате из матрицы качеств выбирается значение магнитного склонения в точке из созданной матрицы и используется для расчёта МПУ по ИПУ ИПУ и расстояние по ортодромии рассчитывается функцией обратной геодезической задачи ядра ГИС
Здравствуйте господа разработчики Просьба проверить работу диалога свойств объекта (закладка метрика) Меняю высоту вот в этом месте - И ГИС Оператор просто исчезает с экрана
На всякий случай добавляю тестовую карту [URL=http://files.dp.ua/file?source=18081511293736933356]СКАЧА[/URL][URL=http://files.dp.ua/file?source=18081511293736933356]ТЬ[/URL]
[QUOTE]Елена Кузнецова написал: Проверили в версии 12.5.4 от 23.03.2018 ошибка не повторилась.Знак минус добавляется точка.... точка в восточное полушарие не уходит.[/QUOTE] Проверил на скачанной вчера версии, минус добавляется только при значениях менее 1 но при нажатии "Сохранить" он сбрастывается При значения долготы или широты более еденицы минус добавить не удалось
Пример карты можно скачать тут [URL=https://ru.files.fm/u/sksxpbxc]СКАЧАТЬ[/URL]
Проекция цилиндрическая а шаре Точка в западном полушарии (долгота отрицательна) Начинаю редактировать долготу .... знак минус не могу добавить. Точка уходит в восточное полушарие.? [IMG WIDTH=500 HEIGHT=331]https://d.radikal.ru/d19/1804/2a/8aa2c829834d.png[/IMG]
Как установить (вернуть) знак минус в этом диалоге
[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]Какой вариант приемлем Вам - придётся выбирать самому =)