/* Copyright(c)--Navinfo--Author:fangzurui--date:2023-10-20 */ #include "MarkPointDb.h" MarkPointDb::MarkPointDb() {} MarkPointDb::~MarkPointDb() {} bool MarkPointDb::open(QString dbPath) { _markPointDb = QSqlDatabase::addDatabase("QSQLITE"); _markPointDb.setDatabaseName(dbPath); if(_markPointDb.open() == false) { return false; } else { return true; } } void MarkPointDb::close() { if(_markPointDb.isOpen() == true) { _markPointDb.close(); } } std::vector MarkPointDb::getAllMarkPoint() { // 查询数据 QSqlQuery query; query = QSqlQuery(_markPointDb); // 搜索语句 query.prepare("SELECT * FROM mark_point"); query.exec(); // 获取查询结果 QSqlRecord record = query.record(); std::vector vecMarkPoint; if(record.isEmpty() == false) { while(query.next()) { // 创建一个地图点 MarkPoint* markPoint = new MarkPoint(); QString id; double lon, lat, alt; id = query.value("ID").toString(); lon = query.value("LONGITUDE").toDouble(); lat = query.value("LATITUDE").toDouble(); alt = query.value("ALTITUDE").toDouble(); if(lon != 0.0) { markPoint->setId(id.toStdString()); markPoint->setMapPoint(MapPoint(lon, lat, alt)); vecMarkPoint.push_back(markPoint); } else { delete markPoint; markPoint = nullptr; continue; } } } return vecMarkPoint; } // 保存到数据库 void MarkPointDb::saveMarkPoint(MarkPoint* markPoint) { // 查询数据 QSqlQuery query; query = QSqlQuery(_markPointDb); // 插入数据 query.prepare("INSERT INTO mark_point(ID, LONGITUDE, LATITUDE, ALTITUDE) values (:ID, :LONGITUDE, :LATITUDE, :ALTITUDE)"); query.bindValue(":ID", markPoint->getId().c_str()); query.bindValue(":LONGITUDE", markPoint->getMapPoint()._dLon); query.bindValue(":LATITUDE", markPoint->getMapPoint()._dLat); query.bindValue(":ALTITUDE", markPoint->getMapPoint()._dAlt); query.exec(); } // 删除指定id的内容 void MarkPointDb::deleteMarkPoint(std::string id) { // 查询数据 QSqlQuery query; query = QSqlQuery(_markPointDb); // 搜索语句 query.prepare("DELETE FROM mark_point WHERE ID=:ID"); query.bindValue(":ID", id.c_str()); query.exec(); } // 导出为txt bool MarkPointDb::exportMarkPoint(std::string strOutputPath) { // 查询数据 QSqlQuery query; query = QSqlQuery(_markPointDb); // 搜索语句 query.prepare("SELECT * FROM mark_point"); query.exec(); // 获取查询结果 QSqlRecord record = query.record(); if(record.isEmpty() == false) { // 创建一个本地文件 QString outputPath(strOutputPath.c_str()); QFile outputFile(outputPath); if(!outputFile.open(QIODevice::WriteOnly | QIODevice::Text)) { return false; } else { QTextStream stream(&outputFile); int num = 1; while(query.next() == true) { // 序号 经度 纬度 高程 QString id; double lon, lat, alt; id = query.value("ID").toString(); lon = query.value("LONGITUDE").toDouble(); lat = query.value("LATITUDE").toDouble(); alt = query.value("ALTITUDE").toDouble(); QString str(QString::number(num) + " " + id + " " + QString::number(lon, 'f', 7) + " " + QString::number(lat, 'f', 7) + " " + QString::number(alt, 'f', 2)); stream << str << "\n"; num++; } } outputFile.close(); return true; } else { return false; } } // 清空数据库 void MarkPointDb::clearMarkPoint() { // 查询数据 QSqlQuery query; query = QSqlQuery(_markPointDb); // 删除词条 query.prepare("DELETE FROM mark_point"); query.exec(); }