Ошибка округления модели 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
что вроде приемлемо.
Может кто-нибудь уточнить, что я здесь делаю не так?