qt qml 高德地图--WebAPI 获取静态地图
高德地图提供了很多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 获取静态地图相关推荐
- 把通过高德静态地图API获取的地图图片,拼接成一张大地图图片
默认采用: zoom=17&size=1024*1024&scale=2 高德地图api参数.获取的是2048*2048大小的图片,修改参数之后需要调整图片截取和拼接的偏移量 程序中部 ...
- vue中使用echarts结合百度地图制作地图(引入百度地图、获取百度地图实例、设置百度地图)
1.初始化echarts以及例子可以看管网的 地址:https://echarts.apache.org/examples/zh/editor.html?c=map-polygon 2说下我遇到的问题 ...
- 移动地图时地图自动获取当前地图中心地区
原文链接:Bougie的博客 使用百度地图时,我们发现百度地图右上角的地区名称是自动变化的.地图整个屏幕是一个矩形,为了方便计算,我们可以把地图每个城市也看成矩形,即为城市的Extent或BBox.分 ...
- Android 使用 Retrofit 保存 高德 静态地图API 获取的地图图片
1.导入包 api 'com.squareup.retrofit2:retrofit:2.3.0' // 必要retrofit依赖 api 'com.squareup.retrofit2:adapte ...
- vue中基于高德地图,获取省级地图(以安徽为例)
效果图展示 <template><div><div id="mapId" class="rescure-map"></ ...
- 【地图】高德静态地图(页面展示和导出Word)
目录 一.前言 二.静态地图样例 三.参数 四.页面展示 五.导出Word 一.前言 有时我们会遇到这样的需求:将信息标注到地图上,然后将包含地图和信息的图片展示在页面上或者导出到Word中.这样我们 ...
- 微信小程序:高德地图在小程序中的实践(含静态地图)
前言 前人栽树,后人乘凉.记录下工作的点点滴滴,让同道中人少走弯路~ 来看看需求和问题:房产相关的项目,详情中需要显示房源地址,底部要有固定的菜单(不是tabbar),房源数据过多,数据超过一屏时,m ...
- 百度地图WebAPI
百度地图WebAPI 调用百度地图WebAPI实现如下周边配套效果 可以点 这里 查看效果 首先要去百度地图开放平台 申请为百度开发者,然后得到服务秘钥(ak) WEB服务API: http://lb ...
- php地图封装,百度地图应用封装——静态图api
将百度地图封装成一个扩展类,可以随便调用, map类包含2个方法,获取经纬度和获取通过经纬度获取静态地图 在前台页面直接写入img地址 最后前台展示 Map.php类 /** * Created by ...
最新文章
- APP自动化测试过程概述
- Linux内核网络丢包查看工具dropwatch的安装和使用
- Android Studio 一些方便使用的设置
- 使用tinylog 1.1改进您在Java EE应用程序中的登录
- python程序出现了异常会执行哪个语句,python中的异常是什么?应该怎么处理异常?...
- python机器学习库sklearn——特征提取
- Ajax控件和类库简析
- 64位 Windows PLSQL Developer客户端配置方法
- 3.在LCD12864上显示属于你的文字
- 第九届蓝桥杯国赛C++B组口胡题解
- dhtmlxgantt pro 7.1.10 | dhtmlxgantt 专业版 7.1.10
- 软件工程之软件质量管理(SQA)
- 兰州理工大学计算机考研好考吗,兰州理工大学考研难吗
- 【LeetCode】马三来刷题之Remove Duplicates from Sorted Array
- 2086689-01-0,N-(Azido-PEG2)-N-Boc-PEG3-acid末端羧酸可在活化剂(例如EDC或HATU)存在下与伯氨基反应
- 对比分析折半查找与Fibonacci查找算法
- android制作类似支付圆圈和打钩界面ProgressWheel
- Magnetically actuated soft capsule robot for fine-needle biopsy
- 除了USDT,还能用什么,传说中的“USDT暴雷”是否成真?
- K8S部署skywalking
热门文章
- Novell开放工作组套件(转)
- HTML form 垂直水平居中
- 想学Python的小东的第一篇博客
- 人体姿势估计论文:Simple and Lightweight Human Pose Estimation及其PyTorch实现
- Cetus:Connection error when read delay from RO backend:
- 金融组织数字化研发管理的12种武器
- SpringCloudAlibaba--Nacos作为服务注册中心、各种注册中心对比、Nacos的AP和CP模式切换
- ResultSet详解
- 八、Vue中使用 html2canvas 和 canvas2image 实现网页截屏
- C# - partial 关键字