高德地图提供了很多Web API,本文展示如何使用Qt + qml 获取静态地图

静态地图Web API https://lbs.amap.com/api/webservice/guide/api/staticmaps

效果图:

原理:
QNetworkAccessManager通过get方法发送一个URL请求出去,高德的服务器接收到这个请求,会把对应的图片以流的方式回复给你,你接收到数据后,把数据放到一个QQuickImageProvider里面,然后让qml获取这个QQuickImageProvider的图片就好了。

附一个代码下载链接(需要1分)
http://download.csdn.net/detail/d759378563/9920406

下面贴代码:

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);//获取 providerMapProvider * 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)
{//读取全部数据,写入providermMapProvider->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.3Item {visible: truewidth: 1024height: 768readonly property var key : "此处写上你的key"Connections {target: IMaponReplayReady: {image.source = "image://Provider";}}Image {id: imagewidth: 800height: 600anchors.centerIn: parentComponent.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 获取静态地图相关推荐

  1. 把通过高德静态地图API获取的地图图片,拼接成一张大地图图片

    默认采用: zoom=17&size=1024*1024&scale=2 高德地图api参数.获取的是2048*2048大小的图片,修改参数之后需要调整图片截取和拼接的偏移量 程序中部 ...

  2. vue中使用echarts结合百度地图制作地图(引入百度地图、获取百度地图实例、设置百度地图)

    1.初始化echarts以及例子可以看管网的 地址:https://echarts.apache.org/examples/zh/editor.html?c=map-polygon 2说下我遇到的问题 ...

  3. 移动地图时地图自动获取当前地图中心地区

    原文链接:Bougie的博客 使用百度地图时,我们发现百度地图右上角的地区名称是自动变化的.地图整个屏幕是一个矩形,为了方便计算,我们可以把地图每个城市也看成矩形,即为城市的Extent或BBox.分 ...

  4. Android 使用 Retrofit 保存 高德 静态地图API 获取的地图图片

    1.导入包 api 'com.squareup.retrofit2:retrofit:2.3.0' // 必要retrofit依赖 api 'com.squareup.retrofit2:adapte ...

  5. vue中基于高德地图,获取省级地图(以安徽为例)

    效果图展示 <template><div><div id="mapId" class="rescure-map"></ ...

  6. 【地图】高德静态地图(页面展示和导出Word)

    目录 一.前言 二.静态地图样例 三.参数 四.页面展示 五.导出Word 一.前言 有时我们会遇到这样的需求:将信息标注到地图上,然后将包含地图和信息的图片展示在页面上或者导出到Word中.这样我们 ...

  7. 微信小程序:高德地图在小程序中的实践(含静态地图)

    前言 前人栽树,后人乘凉.记录下工作的点点滴滴,让同道中人少走弯路~ 来看看需求和问题:房产相关的项目,详情中需要显示房源地址,底部要有固定的菜单(不是tabbar),房源数据过多,数据超过一屏时,m ...

  8. 百度地图WebAPI

    百度地图WebAPI 调用百度地图WebAPI实现如下周边配套效果 可以点 这里 查看效果 首先要去百度地图开放平台 申请为百度开发者,然后得到服务秘钥(ak) WEB服务API: http://lb ...

  9. php地图封装,百度地图应用封装——静态图api

    将百度地图封装成一个扩展类,可以随便调用, map类包含2个方法,获取经纬度和获取通过经纬度获取静态地图 在前台页面直接写入img地址 最后前台展示 Map.php类 /** * Created by ...

最新文章

  1. APP自动化测试过程概述
  2. Linux内核网络丢包查看工具dropwatch的安装和使用
  3. Android Studio 一些方便使用的设置
  4. 使用tinylog 1.1改进您在Java EE应用程序中的登录
  5. python程序出现了异常会执行哪个语句,python中的异常是什么?应该怎么处理异常?...
  6. python机器学习库sklearn——特征提取
  7. Ajax控件和类库简析
  8. 64位 Windows PLSQL Developer客户端配置方法
  9. 3.在LCD12864上显示属于你的文字
  10. 第九届蓝桥杯国赛C++B组口胡题解
  11. dhtmlxgantt pro 7.1.10 | dhtmlxgantt 专业版 7.1.10
  12. 软件工程之软件质量管理(SQA)
  13. 兰州理工大学计算机考研好考吗,兰州理工大学考研难吗
  14. 【LeetCode】马三来刷题之Remove Duplicates from Sorted Array
  15. 2086689-01-0,N-(Azido-PEG2)-N-Boc-PEG3-acid末端羧酸可在活化剂(例如EDC或HATU)存在下与伯氨基反应
  16. 对比分析折半查找与Fibonacci查找算法
  17. android制作类似支付圆圈和打钩界面ProgressWheel
  18. Magnetically actuated soft capsule robot for fine-needle biopsy
  19. 除了USDT,还能用什么,传说中的“USDT暴雷”是否成真?
  20. K8S部署skywalking

热门文章

  1. Novell开放工作组套件(转)
  2. HTML form 垂直水平居中
  3. 想学Python的小东的第一篇博客
  4. 人体姿势估计论文:Simple and Lightweight Human Pose Estimation及其PyTorch实现
  5. Cetus:Connection error when read delay from RO backend:
  6. 金融组织数字化研发管理的12种武器
  7. SpringCloudAlibaba--Nacos作为服务注册中心、各种注册中心对比、Nacos的AP和CP模式切换
  8. ResultSet详解
  9. 八、Vue中使用 html2canvas 和 canvas2image 实现网页截屏
  10. C# - partial 关键字