地图插件显示没有服务提供商

Map Plugin shows no service providers

我正在尝试在 QML 5.7 中呈现一个空的 Map,以便绘制地理定位多段线。但是,没有可用于提供地图数据的插件:

Map {
    anchors.fill:parent
    plugin: Plugin {
        name: "osm"
        Component.onCompleted: console.log('a',availableServiceProviders.length)
    }

    MapPolyline {
        line.color: "#299FE7"; line.width: 3
        path: parent.points
    }

    Timer {
        running:true; interval:1000
        onTriggered: console.log('b',parent.supportedMapTypes.length)
    }
}

以上输出:

qml: a  0
qml: b  0

为什么我没有任何可用的插件,我怎样才能使用一个插件?

您没有默认提供程序,因为 Qt 不强制使用特定提供程序。现在更重要的是,所有可用的服务都需要注册(并接受 agreement/ToS)才能使用他们的服务。

可以找到可用插件的列表here。 通过链接,您可以了解每个链接的具体使用设置。

在 QML 中添加提供者只是声明一个 Plugin 类型的问题,大致如下:

Plugin {
    name: <provider_name> // { "here" | "mapbox" | "osm" }
    PluginParameter { name: <param_name>; value: <param_value> }
    // other parameters
}

可以通过 QGeoServiceProvider class.

在 C++/非 QML 项目中执行完全相同的任务

介意访问MapQuestchanged few months ago, breaking the Open Street Map plugin. You now need credentials to access their service, e.g. read this comment。相关补丁已推送并合并,如上次链接评论的错误报告页面所述,并将在 Qt 5.6.2(和 Qt 5.7.1)补丁发布中提供。