/* 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 ImageInfoDb::getAllImage() { // 查询数据 QSqlQuery query; query = QSqlQuery(_imageDb); query.prepare("SELECT * FROM image_info"); query.exec(); // 获取查询结果 QSqlRecord record = query.record(); std::vector 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 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 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(); }