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

Поворот объекта добавленного в классификатор?

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: Пред. 1 2 3 4 След.
RSS
Поворот объекта добавленного в классификатор?
 
Приветствую!

Пример работы с движущимися объектами есть в исходниках. Двигать точечный знак- картинку Вы можете. Поворачивать - видимо нет. (ну как минимум потому что у точечного знака нет направления) Можете переопределить функцию отрисовки, можете запрограммировать свой произвольный знак и реализовать функцию его отрисовки при помощи imlapi так как Вы считаете необходимым.

У меня на карте самолетики летают, и поворачиваются) но они не из изображения, а знак из классификатора , который состоит из набора примитивов. И они ВЕКТОРНЫЕ)


ЗЫ я такой же пользователь АПИ, если что)

С уважением,
Матвеев П.В.
 
Ок, спасибо)
А Вы не подскажите, где можно ознакомиться с документацией по imlapi?

А Вы используете свой собственный знак? Если да, то можете подсказать, как добавить составной (состоящий из нескольких примитивов, например круги,линии и тд) векторный объект программно в классификатор?
 
Приветствую!

1. тут (4.2.23) + пример из исходников shape, например

2. нет, знак не собственный, из классификатора самолетик.


С уважением,
Матвеев П.В.
 
Ок, спасибо!
 
Доброе утро!

Подскажите пожалуйста, как програмно можно повернуть векторный объект (которые ранее уже создан в классификаторе).

Данные способ не работает:
Код
    HOBJ hObj = mapCreateSiteObject(hmap, hsite, IDDOUBLE2);   
    mapAppendSemanticDouble(hObj, SEMMARKANGLE, ui->spBoxAngle->value());
    mapRegisterObject(hObj, ui->spBoxCodeImg->value(), LOCAL_VECTOR/*LOCAL_POINT*/);
    mapAppendPointPlane(hObj, ui->spBoxLatImg->value(), ui->spBoxLonImg->value(), 0);
    mapCommitObject(hObj);                                                        
    mapFreeObject(hObj);                                                     
    ui->viewMap->Repaint();                                               
Изменено: Анастасия - 05.09.2018 09:49:24
 
Направление векторного объекта задает вторая точка метрики.
 
То есть когда есть первая точка, если вы зададите расстояние до второй и азимут на неё, то сможете вычислить вторую точку, используя функцию:

Код
 // Прямая геодезическая задача на эллипсоиде
 // Для расстояния не более 250 км координаты определяются с ошибкой до 0,0001",
 // а обратный азимут - до 0,001", что соответствует триангуляции 1 класса
 // Способ вспомогательной точки по методу Красовского
 // Метод предназначен для расстояний меньше радиуса Земли
 // Вычисления выполняются на текущем эллипсоиде, установленном
 // в документе - mapSetDocProjection
 // Если hmap равен 0, то вычисления выполняются на эллипсоиде WGS-84
 // hmap     - идентификатор открытых данных
 // b1,l1    - геодезические координаты исходной точки
 // angle1   - азимут на вторую точку
 // distance - расстояние до второй точки
 // b2,l2    - рассчитанные координаты второй точки
 // angle2   - рассчитанный азимут со второй точки на первую
 //            (если angle2 равен 0, то обратный азимут не вычисляется)
 // При ошибке в параметрах возвращает 0

_MAPIMP long int _MAPAPI mapDirectPositionComputation(HMAP hmap,
                                                      double b1, double l1, double angle1,
                                                      double distance,
                                                      double *b2, double *l2, double *angle2);
После чего необходимо добавить вторую точку в метрику, ну либо изменить уже существующую там вторую точку на вновь вычисленную.
 
А если у меня есть только одна точка, но сам объект мне необходимо, чтобы был повернут на определенный градус это сделать не возможно? Я предполагала, что объект может быть повернут, относительно одной точки (своего центра).

Пока совсем не понятно, зачем тогда служит метрика SEMMARKANGLE?
Изменено: Анастасия - 05.09.2018 13:57:09
 
Вы задаете первую точку объекта - X1, Y1, затем задаете вторую точку : X2 = X1 + 1000(м) * sin(угол поворота); Y2 = Y1 + 1000(м) * cos(угол поворота)

По поводу семантики, можете посмотреть на карте shape.sitx из состава ГИС Оператор для AstraLinux SE знак с номером 521.
 
У меня есть подготовленное векторное изображение, добавленное в  классификатор карты. При программном вращении изображения функцией mapRoatateObject изображение вращается относительно точки 0, 0  изображения. Я хочу, чтобы изображение вращалось относительно середины изображения.

Изображение размером (60, 60). Получается точку вращения с  координатами Xcurrent Ycurrent  в метрах (я использую систему СК42) я  должна превратить в пиксели на экране mapPicturetoPlane затем добавить  половину пикселей изображения, в данном случае Xcurrent+60/2,  Ycurrent+60/2 и эти пиксели обратно превратить в метры а потом снова  вращать изображение.


Подскажите более простой способ вращения векторного  изображения относительно его середины?
Изменено: Анастасия - 13.05.2019 15:54:59
Страницы: Пред. 1 2 3 4 След.
Читают тему (гостей: 1)



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

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