如何在 QML-Map 上获取真实坐标

Posted

技术标签:

【中文标题】如何在 QML-Map 上获取真实坐标【英文标题】:How to get real Coordinates on QML-Map 【发布时间】:2017-10-05 09:06:26 【问题描述】:

我一直在尝试使用 MouseArea 从我的 QML 地图中获取地图坐标。但问题是我只能得到鼠标的坐标。它告诉我鼠标位置在窗口上的坐标,而不是我在实际地图上单击的坐标。我不知道如何更好地解释它。这是我的代码的一部分:

 MouseArea
            id: mouseArea
            property var positionInRoot: mapFromItem(myItem, mouseX, mouseY)
            anchors.fill: parent
            acceptedButtons: Qt.LeftButton
            hoverEnabled: true
            onClicked: 
                console.warn("Coordinates: " + mouseArea.positionInRoot)
            
        

我现在的问题是是否可以获得我点击鼠标的地图坐标?如果是,我该怎么做?

【问题讨论】:

【参考方案1】:

您应该使用 QML 映射的toCoordinate 方法。

mapFromItem / mapToItem 用于将一个项目中的一个点映射到另一个项目的坐标系,但我们谈论的是 QML 项目的 (x, y) 而不是 QtPosition 纬度、经度。但是,如果您的 MouseArea 和 Map 的 x/y 位置不同,您仍然需要它们

这是一个在鼠标光标下显示带有 lat 和 lon 的标签的示例。

Map 
    id: map
    anchors.fill: parent
    plugin: mapPlugin


MouseArea

    anchors.fill: map
    hoverEnabled: true
    property var coordinate: map.toCoordinate(Qt.point(mouseX, mouseY))
    Label
    
        x: parent.mouseX - width
        y: parent.mouseY - height - 5
        text: "lat: %1; lon:%2".arg(parent.coordinate.latitude).arg(parent.coordinate.longitude)
    

如果您想以degrees minutes second 格式显示坐标,您可以使用如下帮助器:

function decimalToMinutes(value, isLat)

    var letter = isLat?value>=0?"N":"S":value>=0?"E":"W"
    var degrees = Math.floor(value)
    var minutes = Math.floor((value-degrees)*60)
    var seconds = ((value-degrees)*3600 - 60*minutes).toFixed(1)
    return "%1° %2' %3\" %4".arg(degrees).arg(minutes).arg(seconds).arg(letter)


function minutesToDecimal(value)

    var myRegexp = /(\d+)° (\d+)' (\d+(?:\.\d+)?)" ([NSEW])/g;
    var match = myRegexp.exec(value)
    if(match == null)
        return 0
    return ((match[4]=="N"||match[4]=="E")?1:-1)*(Number(match[1]) +Number( match[2]/60) + Number(match[3]/3600))


function coordinateToString(coordinate)

      return decimalToMinutes(coordinate.latitude, true) + " " + decimalToMinutes(coordinate.longitude, false)

【讨论】:

以上是关于如何在 QML-Map 上获取真实坐标的主要内容,如果未能解决你的问题,请参考以下文章

如何绘制围绕中心坐标相对于设备旋转的真实世界坐标?

iOS-地理坐标转换,原生地图获取的原始坐标转换为地图真实坐标

如何在 Fabric.js 上获取鼠标坐标?

Python,Tkinter:如何在可滚动画布上获取坐标

MFC如何获取控件在对话框上的位置坐标

在JavaFX中获取节点的真实位置