qt qml 高德地圖--WebAPI 獲取靜態地圖
高德地圖提供了很多Web API,本文展示如何使用Qt + qml 獲取靜態地圖
效果圖:
原理:
QNetworkAccessManager通過get方法傳送一個URL請求出去,高德的伺服器接收到這個請求,會把對應的圖片以流的方式回覆給你,你接收到資料後,把資料放到一個QQuickImageProvider裡面,然後讓qml獲取這個QQuickImageProvider的圖片就好了。
下面貼程式碼:
MapProvider.hpp
#pragma once
#include <QFile>
#include <QDebug>
#include <QQuickImageProvider>
class MapProvider : public QQuickImageProvider {
public:
MapProvider()
: QQuickImageProvider(QQuickImageProvider::Pixmap) {
//pixmap 初始化為800 x 600 的紅色圖片
mPixmap = QPixmap(800, 600);
mPixmap.fill(QColor("red"));
}
//過載, qml就是通過這個函式得到的圖片
virtual QPixmap requestPixmap(const QString &id, QSize *size, const QSize &requestedSize) override {
return mPixmap;
}
//將資料設定到pixmap中
void setData(QByteArray data) {
mPixmap.loadFromData(data);
}
private:
QPixmap mPixmap;
};
Map.hpp
#pragma once
#include <memory>
#include <cstdlib>
#include <functional>
#include <QUrl>
#include <QObject>
#include <QNetworkReply>
#include <QNetworkRequest>
#include <QNetworkAccessManager>
#include "MapProvider.hpp"
class Map : public QObject
{
Q_OBJECT
public:
explicit Map(QObject *parent = nullptr);
//獲取 provider
MapProvider * getProvider();
//INVOKABLE 開放給qml,用來發起GET 請求
Q_INVOKABLE void get(QUrl url);
signals:
void replayReady();
public slots:
void replaySlot(QNetworkReply *reply);
private:
//C++ std 風格的智慧指標
std::shared_ptr<QNetworkAccessManager> mManager;
std::shared_ptr<MapProvider> mMapProvider;
};
Map.cpp
#include "Map.hpp"
Map::Map(QObject *parent) : QObject(parent)
{
//指標初始化
mManager = std::make_shared<QNetworkAccessManager>();
mMapProvider = std::make_shared<MapProvider>();
//連線訊號 槽
connect(mManager.get(), &QNetworkAccessManager::finished, this, &Map::replaySlot);
}
MapProvider *Map::getProvider()
{
return mMapProvider.get();
}
void Map::get(QUrl url)
{
//GET 請求
mManager->get(QNetworkRequest(QUrl(url)));
}
// GET請求的響應處理
void Map::replaySlot(QNetworkReply *reply)
{
//讀取全部資料,寫入provider
mMapProvider->setData(reply->readAll());
//通知qml,重新整理圖片
emit replayReady();
}
Main.cpp
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQuickView>
#include <QQmlContext>
#include <QQmlEngine>
#include "Map.hpp"
#include "MapProvider.hpp"
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQuickView view;
Map map;
//新增Provider,注意字串中的大小寫,qml中使用要一致
view.engine()->addImageProvider(QLatin1String("Provider"), map.getProvider());
view.engine()->rootContext()->setContextProperty("IMap", &map);
view.setSource(QUrl("qrc:/Qml/Main.qml"));
view.show();
return app.exec();
}
Main.qml (注意把key換掉,我的key就不貼出來了)
import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.3
Item {
visible: true
width: 1024
height: 768
readonly property var key : "此處寫上你的key"
Connections {
target: IMap
onReplayReady: {
image.source = "image://Provider";
}
}
Image {
id: image
width: 800
height: 600
anchors.centerIn: parent
Component.onCompleted: {
var url = "http://restapi.amap.com/v3/staticmap?location=116.481485,39.990464&zoom=10&size=800*600&markers=mid,,A:116.481485,39.990464&key=" + key;
IMap.get(url);
}
}
}
相關推薦
qt qml 高德地圖--WebAPI 獲取靜態地圖
高德地圖提供了很多Web API,本文展示如何使用Qt + qml 獲取靜態地圖 效果圖: 原理: QNetworkAccessManager通過get方法傳送一個URL請求出去,高德的伺服器接收到這個請求,會把對應的圖片以流的方式回覆給你,你接收
android跳轉手機百度高德騰訊谷歌地圖、地圖傳座標、座標偏移、base64解碼相關
調起百度的native app http://developer.baidu.com/map/uri-introandroid.htm#idmykey47 座標轉換 http://api.map.baidu.com/ag/coord/convert?from=2&
包含高德,百度等地圖 apikey 專案打包 relese debug keystore
1.debug版, 不同編譯環境,sha1不同,需要自己提取; 在android studio terminal中輸入 keytool -list -v -keystore C:\Users\Ad
關於通過高德js-api獲取定位在iPhone和Android手機上不同的表現
開發了一個工單系統,其中有幾處需要上傳手機的當前經緯度,程式碼不復雜,直接引用了高德lbs服務的js-api介面,前端程式碼參考: <div id="map2" class="map"></div>
php 高德 根據地址獲取經緯度|| 根據 經緯度獲取地址
/** * 根據地址 獲取經緯度 * @param $address * @return mixed */ function addresstolatlag($address){ $url='http://restapi.amap.com/v3/geoco
高德使用谷歌的地圖 衛星標準進行切換
shee 進行 .cn 1.0 疊加 pad mar css visible 高德地圖使用谷歌瓦片的方法 <!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-
android ------ 實現高德定位並獲取相應資訊 ( 最新版高德SDK 和 Android SDK版本)
Android開發專案時常常會遇到定位這個功能, 很久以前寫過一篇了,官方也更新了一些東西,我也更新下 以前使用的是jar包 匯
高德地圖獲取當前屏幕中心點的經緯度
java sso tar () 附近 初始 chan map對象 protected 公司有個需求就是要隨著屏幕的改變而載入附近的商戶信息. 那麽高德地圖獲取當前屏幕中心點的經緯度呢? 核心方法:aMap.setOnCameraChangeLis
繪制靜態地圖API-高德地圖
linux環境 ade verify != transfer file trim tour put 1 高德靜態地圖鏈接 http://lbs.amap.com/api/webservice/guide/api/staticmaps 2 <?php /**
基於vue 2.X和高德地圖的vue-amap組件獲取經緯度
實例 con ati ble off 組件 posit return play 今天我就講了一下怎麽通過vue和高德地圖開發的vue-amap組件來獲取經緯度。 這是vue-amap的官網文檔:https://elemefe.github.io/vue-amap/#
知道經緯度來調高德地圖的官網API來獲取所在的位置(逆地理編碼)
第一步:首先要有一個key值 高德的參考 https://lbs.amap.com/api/webservice/guide/api/georegeo/?sug_index=2 第二步:調介面 https://restapi.amap.com/v3/geocode/regeo?key
高德地圖 ——獲取定位資訊
上一篇文章已經講解了如何整合高德地圖SDK:跳轉連結 如何你想獲取附近位置資訊 關鍵字檢索poi:跳轉這兒 下面我們介紹下定位功能: 配置AndroidManifest檔案 上一篇文章已經講解清單檔案配置: 對應的許可權,服務和key值 注意:
(簡單詳細)React Native獲取手機當前經緯度,(通過高德地圖介面)獲取當前地理位置
要獲取手機的當前地理位置,首先要獲得經緯度,然後通過逆地理編碼獲得位置資訊 地理編碼/逆地理編碼 API 是通過 HTTP/HTTPS 協議訪問遠端服務的介面,提供結構化地址與經緯度之間的相互轉化的能力。 1.AndroidManifest.xml加入許可權 <uses-per
高德地圖API獲取的經緯度轉為百度地圖經緯度顯示
通過高德地圖API獲取的經緯度顯示在百度地圖上會有位置的偏差,原因是百度地圖對經緯度進行了加密,通過以下方法對經緯度進行轉換可在百度地圖上精準顯示 private double[] gaoDeToBaidu(double gd_lon, double gd_lat) { double[]
java api從高德地圖獲取某個位置的經緯度
import com.fasterxml.jackson.databind.JsonNode; import com.ning.http.client.AsyncHttpClient; import com.ning.http.client.AsyncHttpClientConfig; impor
高德地圖根據經緯度陣列獲取所有的點標記
具體效果: 放大後: 具體程式碼如下: <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-C
vue-amap 高德地圖定位 點選獲取經緯度和具體地址的使用
官方文件地址: 點這裡!! 經緯度獲取只要通過點選事件就可以通過e.lnglat來獲取,然後就是外掛Geocoder使用了。在main.js中initAMapApiLoader中寫入:AMap.Geocoder,注意 官方文件中有提示: 所以外掛中使用
高德地圖和百度地圖獲取當前位置經緯度
高德 匯入高德js mapObj = new AMap.Map('iCenter'); mapObj.plugin('AMap.Geolocation', function () { geolocation = new AMap.Geolocation({ e
(自我學習篇之高德地圖)使用與獲取marker的點選事件
獲取之後下載SDK然後倒入libs用什麼導什麼我先簡單說一個2D的實現與獲取marker的點選事件 3d的多了一步 OK就可以使用了 注意許可權 <uses-permission android:name="android.permission
php+高德地圖webapi 高德jsapi 實現 當前位置與目標位置距離 並按照距離排序(座標逆轉換)
<script type="text/javascript" src="https://api.map.baidu.com/api?v=2.0&ak='自己申請'&s=1"></script> <script type="text/javas