|
- /* 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<MarkPoint*> MarkPointDb::getAllMarkPoint() {
- // 查询数据
- QSqlQuery query;
- query = QSqlQuery(_markPointDb);
-
- // 搜索语句
- query.prepare("SELECT * FROM mark_point");
- query.exec();
-
- // 获取查询结果
- QSqlRecord record = query.record();
- std::vector<MarkPoint*> 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();
- }
|