Qt天气预报系统获取天气数据
Qt天气预报系统获取天气数据
- 1、获取天气数据
- 1.1添加天气类头文件
- 1.2定义今天和未来几天天气数据类
- 1.3定义一个解析JSON数据的函数
- 1.4在mainwindow中添加weatherData.h
- 1.5创建今天天气数据和未来几天天气数据对象
- 1.6添加parseJson定义
- 1.7把解析JSON数据添加进去
- 1.8添加错误
- 1.9解析整个天气数据
- 2、.h文件和.cpp文件
- 2.1 mainwindow.h文件
- 2.2weatherData.h文件
- 2.3 .cpp文件
1、获取天气数据
1.1添加天气类头文件
鼠标放到项目上, 右键选择Add New... |
选择C++,选择C++Header File |
起名为weatherData |
1.2定义今天和未来几天天气数据类
//今天的数据类
class Today{
public:Today(){city ="广州"; //城市date ="2025-1-10"; //日期weatherType ="多云"; //天气类型highTem = 30; //最高温lowTem = 18; //最低温ganMao ="感冒指数"; //感冒指数Temperature = 0; //温度Humidity = "0%"; //湿度PM25 = 0; //PM2.5windType ="南风"; //风的类型windPower ="2级"; //风力airQuality ="无数据"; //空气质量}QString city;QString date;int Temperature;QString weatherType;int highTem;int lowTem;QString ganMao;QString Humidity;int PM25;QString windType;QString windPower;QString airQuality;};//未来几天的数据类
class Day{
public:Day(){week ="周五"; //星期date ="2023-7-29"; //日期weatherType ="多云"; //天气类型airQuality = 0; //空气指数,优 //空气质量highTem = 0; //最高温lowTem = 0; //最低温windType ="南风"; //风的类型windPower ="2级"; //风力}QString week;QString date;QString weatherType;int airQuality;int highTem;int lowTem;QString windType;QString windPower;
};
1.3定义一个解析JSON数据的函数
void parseJson(QByteArray& byteArray); //解析JSON数据
1.4在mainwindow中添加weatherData.h
#include "weatherData.h"
1.5创建今天天气数据和未来几天天气数据对象
Today today; //定义一个今天天气数据对象
Day day[7]; //定义未来几天天气数据对象
1.6添加parseJson定义
1.7把解析JSON数据添加进去
void MainWindow::readHttpReply(QNetworkReply *reply)
{int status_code = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); //状态码//请求错误if(reply->error() != QNetworkReply::NoError || status_code != 200){qDebug() << reply->errorString().toLatin1().data(); //打印错误信息QMessageBox::warning(this,"天气","请求数据失败", QMessageBox::Ok); //弹出警告信息框}//请求成功else{QByteArray byteArray = reply->readAll(); //读取服务器数据qDebug() << "read all:"<< byteArray.data(); //打印接收到的数据parseJson(byteArray); //解析JSON数据}reply->deleteLater(); //释放对象
}
1.8添加错误
//解析JSON格式天气数据
void MainWindow::parseJson(QByteArray &byteArray)
{//错误QJsonParseError err;
}
鼠标放到QJsonParseError上, ALT+Enter选择添加头文件,后面的也类似,使用一个 新类的时候,记得添加头文件 |
1.9解析整个天气数据
//解析JSON格式天气数据
void MainWindow::parseJson(QByteArray &byteArray)
{//错误QJsonParseError err; //创建一个错误对象QJsonDocument doc = QJsonDocument::fromJson(byteArray, &err); //将JSON格式解析为QJsonDocument对象//如果错误if(err.error != QJsonParseError::NoError){return; //返回}QJsonObject rootObj = doc.object(); //创建一个QJsonObject对象返回文档// qDebug() << rootObj.value("message").toString();//1.解析城市和日期today.city = rootObj.value("cityInfo").toObject().value("city").toString(); //城市today.date = rootObj.value("date").toString(); //日期//2.解析昨天yesterday数据QJsonObject objData = rootObj.value("data").toObject(); //获取data对象QJsonObject objYesterday = objData.value("yesterday").toObject(); //昨天day[0].week = objYesterday.value("week").toString(); //星期day[0].date = objYesterday.value("date").toString(); //日期day[0].weatherType = objYesterday.value("type").toString(); //天气类型QString highT; //最高温highT = objYesterday.value("high").toString().split(" ").at(1); //空格分割,取分割后第二个数据,1是第二个,0是第一个day[0].highTem = highT.left(highT.length() - 1).toInt(); //把℃减掉,只剩数字QString lowT; //最低温lowT = objYesterday.value("low").toString().split(" ").at(1);day[0].lowTem = lowT.left(lowT.length() - 1).toInt();//风的类型,风力day[0].windType = objYesterday.value("fx").toString(); //风的类型 day[0].windPower = objYesterday.value("fl").toString(); //风力//空气指数day[0].airQuality =objYesterday.value("aqi").toDouble(); //空气质量//3.解析未来几天的天气数据QJsonArray forecastArray = objData.value("forecast").toArray(); //获取forecast数组//遍历未来几天天气数据for(int i=0 ; i<6 ; i++){QJsonObject forecastObj = forecastArray[i].toObject(); //获取JSON对象day[i+1].week = forecastObj.value("week").toString(); //星期day[i+1].date = forecastObj.value("ymd").toString(); //日期day[i+1].weatherType = forecastObj.value("type").toString(); //天气类型//空气指数day[i+1].airQuality =forecastObj.value("aqi").toDouble(); //空气质量QString highT; //最高温highT = forecastObj.value("high").toString().split(" ").at(1); //空格分割,取分割后第二个数据,1是第二个,0是第一个day[i+1].highTem = highT.left(highT.length() - 1).toInt(); //把℃减掉,只剩数字QString lowS; //最低温lowS = forecastObj.value("low").toString().split(" ").at(1);day[i+1].lowTem = lowS.left(lowS.length() - 1).toInt();//风的类型,风力day[i+1].windType = forecastObj.value("fx").toString(); //风的类型day[i+1].windPower = forecastObj.value("fl").toString(); //风力//4、解析今天的数据today.Temperature =objData.value("wendu").toInt(); //温度today.ganMao =objData.value("ganmao").toString(); //感冒指数today.Humidity = objData.value("shidu").toString(); //湿度today.PM25 = objData.value("pm25").toDouble(); //PM2.5today.airQuality = objData.value("quality").toString(); //空气质量//forecast里面也有今天的数据today.weatherType = day[1].weatherType; //天气类型today.highTem = day[1].highTem; //最高温today.lowTem = day[1].lowTem; //最低温today.windType = day[1].windType; //风的类型today.windPower = day[1].windPower; //风力}
}
2、.h文件和.cpp文件
2.1 mainwindow.h文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QMenu>
#include <QMessageBox>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include "weatherData.h"QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();protected:void mousePressEvent(QMouseEvent *event) override; //重写鼠标点击事件函数void mouseMoveEvent(QMouseEvent *event) override; //重写鼠标移动事件函数void getWeatherInfo(QString citycode); //获取天气数据void parseJson(QByteArray& byteArray); //解析JSON数据private slots:void on_pushButton_quit_clicked(); //关闭UI界面void onQuitActTriggered(); //菜单被点击后的处理public slots:void readHttpReply(QNetworkReply *reply); //新建一个网络请求获取的槽函数private:Ui::MainWindow *ui;QMenu *quitMenu; //创建一个菜单指针QAction *quitAct; //定义一个动作QPoint moffset; //窗口移动时,鼠标与窗口左上角的偏移值QNetworkAccessManager *NetAccessManger; //声明一个网络请求对象bool closePOPWindow(); //关闭窗口的弹窗Today today; //定义一个今天天气数据对象Day day[7]; //定义未来几天天气数据对象
};
#endif // MAINWINDOW_H
2.2weatherData.h文件
#ifndef WEATHERDATA_H
#define WEATHERDATA_H
#include <QString>
//今天的数据类
class Today{
public:Today(){city ="广州"; //城市date ="2025-1-10"; //日期weatherType ="多云"; //天气类型highTem = 30; //最高温lowTem = 18; //最低温ganMao ="感冒指数"; //感冒指数Temperature = 0; //温度Humidity = "0%"; //湿度PM25 = 0; //PM2.5windType ="南风"; //风的类型windPower ="2级"; //风力airQuality ="无数据"; //空气质量}QString city;QString date;int Temperature;QString weatherType;int highTem;int lowTem;QString ganMao;QString Humidity;int PM25;QString windType;QString windPower;QString airQuality;};//未来几天的数据类
class Day{
public:Day(){week ="周五"; //星期date ="2023-7-29"; //日期weatherType ="多云"; //天气类型airQuality = 0; //空气指数,优 //空气质量highTem = 0; //最高温lowTem = 0; //最低温windType ="南风"; //风的类型windPower ="2级"; //风力}QString week;QString date;QString weatherType;int airQuality;int highTem;int lowTem;QString windType;QString windPower;
};
#endif // WEATHERDATA_H
2.3 .cpp文件
#include "mainwindow.h"
#include "ui_mainwindow.h"#include <QJsonArray>
#include <QJsonObject>
#include <QJsonParseError>
#include <QMouseEvent>
#include "weatherData.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);setWindowFlag(Qt::FramelessWindowHint);// this->setLayout(ui->gridLayoutGlobal); //让界面随着窗口变幻大小quitMenu = new QMenu(this); //创建一个QMenu对象quitAct = new QAction(QIcon(":/widget/quit.png"), tr("退出"), this); //定义一个退出动作quitMenu->addAction(quitAct); //添加动作// connect(quitMenu,&QMenu::triggered,this,[=]{// this->close();// }); //连接信号与槽connect(quitMenu,&QMenu::triggered,this,&MainWindow::onQuitActTriggered); //连接菜单被触发的信号与槽NetAccessManger = new QNetworkAccessManager(this); //实例化一个网络请求对象connect(NetAccessManger,&QNetworkAccessManager::finished,this,&MainWindow::readHttpReply); //连接网络请求获取的信号与槽//101010100是北京的城市编码getWeatherInfo("101010100");}MainWindow::~MainWindow()
{delete ui;
}//鼠标点击
void MainWindow::mousePressEvent(QMouseEvent *event)
{//如果右键被按下if(event->button() == Qt::RightButton){quitMenu->exec(QCursor::pos()); //在当前鼠标位置显示菜单}//当前鼠标位置 event->globalPos()//当前窗口位置 this->pos()if(event->button() == Qt::LeftButton){moffset = event->globalPos() - this->pos();}
}//鼠标移动
void MainWindow::mouseMoveEvent(QMouseEvent *event)
{this->move(event->globalPos() - moffset); //移动窗口
}//弹窗
bool MainWindow::closePOPWindow()
{// 创建一个消息框询问用户是否真的要退出QMessageBox mes;mes.setWindowTitle("关闭窗口");// mes.setWindowFlags(Qt::Drawer); //把标题栏去掉mes.setIcon(QMessageBox::Warning); //设置一个警告图片mes.setText("是否关闭窗口?"); //弹窗文本mes.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel); //设置两个按钮mes.setWindowIcon(QIcon(":/widget/dog.png")); // 设置窗口图标mes.setButtonText(QMessageBox::Ok, tr("确定")); //ok改为确认mes.setButtonText(QMessageBox::Cancel, tr("取消")); //Cancel改为取消// 显示消息框并等待用户交互int result = mes.exec();// 根据用户的选择执行相应的操作if (result == QMessageBox::Ok) {// 用户选择了确定,关闭主窗口this->close();return true;}// 用户选择了取消,不关闭主窗口else{return false; // 窗口关闭操作失败}
}//右上角退出
void MainWindow::on_pushButton_quit_clicked()
{closePOPWindow();
}//鼠标右键退出
void MainWindow::onQuitActTriggered()
{closePOPWindow();
}//获取天气数据
void MainWindow::getWeatherInfo(QString citycode)
{QUrl url("http://t.weather.itboy.net/api/weather/city/" + citycode); //天气数据接口和城市编码NetAccessManger->get(QNetworkRequest(url)); //发送GET请求,获取数据}//解析JSON格式天气数据
void MainWindow::parseJson(QByteArray &byteArray)
{//错误QJsonParseError err; //创建一个错误对象QJsonDocument doc = QJsonDocument::fromJson(byteArray, &err); //将JSON格式解析为QJsonDocument对象//如果错误if(err.error != QJsonParseError::NoError){return; //返回}QJsonObject rootObj = doc.object(); //创建一个QJsonObject对象返回文档// qDebug() << rootObj.value("message").toString();//1.解析城市和日期today.city = rootObj.value("cityInfo").toObject().value("city").toString(); //城市today.date = rootObj.value("date").toString(); //日期//2.解析昨天yesterday数据QJsonObject objData = rootObj.value("data").toObject(); //获取data对象QJsonObject objYesterday = objData.value("yesterday").toObject(); //昨天day[0].week = objYesterday.value("week").toString(); //星期day[0].date = objYesterday.value("date").toString(); //日期day[0].weatherType = objYesterday.value("type").toString(); //天气类型QString highT; //最高温highT = objYesterday.value("high").toString().split(" ").at(1); //空格分割,取分割后第二个数据,1是第二个,0是第一个day[0].highTem = highT.left(highT.length() - 1).toInt(); //把℃减掉,只剩数字QString lowT; //最低温lowT = objYesterday.value("low").toString().split(" ").at(1);day[0].lowTem = lowT.left(lowT.length() - 1).toInt();//风的类型,风力day[0].windType = objYesterday.value("fx").toString(); //风的类型day[0].windPower = objYesterday.value("fl").toString(); //风力//空气指数day[0].airQuality =objYesterday.value("aqi").toDouble(); //空气质量//3.解析未来几天的天气数据QJsonArray forecastArray = objData.value("forecast").toArray(); //获取forecast数组//遍历未来几天天气数据for(int i=0 ; i<6 ; i++){QJsonObject forecastObj = forecastArray[i].toObject(); //获取JSON对象day[i+1].week = forecastObj.value("week").toString(); //星期day[i+1].date = forecastObj.value("ymd").toString(); //日期day[i+1].weatherType = forecastObj.value("type").toString(); //天气类型//空气指数day[i+1].airQuality =forecastObj.value("aqi").toDouble(); //空气质量QString highT; //最高温highT = forecastObj.value("high").toString().split(" ").at(1); //空格分割,取分割后第二个数据,1是第二个,0是第一个day[i+1].highTem = highT.left(highT.length() - 1).toInt(); //把℃减掉,只剩数字QString lowS; //最低温lowS = forecastObj.value("low").toString().split(" ").at(1);day[i+1].lowTem = lowS.left(lowS.length() - 1).toInt();//风的类型,风力day[i+1].windType = forecastObj.value("fx").toString(); //风的类型day[i+1].windPower = forecastObj.value("fl").toString(); //风力//4、解析今天的数据today.Temperature =objData.value("wendu").toInt(); //温度today.ganMao =objData.value("ganmao").toString(); //感冒指数today.Humidity = objData.value("shidu").toString(); //湿度today.PM25 = objData.value("pm25").toDouble(); //PM2.5today.airQuality = objData.value("quality").toString(); //空气质量//forecast里面也有今天的数据today.weatherType = day[1].weatherType; //天气类型today.highTem = day[1].highTem; //最高温today.lowTem = day[1].lowTem; //最低温today.windType = day[1].windType; //风的类型today.windPower = day[1].windPower; //风力}
}//网络请求获取
void MainWindow::readHttpReply(QNetworkReply *reply)
{int status_code = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); //状态码//请求错误if(reply->error() != QNetworkReply::NoError || status_code != 200){qDebug() << reply->errorString().toLatin1().data(); //打印错误信息QMessageBox::warning(this,"天气","请求数据失败", QMessageBox::Ok); //弹出警告信息框}//请求成功else{QByteArray byteArray = reply->readAll(); //读取服务器数据qDebug() << "read all:"<< byteArray.data(); //打印接收到的数据parseJson(byteArray); //解析JSON数据}reply->deleteLater(); //释放对象
}
获取天气数据完成!
相关文章:

Qt天气预报系统获取天气数据
Qt天气预报系统获取天气数据 1、获取天气数据1.1添加天气类头文件1.2定义今天和未来几天天气数据类1.3定义一个解析JSON数据的函数1.4在mainwindow中添加weatherData.h1.5创建今天天气数据和未来几天天气数据对象1.6添加parseJson定义1.7把解析JSON数据添加进去1.8添加错误1.9解…...

力扣 搜索二维矩阵
二分查找,闭区间与开区间的不同解法。 题目 乍一看,不是遍历一下找到元素就可以了。 class Solution {public boolean searchMatrix(int[][] matrix, int target) {for (int[] ints : matrix) {for (int ans : ints) {if (ans target) return true;}}…...
JavaScript 操作符与表达式
Hi, 我是布兰妮甜,编写流畅、愉悦用户体验的程序员。JavaScript 是一种功能强大且灵活的编程语言,广泛应用于前端和后端开发。它提供了一系列丰富的操作符和表达式来处理数据、执行逻辑判断以及控制程序流程。理解这些概念对于编写高效、可读性强的代码至…...
深度学习 Pytorch 张量(Tensor)的创建和常用方法
1 张量的基本创建及其类型 和Numpy中的array一样,张量的本质也是结构化地组织了大量的数据。 并且在实际操作中,张量的创建和基本功能也与其非常类似。 1.1 张量(Tensor)函数创建方法 张量的最基本创建方法和Numpy中创建Array的格式一致。 # Numpy创建…...

在VMwareFusion中使用Ubuntu
在VMwareFusion使用Ubuntu 在VMwareFusion使用Ubuntu背景在VMwareFusion虚拟机里使用Ubuntu1、集成桌面工具2、主机和虚拟机之间共享剪贴板内容3、设置root用户密码4、设置静态ip4.1、静态ip和动态ip的区别4.2、查看当前ip4.2、linux网络配置文件所在位置4.3、基于ubuntu22.04.…...
%.*s——C语言中printf 函数中的一种格式化输出方式
在C语言中,%.*s 是 printf 函数中的一种格式化输出方式,用于控制字符串的输出长度。具体来说,%.*s 中的 * 表示输出宽度(即最多输出的字符数)是一个变量,这个变量的值在运行时通过 printf 函数的参数传递。…...

基于微信小程序的摄影竞赛系统设计与实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
hydra破解密码
hydra九头蛇是常用的密码破解工具 1、破解centos ssh密码 hydra -l root -P password.txt ssh://192.168.1.107:2222 hydra -l root -P password.txt -s 2222 192.168.1.107 ssh2、破解ftp hydra -l allen -P e:\aa.txt ftp://127.0.0.1 hydra -l allen -P e:\aa.txt ftp:…...
JAVA之外观模式
外观模式,又称门面模式,是一种结构型设计模式,旨在为复杂的子系统提供一个统一且简化的接口。通过这一模式,客户端可以更加便捷地与子系统交互,而无需深入了解其内部结构和实现细节。外观模式不仅简化了客户端的使用&a…...
如何选择合适的服务器?服务器租赁市场趋势分析
服务器租赁市场概览 服务器租赁 market可以分为两种类型:按小时、按月和按年,每种模式都有其特点和适用场景,按小时租赁是最经济实惠的选择,适用于短期需求;按月租赁则适合中长期使用;而按年租赁则是最灵活…...

CentOS 下载软件时报Error: Failed to synchronize cache for repo ‘AppStream‘解决方法
下载软件时出现以下问题 直接把CentOS-AppStream.repo改个名字就行 cd /etc/yum.repos.d/ mv CentOS-AppStream.repo CentOS-AppStream.repo.bak就可以了 解决思路 把AI问遍,无人会,解决法 想要下载软件通通失败了,解决方法当然是问AI&am…...
鲍厚霖:引领AI广告创新,搭建中美合作桥梁
2024年是鲍厚霖和她领导的超能S咨询公司(Triple S AI)收获颇丰的一年。这一年中,她以卓越的战略眼光和创新能力,为中美教育、文化与技术的深度融合注入了新的活力。2025年,Triple S AI计划推出全新2.0版本平台,进一步深化人工智能驱动的营销与文化合作领域,推动产业变革与社会福…...

学习记录1
[SUCTF 2019]EasyWeb 直接给了源代码,分析一下 <?php function get_the_flag(){// webadmin will remove your upload file every 20 min!!!! $userdir "upload/tmp_".md5($_SERVER[REMOTE_ADDR]);if(!file_exists($userdir)){mkdir($userdir);}if…...
【Gossip 协议】Golang的实现库Memberlist 库简介
Gossip 协议简介 Gossip 协议是一种分布式协议,用于在节点之间传播信息,常用于成员管理、故障检测、服务发现等场景。在这个协议中,每个节点定期与其他节点交换信息,最终保证所有节点达到一致的状态。它的工作原理类似于人群中的…...

LDD3学习7--硬件接口I/O端口(以short为例)
1 理论 1.1 基本概念 目前对外设的操作,都是通过寄存器。寄存器的概念,其实就是接口,访问硬件接口,有I/O端口通信和内存映射I/O (Memory-Mapped I/O),I/O端口通信是比较老的那种,都是老的串口并口设备&am…...

openharmony电源管理子系统
电源管理子系统 简介目录使用说明相关仓 简介 电源管理子系统提供如下功能: 重启服务:系统重启和下电。系统电源管理服务:系统电源状态管理和休眠运行锁管理。显示相关的能耗调节:包括根据环境光调节背光亮度,和根…...

【Rust自学】13.4. 闭包 Pt.4:使用闭包捕获环境
13.4.0. 写在正文之前 Rust语言在设计过程中收到了很多语言的启发,而函数式编程对Rust产生了非常显著的影响。函数式编程通常包括通过将函数作为值传递给参数、从其他函数返回它们、将它们分配给变量以供以后执行等等。 在本章中,我们会讨论 Rust 的一…...

在 macOS 上,用命令行连接 MySQL(/usr/local/mysql/bin/mysql -u root -p)
根据你提供的文件内容,MySQL 的安装路径是 /usr/local/mysql。要直接使用 mysql 命令,你需要找到 mysql 可执行文件的路径。 在 macOS 上,mysql 客户端通常位于 MySQL 安装目录的 bin 子目录中。因此,完整的路径应该是࿱…...

mono3d汇总
lidar坐标系 lidar坐标系可以简单归纳为标准lidar坐标系和nucense lidar坐标系,参考链接。这个坐标系和车辆的ego坐标系是一致的。 标准lidar坐标系 opendet3d,mmdetection3d和kitt都i使用了该坐标系 up z^ x front| /| /left y <------ 0kitti采…...

K8S 节点选择器
今天我们来实验 pod 调度的 nodeName 与 nodeSelector。官网描述如下: 假设有如下三个节点的 K8S 集群: k8s31master 是控制节点 k8s31node1、k8s31node2 是工作节点 容器运行时是 containerd 一、镜像准备 1.1、镜像拉取 docker pull tomcat:8.5-jre8…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)
LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…...

pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)
目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 (1)输入单引号 (2)万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...