Qt QML Проблема с вращением MapItem

У меня есть карта QML OSM и MapQuickItem с текстовым исходным элементом:

      MapQuickItem {
            property alias rulerRotationAngle: rulerRotation.angle
            id: rulerTextMapItem
            visible: false
            width: 2
            height: 2
            transform: Rotation {
                id: rulerRotation
                origin.x: rulerText.width/2;
                origin.y: rulerText.height/2;
                angle: 0
            }
            anchorPoint.x: rulerText.width/2
            anchorPoint.y: rulerText.height/2
            z:5
            sourceItem: Text {
                id: rulerText;               horizontalAlignment: Text.AlignHCenter
                verticalAlignment: Text.AlignVCenter
                color: Material.color(Material.Amber, Material.Shade100)
                text: "0.0 km";
            }
        }

У меня также есть две точки (QtPositioning.coordinate), и я хочу, чтобы текст вращался в зависимости от угла прямой линии (MapPolyLine), проведенной между этими точками:

      function drawRuler()
    {
        rulerLine.path = [];
        rulerLine.addCoordinate(r_firstpoint);
        rulerLine.addCoordinate(r_secondpoint);
        rulerTextMapItem.visible = true;
        rulerTextMapItem.coordinate = QtPositioning.coordinate((r_firstpoint.latitude+r_secondpoint.latitude)/2, (r_firstpoint.longitude+r_secondpoint.longitude)/2);
        var atan = Math.atan2(r_secondpoint.longitude-r_firstpoint.longitude, r_secondpoint.latitude-r_firstpoint.latitude);
        var angle = ((atan*180)/Math.PI); //used by another MapItem
        var textAngle = angle+270;
        if(textAngle>90 & textAngle<270) { textAngle+=180 }
        if(angle>90 & angle<270) { angle +=180 }
        rulerTextMapItem.rulerRotationAngle = textAngle;
    }

Однако текст правильно поворачивается только под углами, кратными 90 градусам. Под углом 45 градусов текст отклоняется от полилинии карты примерно на 10-20 градусов. Я понятия не имею, почему это происходит, и ценю любую помощь.

Пробовал двигать transform.origin MapQuickItem - разница в углах только увеличивается. Пробовал использовать Math.Atan вместо Math.Atan2 - без разницы.

0 ответов

Другие вопросы по тегам