Qt/C++离线地图的加载和交互/可以离线使用/百度和天地图离线/支持手机上运行
一、前言说明
在地图应用中,有很多时候是需要断网环境中离线使用的,一般会采用两种做法,一种是只下载好离线瓦片地图,然后根据不同的缩放和经纬度坐标绘制瓦片。这种方式优点是任何地图都支持,只需要拿到瓦片即可,缺点是其他的接口都需要自己处理,比如覆盖物的绘制,工作量巨大,尽管Qt的qml部分提供了location模块用于这个处理,但是功能还不是很完善,而且不支持widget,对于只会widget的我来说,歇菜。现阶段采用方式二,也就是浏览器控件加载地图的js交互来实现,优点就不说了,超过优点,缺点就一个,必须依赖浏览器控件,资源占用大。
百度地图的离线js开发包,网上到处都是,大部分都是2.0版本,这个基本上功能是齐全的,直接用就行,至于天地图,网上几乎没有,本人废了九牛二虎之力才搞定,一点点从官网趴下来的,所有支持的离线功能全部存在,非常完美,关键是掌握了这个方法思路就很好办,无论后期版本升级到多少,都可以轻轻松松实现最新版本的离线地图js开发包。离线搞定后,手机上运行离线地图就非常容易了,使用qml的浏览器控件加载离线网页即可。在手机上只有qml的浏览器组件能使用,widget的不支持,因为qml的浏览器组件使用本地浏览器内核,而不是webkit或者webengine,手机端是什么底层浏览器就是用何种浏览器。
二、相关代码
#include "frmmapqml.h"
#include "ui_frmmapqml.h"
#include "qthelper.h"
#include "maphelper.h"
#include "mapwebsocket.h"//安卓上如果提示 net::ERR_CLEARTEXT_NOT_PERMITTED 需要在AndroidManifest.xml文件的Application节点添加 android:usesCleartextTraffic="true"
frmMapQml::frmMapQml(QWidget *parent) : QWidget(parent), ui(new Ui::frmMapQml)
{ui->setupUi(this);this->initForm();this->initConfig();
}frmMapQml::~frmMapQml()
{delete ui;
}void frmMapQml::showEvent(QShowEvent *)
{//首次显示的时候自动加载/下面这种写法表示异步记载static bool isLoad = false;if (!isLoad) {isLoad = true;QMetaObject::invokeMethod(this, "loadMap", Qt::QueuedConnection);}
}void frmMapQml::initForm()
{mapObj = NULL;flag = "movePerson";//拿到qml对象qmlObj = ui->quickWidget->rootObject();//实例化websocket通信用于网页交互connect(MapWebSocket::Instance(), SIGNAL(receiveDataFromJs(QString, QString)), this, SLOT(receiveDataFromJs(QString, QString)));MapWebSocket::Instance()->listen();
}void frmMapQml::initConfig()
{MapHelper::loadMapCore(ui->cboxMapCore, AppConfig::MapCore);connect(ui->cboxMapCore, SIGNAL(currentIndexChanged(int)), this, SLOT(saveConfig()));connect(ui->cboxMapCore, SIGNAL(currentIndexChanged(int)), this, SLOT(loadMap()));ui->cboxMoveSpeed->setCurrentIndex(ui->cboxMoveSpeed->findText(QString::number(AppConfig::MoveSpeed)));connect(ui->cboxMoveSpeed, SIGNAL(currentIndexChanged(int)), this, SLOT(saveConfig()));connect(ui->cboxMoveSpeed, SIGNAL(currentIndexChanged(int)), this, SLOT(loadData()));ui->txtStartAddr->setText(AppConfig::StartAddr);connect(ui->txtStartAddr, SIGNAL(textChanged(QString)), this, SLOT(saveConfig()));ui->txtEndAddr->setText(AppConfig::EndAddr);connect(ui->txtEndAddr, SIGNAL(textChanged(QString)), this, SLOT(saveConfig()));
}void frmMapQml::saveConfig()
{AppConfig::MapCore = ui->cboxMapCore->itemData(ui->cboxMapCore->currentIndex()).toInt();AppConfig::MoveSpeed = ui->cboxMoveSpeed->currentText().toInt();AppConfig::StartAddr = ui->txtStartAddr->text().trimmed();AppConfig::EndAddr = ui->txtEndAddr->text().trimmed();AppConfig::writeConfig();
}void frmMapQml::loadMap()
{//根据不同地图内核实例化地图类MapCore mapCore = (MapCore)ui->cboxMapCore->itemData(ui->cboxMapCore->currentIndex()).toInt();MapHelper::initMapObj(this, &mapObj, mapCore);mapObj->setMapType(0);mapObj->setMapLocal(false);QString html = mapObj->load();//将生成的地图网页文件加载到qml中QString file = "file:///" + mapObj->getFileName();//安卓上放在固定的目录
#ifdef Q_OS_ANDROIDfile = QString("file:///android_asset/%1/map.html").arg(MapHelper::getMapPath(mapCOre));
#endifQMetaObject::invokeMethod((QObject *)qmlObj, "load", Q_ARG(QVariant, file));//QMetaObject::invokeMethod((QObject *)qmlObj, "loadHtml", Q_ARG(QVariant, html));ui->txtResult->clear();
}void frmMapQml::loadData()
{if (datas.count() <= 0) {return;}//生成路径轨迹QString points = datas.join(";");this->runJs(QString("clearOverlay()"));this->runJs(QString("drawRoute('%1', '#01caf4', 8, 1.0, '#ffffff')").arg(points));//生成移动对象points = datas.join("|");int speed = ui->cboxMoveSpeed->currentText().toInt();QString image = "../mapimage/move_fly.png";if (mapObj->getMapCore() == MapCore_GaoDe && mapObj->getVersionKey().startsWith("2.")) {image = "../mapimage/move_fly2.png";}this->runJs(QString("addMove('%1', '%2', %3, true, false, '%4', 48, 48)").arg(flag).arg(points).arg(speed).arg(image));
}void frmMapQml::runJs(const QString &js)
{QMetaObject::invokeMethod((QObject *)qmlObj, "runJs", Q_ARG(QVariant, js));
}void frmMapQml::receiveDataFromJs(const QString &type, const QString &result)
{if (type == "click") {QString info = QString("触发鼠标单击\n当前经纬度值: %1").arg(result);QtHelper::showMessageBoxInfo(info);} else if (type == "rightclick") {QString info = QString("触发鼠标右键\n当前经纬度值: %1").arg(result);QtHelper::showMessageBoxInfo(info);} else if (type == "dblclick") {QString info = QString("触发鼠标双击\n当前经纬度值: %1").arg(result);QtHelper::showMessageBoxInfo(info);} else if (type == "geocoderresult") {QStringList list = result.split("|");QString flag = list.first();if (flag == "startAddr") {startPoint = list.last();QString endAddr = ui->txtEndAddr->text().trimmed();this->runJs(QString("getPointByAddr('endAddr', '%1')").arg(endAddr));} else if (flag == "endAddr") {endPoint = list.last();}//两个地址都有了再开启路径规划if (!startPoint.isEmpty() && !endPoint.isEmpty()) {this->runJs(QString("searchRoute(2, '%1', '%2', '%3')").arg(0).arg(startPoint).arg(endPoint));}} else if (type == "routeresult") {QStringList list = result.split("|");QString result = MapHelper::getRouteResult(list.first().toInt(), list.last().toInt());ui->txtResult->setText(result);} else if (type == "routepoints") {datas.clear();QStringList list = result.split("|");foreach (QString data, list) {datas << data.split(";");}//有些地图内核需要延迟一点载入数据MapCore mapCore = mapObj->getMapCore();int interval = (mapCore == MapCore_BaiDuGL ? 500 : 0);QTimer::singleShot(interval, this, SLOT(loadData()));} else if (type == "movestep") {MapCore mapCore = mapObj->getMapCore();if (mapCore != MapCore_BaiDuGL && mapCore != MapCore_GaoDe) {QString point = result.split("|").last();this->runJs(QString("setCenter('%1')").arg(point));}} else if (type == "moveend") {ui->widgetPara->setEnabled(true);on_btnStart_clicked();//再次执行则表示循环QMetaObject::invokeMethod(this, "on_btnStart_clicked", Qt::QueuedConnection);}
}void frmMapQml::on_btnSelect_clicked()
{//执行地址转经纬度操作/路径规划一般只支持经纬度参数startPoint = endPoint = "";QString startAddr = ui->txtStartAddr->text().trimmed();this->runJs(QString("getPointByAddr('startAddr', '%1')").arg(startAddr));
}void frmMapQml::on_btnStart_clicked()
{if (datas.count() <= 0) {QtHelper::showMessageBoxError("请先单击查询路线获取路线的坐标点集合!");return;}if (ui->btnStart->text() == "开始导航") {this->runJs(QString("addLine('%1', '%2', '#ff0000', 6)").arg(flag).arg(datas.first()));//this->runJs(QString("setTilt(%1)").arg(60));this->runJs(QString("moveStart('%1')").arg(flag));ui->btnStart->setText("停止导航");ui->widgetPara->setEnabled(false);} else {this->runJs(QString("moveStop('%1')").arg(flag));ui->btnStart->setText("开始导航");ui->widgetPara->setEnabled(true);}
}
三、相关链接
- 体验地址:https://pan.baidu.com/s/1ZxG-oyUKe286LPMPxOrO2A 提取码:o05q 文件名:bin_map.zip
- 国内站点:https://gitee.com/feiyangqingyun
- 国际站点:https://github.com/feiyangqingyun
四、效果图
五、功能特点
5.1 地图功能
- 支持多种地图内核,默认采用百度地图,可选高德地图、天地图、腾讯地图、谷歌地图等。
- 同时支持在线地图和离线地图两种模式,离线地图方便在不联网的场景中使用。
- 支持各种地图控件的启用,比如地图导航、地图类型、缩略图、比例尺、全景导航、实时路况、绘图工具、结果面板等。
- 支持多种地图功能的动态启用禁用,比如地图拖曳、键盘操作、滚轮缩放、双击放大、连续缩放、地图测距等。
- 提供众多js函数接口用于交互,参数极其丰富,能够想到的应用场景需求都有。
- 统一的信号槽机制,地图中的结果统一信号发送出去,收到后根据type类型区分。
- 支持地图交互,比如鼠标按下获取对应位置的经纬度。单击标注点弹出对应点的信息。
- 支持添加标注、删除标注、移动标注、清空标注。
- 标注点可以指定图标图片和尺寸,支持gif动图,支持指定以图片中心对齐还是底部中心对齐。可以设置旋转角度,带富文本提示信息。
- 标注点事件支持单击发信号通知和自己弹框显示信息。
- 提供地址转坐标和坐标转地址接口。
- 支持各种图形绘制,包括折线图、多边形、矩形、圆形、弧线等。
- 可显示悬浮的绘图工具栏,直接在地图上划线、标注点、矩形、圆形等。
- 支持各种区域搜索,比如矩形区域、圆形区域,可以按照关键字匹配将搜索结果显示在地图中。
- 可动态添加离线的行政区边界点数据。可以搜索行政区划并获取该区域的边界点数据。数据可以保存到文件以便离线使用。
- 支持点聚合功能,多个小标注点合并到一个大标注点,防止点密集导致交互不友好。
- 可以添加海量点,每个点都可以单击获取对应坐标和信息。
- 所有的覆盖物信息比如标注点、矩形、多边形、折线图等,都可以主动获取对应的信息比如坐标点和路径等。
- 支持路径规划,支持公交路线、自驾路线、步行路线、骑行路线,不同查询支持不同策略,可选最少时间、最少换乘、不走高架等。
- 路径规划结果可以显示在地图中,也可以获取到路径点坐标集合。这个数据可以保存到文件,以便发给机器人或者无人机做导航用来轨迹移动。
- 可以设置不同的地图视图比如街道图、卫星图、混合图。
- 可以设置不同的样式,比如午夜蓝、青草绿等样式风格。
- 可以设置地图的旋转角度和倾斜角度。
- 提供经纬度坐标纠偏转换功能,比如传入的GPS坐标需要转换到百度地图坐标或者高德地图坐标。各种坐标系转换全部离线函数,支持地球坐标系WGS-84、火星坐标系GCJ-02、百度坐标系BD-09之间的互相转换,涵盖了各种地图的坐标系。
- 提供动态轨迹点移动功能,按照给定的经纬度坐标集合平滑移动。
- 同时支持qwidget和qml,支持编译到安卓系统运行。
5.2 其他功能
- 提供离线地图下载模块,可以选择不同的地图内核比如百度地图或者谷歌地图,不同的地图类型比如下载街道图还是卫星图,不同的地图层级,多线程极速下载。
- 表格行实时显示对应的瓦片下载进度,有下载超时时间,重试次数,每个瓦片下载完成都发送信号通知,参数包括下载用时。
- 提供省市轮廓图下载模块,自动下载各个地区的轮廓图,保存到脚本文件或者文本文件。
- 支持手动调整不同区域的轮廓边界,调整后可以主动获取调整后的边界点集合。
- 提供动态点位示例,手动在地图上选点并添加标注,附带自定义的信息比如速度和时间等。
- 提供海量点位示例,批量添加标注点、点聚合、海量点。用于测试环境中支持的最大点位性能。
- 提供动态轨迹示例,在地图上鼠标按下选择起点和终点后,查询路线,获取路径轨迹点,模拟轨迹平滑移动。可以筛选数据将过多的路径点筛选到设定的点数。
- 提供轨迹回放示例,按照指定的轨迹点列表回放,也可以导入轨迹点数据进行回放。同时支持在街道图、卫星图、混合图中回放轨迹。
- 提供省市区域地图示例,采用echart组件,同时支持闪烁点图、迁徙图、区域地图、世界地图、仪表盘等。可以设置标题、提示信息、背景颜色、文字颜色、线条颜色、区域颜色等各种颜色。
- 省市区域地图示例,内置世界地图、全国地图、省份地图、地区地图,可以精确到县,所有地图全部离线使用。可设置城市的名称、值、经纬度集合。
- 内置通用浏览器组件,同时支持webkit/webengine/miniblink等内核。提供网页控件示例,演示打开网页和本地网页文件。
- 支持任意Qt版本、任意系统、任意编译器。
相关文章:
Qt/C++离线地图的加载和交互/可以离线使用/百度和天地图离线/支持手机上运行
一、前言说明 在地图应用中,有很多时候是需要断网环境中离线使用的,一般会采用两种做法,一种是只下载好离线瓦片地图,然后根据不同的缩放和经纬度坐标绘制瓦片。这种方式优点是任何地图都支持,只需要拿到瓦片即可&…...
从繁琐到优雅:用 PyTorch Lightning 简化深度学习项目开发
从繁琐到优雅:用 PyTorch Lightning 简化深度学习项目开发 在深度学习开发中,尤其是使用 PyTorch 时,我们常常需要编写大量样板代码来管理训练循环、验证流程和模型保存等任务。PyTorch Lightning 作为 PyTorch 的高级封装库,帮助…...
UE5 第一人称射击项目学习(完结)
这个项目几乎完结了。 也算我上手的第一个纯蓝图小项目。 现在只剩下缝缝补补了。 之前把子弹设计为蓝图,这里要引入C的面向对象思想,建立成员函数。 首先双击打开子弹的蓝图 这边就可以构造成员函数 写一个print your name 在这里生成成员函数后&am…...
Banana Pi BPI-CanMV-K230D-Zero 采用嘉楠科技 K230D RISC-V芯片设计
概述 Banana Pi BPI-CanMV-K230D-Zero 采用嘉楠科技 K230D RISC-V芯片设计,探索 RISC-V Vector1.0 的前沿技术,选择嘉楠科技的 Canmv K230D Zero 开发板。这款创新的开发板是由嘉楠科技与香蕉派开源社区联合设计研发,搭载了先进的勘智 K230D 芯片。 K230…...
【vim】使用 gn 组合命令实现搜索选中功能
gn是Vim 7.4新增的一个操作(motion),作用是跳到并选中下一个搜索匹配项。 具体说,Vim里执行搜索后,执行n操作只会跳转到下一个匹配项,而不选中它。但是我们往往需要对匹配项执行一些修改操作,例…...
【Python刷题】广度优先搜索相关问题
题目描述 小A与小B 算法思路 小A一次移动一步,但有八个方向,小B一次移动两步,只有四个方向,要求小A和小B最早的相遇时间。用两个队列分别记录下小A和小B每一步可以走到的位置,通过一个简单的bfs就能找到这些位置并…...
竞赛思享会 | 2024年第十届数维杯国际数学建模挑战赛D题【代码+演示】
Hello,这里是Easy数模!以下idea仅供参考,无偿分享! 题目背景 本题旨在通过对中国特定城市的房产、人口、经济、服务设施等数据进行分析,评估其在应对人口老龄化、负增长趋势和极端气候事件中的韧性与可持续发展能力。…...
早期超大规模语言模型的尝试——BLOOM模型论文解读,附使用MindSpore和MindNLP的模型和实验复现
背景 预训练语言模型已经成为了现代自然语言处理pipeline中的基石,因为其在少量的标注数据上产生更好的结果。随着ELMo、ULMFiT、GPT和BERT的开发,使用预训练模型在下游任务上微调的范式被广泛使用。随后发现预训练语言模型在没有任何额外训练的情况下任…...
二分查找题目:有序数组中的单一元素
文章目录 题目标题和出处难度题目描述要求示例数据范围 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题:有序数组中的单一元素 出处:540. 有序数组中的单一元素 难度 4 级 题目描述 要求 给定一个仅由整数…...
springboot基于Android的华蓥山旅游导航系统
摘 要 华蓥山旅游导航系统是一款专为华蓥山景区设计的智能导览应用,旨在为用户提供便捷的旅游信息服务。该系统通过整合华蓥山的地理信息、景点介绍、交通状况等数据,实现了对景区的全面覆盖。用户可以通过该系统获取实时的旅游资讯、交流论坛、地图等。…...
面向对象编程(OOP)深度解析:思想、原则与应用
🚀 作者 :“码上有前” 🚀 文章简介 :Java 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬 面向对象编程(OOP)深度解析:思想、原则与应用 一、面向对象编程的基本…...
iPhone 17 Air看点汇总:薄至6mm 刷新苹果轻薄纪录
我们姑且将这款iPhone 17序列的超薄SKU称为“iPhone 17 Air”,Jeff Pu在报告中提到,我同意最近关于 iPhone 17超薄机型采用6 毫米厚度超薄设计的传言。 如果这一测量结果被证明是准确的,那么将有几个值得注意的方面。 首先,iPhone…...
「OpenCV交叉编译」ubuntu to arm64
Ubuntu x86_64 交叉编译OpenCV 为 arm64OpenCV4.5.5、cmake version 3.16.3交叉编译器 gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu 可在arm或linaro官网下载所需版本,本文的交叉编译器可点击链接跳转下载 Downloads | GNU-A Downloads – Arm Developer L…...
Stable Diffusion的解读(二)
Stable Diffusion的解读(二) 文章目录 Stable Diffusion的解读(二)摘要Abstract一、机器学习部分1. 算法梳理1.1 LDM采样算法1.2 U-Net结构组成 2. Stable Diffusion 官方 GitHub 仓库2.1 安装2.2 主函数2.3 DDIM采样器2.4 Unet 3…...
amd显卡和nVidia显卡哪个好 amd和英伟达的区别介绍
AMD和英伟达是目前市场上最主要的两大显卡品牌,它们各有自己的特点和优势,也有不同的适用场景和用户群体。那么,AMD显卡和英伟达显卡到底哪个好?它们之间有什么区别?我们又该如何选择呢?本文将从以下几个方…...
软件测试—— Selenium 常用函数(一)
前一篇文章:软件测试 —— 自动化基础-CSDN博客 目录 前言 一、窗口 1.屏幕截图 2.切换窗口 3.窗口设置大小 4.关闭窗口 二、等待 1.等待意义 2.强制等待 3.隐式等待 4.显式等待 总结 前言 在前一篇文章中,我们介绍了自动化的一些基础知识&a…...
为什么verilog中递归函数需要定义为automatic?
直接上代码 module automatic_tb;reg [7:0] value;initial begin #0 value < 8d5;#10 $display("result of automatic: %0d", factor_automatic(value));$display("result of static: %0d", factor_static(value));#50 $stop; endfunction reg[7:0] fa…...
23种设计模式-状态(State)设计模式
文章目录 一.什么是状态模式?二.状态模式的结构三.状态模式的应用场景四.状态模式的优缺点五.状态模式的C实现六.状态模式的JAVA实现七.代码解释八.总结 类图: 状态设计模式类图 一.什么是状态模式? 状态模式(State Pattern&…...
EventListener与EventBus
EventListener JDK JDK1.1开始就提供EventListener,一个标记接口,源码如下: /*** A tagging interface that all event listener interfaces must extend.*/ public interface EventListener { }JDK提供的java.util.EventObject࿱…...
Facebook为什么注册失败了?该怎么解决?
有时候用户在尝试注册Facebook账号时可能会遇到各种问题,导致注册失败或遇到困难。小编会为大家分析Facebook注册失败的可能原因,并提供解决方法,帮助大家顺利完成注册流程。 一、Facebook注册失败的可能原因 1. 账号信息问题: …...
前端数据可视化思路及实现案例
目录 一、前端数据可视化思路 (一)明确数据与目标 (二)选择合适的可视化图表类型 (三)数据与图表的绑定及交互设计 (四)页面布局与样式设计 二、具体案例:使用 Ech…...
【DVWA】Brute Force暴力破解实战
问尔辈 何等样人 自摸心头 再来求我;若汝能 克存忠孝 持身正直 不拜何妨 1.Brute Force(Low) 相关的代码分析 if( isset( $_GET[ Login ] ) ) {// Get username$user $_GET[ username ];// Check the database$query "SELECT * FROM users WHERE user $…...
23种设计模式速记法
前言 在软件开发的过程中,设计模式作为解决常见问题的通用模板,一直是开发者的重要工具。尤其是在面临复杂系统架构和需求变化时,设计模式不仅能够提升代码的可复用性和扩展性,还能大大提高团队之间的协作效率。然而,…...
第7章硬件测试-7.3 功能测试
7.3 功能测试 7.3.1 整机规格测试7.3.2 整机试装测试7.3.3 DFX测试 功能测试包括整机规格、整机试装和整机功能测试,是整机结构和业务相关的测试。 7.3.1 整机规格测试 整机规格测试包括尺寸、重量、温度、功耗等数据。这些测试数据与设计规格进行比对和校验&…...
动态规划子数组系列一>等差数列划分
题目: 解析: 代码: public int numberOfArithmeticSlices(int[] nums) {int n nums.length;int[] dp new int[n];int ret 0;for(int i 2; i < n; i){dp[i] nums[i] - nums[i-1] nums[i-1] - nums[i-2] ? dp[i-1]1 : 0;ret dp[i…...
《Python浪漫的烟花表白特效》
一、背景介绍 烟花象征着浪漫与激情,将它与表白结合在一起,会创造出别具一格的惊喜效果。使用Python的turtle模块,我们可以轻松绘制出动态的烟花特效,再配合文字表白,打造一段专属的浪漫体验。 接下来,让…...
什么是RESTful API,有什么特点
RESTful API 概述 什么是 RESTful API? RESTful API 是基于 Representational State Transfer(表现层状态转移)架构风格的 Web 服务接口。REST 是一种设计风格,而不是具体的协议或标准。它定义了一组约束和最佳实践,…...
友思特新闻 | 友思特荣获广州科技创新创业大赛智能装备行业赛初创组优胜企业!
2024年11月19日,第十三届中国创新创业大赛(广东广州赛区)暨2024年广州科技创新创业大赛智能装备行业赛颁奖典礼隆重举行。 赛事奖项介绍:广州科技创新创业大赛智能装备行业赛 第十三届“中国创新创业大赛(广东广州赛区…...
CSS中calc语法不生效
问题起因 在使用calc时发现无法生效,写法是: height:calc(100vh-100px);页面无效果,加空格后就发现有效果了: height:calc(100vh - 100px);这是为什么? calc是什么? css3 的计算属性,用于动态…...
国标GB28181视频平台EasyCVR视频融合平台H.265/H.264转码业务流程
在当今数字化、网络化的视频监控领域,大中型项目对于视频监控管理平台的需求日益增长,特别是在跨区域、多设备、高并发的复杂环境中。EasyCVR视频监控汇聚管理平台正是为了满足这些需求而设计的,它不仅提供了全面的管理功能,还支持…...
网站怎么做的支付宝/爆款采集推广引流软件
文字语法(推荐使用的方式): var obj { key : value }; 构造形式: var obj new Object(); obj.key value; 对象的基本类型: string boolean number object …...
vps做网站 推广/如何制作一个网站
离散余弦变换 由于实信号傅立叶变换的共轭对称性,导致DFT后在频域中有一半的数据冗余。离散余弦变换(DCT)在处理实信号时比离散傅立叶(DFT)变换更具优势。在处理声音信号这类实信号时,DFT得到的结果是复功率谱,其结果中的一半数据是没利用价值…...
dw网站建设的心得体会/网络推广优化方案
OAB(offline address book) 历史脱机通讯簿(可称为 OAB)很长时间以来一直是 Exchange 基础架构中的关键组件。OAB 由 Microsoft Outlook 客户端在脱机时在缓存 Exchange 模式下用于通讯簿查找。OAB 还对减轻 Exchange 服务器上的工作负载起着重要作用&am…...
php做的卖水果网站有哪些/系统优化软件
在我还没有踏入测试领域的时候,就知道了自动化测试与手工测试的争论,现在,我就以我们公司的项目为例,讲述一下我认知的手工测试与自动化测试。 因为保密原则,不方便透漏项目的名字,就以项目表示了。我的工作…...
百度搜索什么关键词能搜到网站/seo高级教程
在使用zend framework的时候,最先引入的一定是AutoLoad的机制,这里就想分析下Zend的AutoLoad是怎么引入的。 代码示例 12345678910111213set_include_path(USVN_LIB_DIR . PATH_SEPARATOR . get_include_path());require_once Zend/Loader/Autoloader.ph…...
京东网页设计实训报告/重庆电子商务seo
原文链接:https://www.shuaihuajun.com/article/arduino-led/我现在手里有一套Ruff开发板套件和一套Arduino开发板套件。把Ruff开发套件中的所有传感器用了一个遍之后没玩够,于是开始把玩Arduino。没有对比就没有伤害真的是,虽然我真正接触Ar…...