(Скопировано из моей статьи в блоге здесь: http://blog.mikeasoft.com/2020/06/22/qt-qml-maps-using-the-osm-plugin-with-api-keys/)
Это не очевидно, но после небольшого изучения того, как работает плагин OSM, я обнаружил механизм с помощью которого ключ API может быть предоставлен серверам листов, которым он нужен.
Когда плагин OSM инициализируется, он связывается с репозиторием поставщиков Qt, который сообщает ему, какие URL-адреса использовать для каждого типа карты. Расположение репозитория поставщиков можно настроить с помощью свойства плагина OSM osm.mapping.providersrepository.address , поэтому все, что нам нужно сделать, чтобы использовать наш ключ API, - это настроить собственный репозиторий поставщиков с URL-адресами, которые включите наш ключ API в качестве параметра. Сам репозиторий представляет собой просто набор JSON файлов с конкретными c именами ( цикл, аренда велосипеда, походы, найм пеших туристов, ночной транзит, аренда ночного транспорта, спутник, улица, улица -hires, terrain, terrain-hires, transit, transit-hires ), каждый из которых соответствует типу карты. Файлы * -hires предоставляют URL-адреса для тайлов с удвоенным нормальным разрешением для дисплеев с высоким разрешением.
Например, это файл цикла, обслуживаемый репозиторием поставщиков Qt по умолчанию:
{
"UrlTemplate" : "http://a.tile.thunderforest.com/cycle/%z/%x/%y.png",
"ImageFormat" : "png",
"QImageFormat" : "Indexed8",
"ID" : "thf-cycle",
"MaximumZoomLevel" : 20,
"MapCopyRight" : "<a href='http://www.thunderforest.com/'>Thunderforest</a>",
"DataCopyRight" : "<a href='http://www.openstreetmap.org/copyright'>OpenStreetMap</a> contributors"
}
Чтобы предоставить ключ API с нашими запросами плитки, мы можем просто изменить UrlTemplate:
"UrlTemplate" : "http://a.tile.thunderforest.com/cycle/%z/%x/%y.png?apikey=YOUR_API_KEY",
Automati c настройка репозитория
Я создал простой инструмент для настройки полного репозитория с использованием настраиваемого ключа API здесь: https://github.com/Elleo/qt-osm-map-providers
- Сначала получите ключ API от https://www.thunderforest.com/docs/apikeys/
- Следующее клонирование моего репозитория:
git clone https://github.com/Elleo/qt-osm-map-providers.git
- Выполнить:
./set_api_keys.sh your_api_key
(заменив your_api_key ключом, полученным на шаге 1) - Скопируйте файлы из этого репозитория на свой веб-сервер ( например, http://www.mywebsite.com/osm_repository)
- Установите свойство osm.mapping.providersrepository.address, чтобы оно указывало на настройку местоположения на шаге 4 (см. пример QML ниже)
Пример QML
Вот быстрый пример приложения QML, которое будет использовать настроенный нами пользовательский репозиторий:
import QtQuick 2.7
import QtQuick.Controls 2.5
import QtLocation 5.10
ApplicationWindow {
title: qsTr("Map Example")
width: 1280
height: 720
Map {
anchors.fill: parent
zoomLevel: 14
plugin: Plugin {
name: "osm"
PluginParameter { name: "osm.mapping.providersrepository.address"; value: "http://www.mywebsite.com/osm_repository" }
PluginParameter { name: "osm.mapping.highdpi_tiles"; value: true }
}
activeMapType: supportedMapTypes[1] // Cycle map provided by Thunderforest
}
}
Снимок экрана с примером карты QML