Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. QML and Qt Quick
  4. Rounding Error when converting double values from TextField to Coordinates for MapItemView
Forum Updated to NodeBB v4.3 + New Features

Rounding Error when converting double values from TextField to Coordinates for MapItemView

Scheduled Pinned Locked Moved Unsolved QML and Qt Quick
1 Posts 1 Posters 217 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • S Offline
    S Offline
    SgtSherif
    wrote on last edited by
    #1

    I'm trying to add coordinates on a map in QML and then pass it to C++ to eventually send to a drone. I'm using a ListModel to store the coordinates but I'm having problems with the accuracy of the waypoint.

    ListModel {
        id:wpModel
    }
    
    Plugin {
        id: mapPlugin
        name: "mapboxgl"
     }
    

    The map is setup in QML like this

    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
    
                }
            }
    
        }
    

    I then have two textfields with a DoubleValidator for the Latitude and Longitude of the waypoint.

    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
    

    And finally a button which appends the waypoint to the model

      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
    

    The parsing of the startLon and startLat returns the same value as startLatInput.text and startLonInput.text but once I append to wpModel, the value changes and is completely different to my input. This is what an example output looks like:

    If we take, the following coordinate 52.756105, -1.247304 which is at the edge of the field on google maps and the output for MapQuickItem becomes

    qml: 52.75859356721886
    qml: -1.2512258791688566
    

    which is metres away from the intended waypoint. The same behaviour is found if I just hardcode the coordinates into a MapQuickItem i.e.

    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
    
        }
    

    However, if I physically click on the waypoint I want using a mouse, I get what I or close to it anyway,

    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)  
          }
    
      }
    

    This returns an output of

    qml: 52.75604121576361
    qml: -1.247375123866334
    

    which is kind of acceptable.

    Can someone please elaborate on what I'm doing wrong here?

    1 Reply Last reply
    0

    • Login

    • Login or register to search.
    • First post
      Last post
    0
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Get Qt Extensions
    • Unsolved