|
- /* Copyright(c)--Navinfo--Author:fangzurui--date:2023-10-20 */
-
- #include "ImageInfoDb.h"
-
- ImageInfoDb::ImageInfoDb() {}
-
- ImageInfoDb::~ImageInfoDb() {}
-
- bool ImageInfoDb::open(QString dbPath) {
- _imageDb = QSqlDatabase::addDatabase("QSQLITE");
- _imageDb.setDatabaseName(dbPath);
-
- if(_imageDb.open() == false) {
- return false;
- } else {
- return true;
- }
- }
-
- void ImageInfoDb::close() {
- if(_imageDb.isOpen() == true) {
- _imageDb.close();
- }
- }
-
- std::vector<Image*> ImageInfoDb::getAllImage() {
- // 查询数据
- QSqlQuery query;
- query = QSqlQuery(_imageDb);
-
- query.prepare("SELECT * FROM image_info");
- query.exec();
-
- // 获取查询结果
- QSqlRecord record = query.record();
- std::vector<Image*> vecImage;
-
- if(record.isEmpty() == false) {
- while(query.next()) {
- // 创建图像对象
- Image* image = new Image();
-
- QString name = query.value("FILE_NAME").toString();
- QString date = query.value("CREATE_TIME").toString();
- QString type = query.value("TYPE").toString();
- QString lon = query.value("LONGITUDE").toString();
- QString lat = query.value("LATITUDE").toString();
-
- image->setImageName(name.toStdString());
- image->setImageDate(date.toStdString());
- image->setImageType(type.toStdString());
- image->setImageCenterCoord(MapPoint(lon.toDouble(), lat.toDouble(), 2000));
-
- vecImage.push_back(image);
- }
- }
- return vecImage;
- }
-
- std::vector<Image*> ImageInfoDb::searchImage(QDate startDate, QDate endDate, std::string type) {
- // 查询数据
- QSqlQuery query;
- query = QSqlQuery(_imageDb);
-
- QString strStartDateTime = QDateTime::fromString(startDate.toString("yyyy-MM-dd"), "yyyy-MM-dd").toLocalTime().toString("yyyy-MM-dd hh:mm:ss");
- QString strEndDateTime = QDateTime::fromString(endDate.toString("yyyy-MM-dd"), "yyyy-MM-dd").toLocalTime().toString("yyyy-MM-dd hh:mm:ss");
-
- if(startDate == endDate && startDate == QDate::currentDate()) {
- if(type == "All") {
- query.prepare("SELECT * FROM image_info");
- query.exec();
- } else {
- query.prepare("SELECT * FROM image_info WHERE TYPE=:TYPE");
- query.bindValue(":TYPE", type.c_str());
- query.exec();
- }
- } else {
- if(type == "All") {
- query.prepare("SELECT * FROM image_info WHERE CREATE_TIME BETWEEN :START_TIME AND :END_TIME");
- query.bindValue(":START_TIME", strStartDateTime);
- query.bindValue(":END_TIME", strEndDateTime);
- query.exec();
- } else {
- query.prepare("SELECT * FROM image_info WHERE CREATE_TIME BETWEEN :START_TIME AND :END_TIME AND TYPE=:TYPE");
- query.bindValue(":START_TIME", strStartDateTime);
- query.bindValue(":END_TIME", strEndDateTime);
- query.bindValue(":TYPE", type.c_str());
- query.exec();
- }
- }
-
- // 获取查询结果
- QSqlRecord record = query.record();
- std::vector<Image*> vecImage;
- if(record.isEmpty() == false) {
- while(query.next()) {
- // 创建图像对象
- Image* image = new Image();
-
- QString id, name, date, type, lon, lat;
- id = query.value("ID").toString();
- name = query.value("FILE_NAME").toString();
- date = query.value("CREATE_TIME").toString();
- type = query.value("TYPE").toString();
- lon = query.value("LONGITUDE").toString();
- lat = query.value("LATITUDE").toString();
-
- image->setImageName(name.toStdString());
- image->setImageDate(date.toStdString());
- image->setImageType(type.toStdString());
- image->setImageCenterCoord(MapPoint(lon.toDouble(), lat.toDouble(), 500));
-
- vecImage.push_back(image);
- }
- }
- return vecImage;
- }
-
- Image* ImageInfoDb::getImageByDate(const QString& imageDate) {
- // 查询数据
- QSqlQuery query;
- query = QSqlQuery(_imageDb);
-
- query.prepare("SELECT * FROM image_info WHERE CREATE_TIME=:CREATE_TIME");
- query.bindValue(":CREATE_TIME", imageDate);
- query.exec();
-
- // 获取查询结果
- Image* image = nullptr;
- if(query.next()) {
- image = new Image();
- QString name, date, type, lon, lat;
- name = query.value("FILE_NAME").toString();
- date = query.value("CREATE_TIME").toString();
- type = query.value("TYPE").toString();
- lon = query.value("LONGITUDE").toString();
- lat = query.value("LATITUDE").toString();
-
- image->setImageName(name.toStdString());
- image->setImageDate(date.toStdString());
- image->setImageType(type.toStdString());
- image->setImageCenterCoord(MapPoint(lon.toDouble(), lat.toDouble(), 500));
- } else {
- QSqlError error = query.lastError();
- }
- return image;
- }
-
- // 根据文件名获取Image对象
- Image* ImageInfoDb::getImageByName(const QString& fileName) {
- // 查询数据
- QSqlQuery query;
- query = QSqlQuery(_imageDb);
-
- query.prepare("SELECT * FROM image_info WHERE FILE_NAME=:FILE_NAME");
- query.bindValue(":FILE_NAME", fileName);
- query.exec();
-
- // 获取查询结果
- QSqlRecord record = query.record();
- Image* image = nullptr;
- if(record.isEmpty() == false) {
- image = new Image();
- QString id, name, date, type, lon, lat;
- id = query.value("ID").toString();
- name = query.value("FILE_NAME").toString();
- date = query.value("CREATE_TIME").toString();
- type = query.value("TYPE").toString();
- lon = query.value("LONGITUDE").toString();
- lat = query.value("LATITUDE").toString();
-
- image->setImageName(name.toStdString());
- image->setImageDate(date.toStdString());
- image->setImageType(type.toStdString());
- image->setImageCenterCoord(MapPoint(lon.toDouble(), lat.toDouble(), 500));
- }
- return image;
- }
-
- // 根据下标获取tif对象
- Image* ImageInfoDb::getImageByIndex(int index) {
- // 查询数据
- QSqlQuery query;
- query = QSqlQuery(_imageDb);
-
- query.prepare("SELECT * FROM image_info WHERE ID=:ID");
- query.bindValue(":ID", index);
- query.exec();
-
- // 获取查询结果
- QSqlRecord record = query.record();
- Image* image = nullptr;
- if(record.isEmpty() == false) {
- image = new Image();
- QString id, name, date, type, lon, lat;
- id = query.value("ID").toString();
- name = query.value("FILE_NAME").toString();
- date = query.value("CREATE_TIME").toString();
- type = query.value("TYPE").toString();
- lon = query.value("LONGITUDE").toString();
- lat = query.value("LATITUDE").toString();
-
- image->setImageName(name.toStdString());
- image->setImageDate(date.toStdString());
- image->setImageType(type.toStdString());
- image->setImageCenterCoord(MapPoint(lon.toDouble(), lat.toDouble(), 500));
- }
- return image;
- }
-
- bool ImageInfoDb::isExists(Image* image) {
- // 查询数据
- QSqlQuery query;
- query = QSqlQuery(_imageDb);
-
- query.prepare("SELECT * FROM image_info WHERE FILE_NAME=:FILE_NAME AND CREATE_TIME=:CREATE_TIME AND TYPE=:TYPE");
- query.bindValue(":FILE_NAME", image->getImageName().c_str());
- query.bindValue(":CREATE_TIME", image->getImageDate().c_str());
- query.bindValue(":TYPE", image->getImageType().c_str());
- query.exec();
-
- if(query.next() == false) {
- return false;
- } else {
- return true;
- }
- }
-
- bool ImageInfoDb::isExists(std::string date) {
- // 查询数据
- QSqlQuery query;
- query = QSqlQuery(_imageDb);
-
- query.prepare("SELECT * FROM image_info WHERE CREATE_TIME=:CREATE_TIME");
- query.bindValue(":CREATE_TIME", date.c_str());
- query.exec();
-
- if(query.size() == 0) {
- return false;
- } else {
- return true;
- }
- }
-
- // 保存到数据库
- void ImageInfoDb::saveImage(Image* image) {
- // 查询数据
- QSqlQuery query;
- query = QSqlQuery(_imageDb);
-
- // 获取ID
- query.prepare("SELECT MAX(ID) FROM image_info");
- query.exec();
- int maxId = query.value("MAX(ID)").toInt();
- if(maxId == NULL) {
- maxId = 1;
- } else {
- maxId = maxId + 1;
- }
-
- // 插入数据
- query.prepare("INSERT INTO image_info(ID, FILE_NAME, CREATE_TIME, TYPE, LONGITUDE, LATITUDE) VALUES (:ID, :FILE_NAME, :CREATE_TIME, :TYPE, :LONGITUDE, :LATITUDE)");
- query.bindValue(":ID", maxId);
- query.bindValue(":FILE_NAME", image->getImageName().c_str());
- query.bindValue(":CREATE_TIME", image->getImageDate().c_str());
- query.bindValue(":TYPE", image->getImageType().c_str());
- query.bindValue(":LONGITUDE", image->getImageCenterCoord()._dLon);
- query.bindValue(":LATITUDE", image->getImageCenterCoord()._dLat);
- query.exec();
- }
-
- // 从数据库中删除
- void ImageInfoDb::removeImage(std::string imageDate) {
- // 查询数据
- QSqlQuery query;
- query = QSqlQuery(_imageDb);
-
- // 删除词条
- query.prepare("DELETE FROM image_info WHERE CREATE_TIME=:CREATE_TIME");
- query.bindValue(":CREATE_TIME", imageDate.c_str());
- query.exec();
- }
-
- // 清空数据库
- void ImageInfoDb::clearImage() {
- // 查询数据
- QSqlQuery query;
- query = QSqlQuery(_imageDb);
-
- // 删除词条
- query.prepare("DELETE * FROM image_info");
- query.exec();
- }
|