我有自己的本地 Z/X/Y 地图图块服务器,并希望将其用作 QML 应用程序中的地图背景。查看示例代码,似乎这是通过以下方式完成的:-
Plugin {
id: osmPlugin
name: "osm"
}
Run Code Online (Sandbox Code Playgroud)
所以我需要编写自己的插件。但文档似乎很少,我找不到 osm 版本的源代码或安装说明。
这是相对容易做到的,还是可以在不编写新插件的情况下完成?
我尝试将 QML 地图项(例如 MapQuickItem 或 MapCircle)从 C++ 添加到我的地图中。不幸的是,他们没有出现在地图上。只需使用 QML 矩形即可使用相同的代码。rect v1 是用于测试其是否有效的矩形。rect v2 是不起作用的mapCircle。当我将圆 QML 代码 1:1 添加到地图 QML 代码中时,它工作正常。
主要.cpp:
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQuickView *view = new QQuickView;
view->setSource(QUrl("qrc:/map.qml"));
QQmlComponent compRect (view->engine(), QUrl("qrc:/rect.qml"));
view->setWidth(1000);
view->setHeight(650);
view->setTitle("GUI");
QQuickItem *map = view->findChild<QQuickItem*>("map1");
QQuickItem *rect = qobject_cast<QQuickItem*>(compRect.create(view->rootContext()));
rect->setParentItem(map);
rect->setParent(map); //know this is not for visual objects, just for test
view->show();
return app.exec();
}
Run Code Online (Sandbox Code Playgroud)
直方图.qml v1
import QtQuick 2.14
import QtLocation 5.14
import QtPositioning 5.14
Rectangle …Run Code Online (Sandbox Code Playgroud) 我想用QAbstractListModel. 似乎有两个 Qml 工具适合于此,MapItemView[1] 和Repeater[2]。更Repeater强大(例如,它允许嵌套模型) - 那么有什么理由使用 theMapItemView代替 a Repeater?
问候,
[1] http://doc.qt.io/qt-5/qml-qtlocation-mapitemview.html
[2] http://doc.qt.io/qt-5/qml-qtquick-repeater.html
MapItemView源:http://code.qt.io/cgit/qt/qtlocation.git/tree/src/location/declarativemaps/qdeclarativegeomapitemview.cpp
转发器源:http://code.qt.io/cgit/qt/qtdeclarative.git/tree/src/quick/items/qquickrepeater.cpp
我正在使用 OSM 和 QML 应用程序的地图插件。我map.activeMapType = map.supportedMapTypes[currentIndex]在 ComboBox 中使用来在地图区域上显示地图提供程序支持的地图类型。这里地图插件使用"here.app_id"和"here.token"参数。但对于 OSM 插件,地形、交通和除街道地图图块之外的其他图块显示“需要 API 密钥”。我从Thunderforest.com获得了 API 密钥。使用该参数时,仍然显示“需要 API Key”:
ComboBox {
id: selectmap
width: parent.width
model:map.supportedMapTypes
textRole:"description"
onCurrentIndexChanged:{
map.activeMapType = map.supportedMapTypes[currentIndex]
}
}
Plugin {
id: pluginOSM
name: "osm"
PluginParameter {
name: "osm.mapping.providersrepository.address";
// name: "osm.geocoding.host"; (also didn't work)
value: "https://tile.thunderforest.com/transport/{z}/{x}/{y}.png?apikey=<my_api_key>" }
}
Run Code Online (Sandbox Code Playgroud)
我还从http://maps-redirect.qt.io/osm/5.8/站点下载了地形文件参数,以便与 qrc 一起使用,如下所示:
import QtQuick 2.6
import QtQuick.Controls 2.0
import QtLocation 5.12
import QtPositioning 5.12
ApplicationWindow{
id: root
width: …Run Code Online (Sandbox Code Playgroud) 我正在努力在 HERE 插件中进行身份验证。我使用的是带有 Qt 5.9.1 Mingw 32bit 的 Windows 10,我的应用程序几乎都是用 C++ 编写的。我使用 QML 的唯一部分是关于地图。我想使用 HERE 插件,但我是 QtLocation 和插件的新手,我真的不明白我需要做什么才能在 HERE 中进行身份验证。我试图按照 HERE 网站上的指南进行操作,但我真的无法理解。
我从 qt 知道我必须用来验证 HERE 的代码如下:
Plugin {
name: "here"
PluginParameter { name: "here.app_id"; value: "myapp" }
PluginParameter { name: "here.token"; value: "abcdefg12345" }
}
Run Code Online (Sandbox Code Playgroud)
所以我需要here.app_id和here.token。
我在 HERE 站点上创建了一个帐户,并使用 REST 创建了一个项目。所以现在我有了我的APP ID参数,但我真的不明白如何将TOKEN值放入第二行。首先,对于我的具体情况,我需要创建一个 api 密钥还是一个 OAuth 2.0?
我尝试使用 Postman遵循此链接中所写的内容,最后我得到了一个非常长的tokoen,我将其复制并放入“here.token”参数中,但是当我运行该应用程序时,它给了我Invalid here.token和它不显示地图。
有人可以给我任何有关如何正确获取令牌值的提示吗?或者有人可以指点我一些链接吗?例如,是否有不同的方式使用 api 密钥而不是令牌登录?
- …