Ошибка округления модели QML MapItemView для координат, введенных из TextField

Я пытаюсь добавить координаты на карту в QML, а затем передать их на C++, чтобы в конечном итоге отправить их на дрон. Я используюListModel чтобы сохранить координаты, но у меня проблемы с точностью путевой точки.

ListModel {
    id:wpModel
}

Plugin {
    id: mapPlugin
    name: "mapboxgl"
 }

Карта настроена в QML следующим образом

 Map{
        id: map
        anchors.fill:parent
        plugin: mapPlugin
        center: QtPositioning.coordinate(48.854314, 2.292297)
        zoomLevel:18
        copyrightsVisible: false
        tilt: 45

        MapItemView{
            model:wpModel
            delegate:MapQuickItem{
                coordinate{
                    latitude: lat
                    longitude: lon
                } 
                sourceItem: Image{
                    id:waypointMarker
                    opacity: .75
                    sourceSize.width:80
                    sourceSize.height:80
                    source: "qrc:///marker-red.png"
                }  
            anchorPoint.x: waypointMarker.width/2
            anchorPoint.y: waypointMarker.height

            }
        }

    }

Затем у меня есть два текстовых поля с DoubleValidator для широты и долготы путевой точки.

RowLayout{
     Label{
     text: "Start Lat:"
      } 
     TextField{
        id: startLatInput
        validator:DoubleValidator{
             decimals:15
             notation:DoubleValidator.ScientificNotation
        }
     }
     Label{
       text:"Start Lon:"
     }
     TextField{
        id: startLonInput
        validator:DoubleValidator{
        decimals:15
        notation:DoubleValidator.ScientificNotation
        }
      }  
  } //RowLayout

И, наконец, кнопка, которая добавляет путевую точку к модели.

  Button{
     id: wpOkButton
     text: "OK"
     onClicked:{
        var startLat = parseFloat(startLatInput.text)
        var startLon = parseFloat(startLonInput.text)
        var val = map.toCoordinate(startLat, startLon)
        wpModel.append({lat: startLatInput.text, lon: startLonInput.text})                                                         
        }
   } // okButton

Разбор startLon а также startLat возвращает то же значение, что и startLatInput.text а также startLonInput.text но как только я добавлю к wpModel, значение меняется и полностью отличается от моего ввода. Вот как выглядит пример вывода:

Если взять, то координата 52.756105, -1.247304 который находится на краю поля на картах Google, а вывод для MapQuickItem становится

qml: 52.75859356721886
qml: -1.2512258791688566

который находится в метрах от предполагаемой путевой точки. Такое же поведение наблюдается, если я просто жестко закодирую координаты вMapQuickItem т.е.

 MapQuickItem{
        sourceItem: Image{
            id:sample
            opacity: .75
            sourceSize.width:80
            sourceSize.height:80
            source: "qrc:///marker-red.png"
        }
        coordinate: QtPositioning.coordinate(52.756105, -1.247304)
        anchorPoint.x: sample.width/20
        anchorPoint.y: sample.height

    }

Однако, если я физически щелкаю мышью по нужной путевой точке, я все равно получаю то, что я или близко к ней,

    MouseArea{
    anchors.fill:parent
    focus:true
    hoverEnabled:false
    acceptedButtons: Qt.LeftButton

        onPressAndHold: {
               var pos = map.toCoordinate(Qt.point(mouse.x,mouse.y));                 
               console.log(pos.latitude)
               console.log(pos.longitude)  
        }

    }

Это возвращает результат

qml: 52.75604121576361
qml: -1.247375123866334

что вроде приемлемо.

Может кто-нибудь уточнить, что я здесь делаю не так?

0 ответов

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