feat/dataset-detail-chart #5
|
|
@ -5,7 +5,8 @@ add_library(geopro_data STATIC
|
|||
repo/LocalSampleRepository.cpp
|
||||
dto/NavDto.cpp
|
||||
dto/DatasetChartDto.cpp
|
||||
api/ApiProjectRepository.cpp)
|
||||
api/ApiProjectRepository.cpp
|
||||
api/ApiDatasetRepository.cpp)
|
||||
target_include_directories(geopro_data PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
target_link_libraries(geopro_data PUBLIC geopro_core geopro_net Qt6::Core PRIVATE nlohmann_json::nlohmann_json)
|
||||
target_compile_features(geopro_data PUBLIC cxx_std_17)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,51 @@
|
|||
#include "api/ApiDatasetRepository.hpp"
|
||||
#include <stdexcept>
|
||||
#include <QJsonObject>
|
||||
#include <QString>
|
||||
#include <QUrl>
|
||||
#include "ApiClient.hpp"
|
||||
#include "dto/DatasetChartDto.hpp"
|
||||
namespace geopro::data {
|
||||
namespace {
|
||||
QString enc(const std::string& s) {
|
||||
return QString::fromUtf8(QUrl::toPercentEncoding(QString::fromStdString(s)));
|
||||
}
|
||||
void must(const net::ApiResponse& r, const char* what) {
|
||||
if (r.code != 200) throw std::runtime_error(std::string(what) + " failed: " +
|
||||
(r.msg.isEmpty() ? r.rawError.toStdString() : r.msg.toStdString()));
|
||||
}
|
||||
geopro::core::ColorScale colorScale(net::ApiClient& api, const std::string& dsId, int type) {
|
||||
QJsonObject body{{"dsObjectId", QString::fromStdString(dsId)}, {"businessCode", ""}, {"type", type}};
|
||||
const net::ApiResponse r = api.postJson(QStringLiteral("/business/lvl/colorGradation/getDetail"), body);
|
||||
must(r, "colorGradation");
|
||||
return dto::parseColorBar(r.data);
|
||||
}
|
||||
} // namespace
|
||||
|
||||
ApiDatasetRepository::ApiDatasetRepository(net::ApiClient& api) : api_(api) {}
|
||||
|
||||
geopro::core::Grid ApiDatasetRepository::loadGrid(const std::string& dsId) {
|
||||
const net::ApiResponse r = api_.get(
|
||||
QStringLiteral("/business/dd/ert/inversion/rows/%1").arg(enc(dsId)));
|
||||
must(r, "inversion/rows");
|
||||
return dto::parseInversionGrid(r.data);
|
||||
}
|
||||
geopro::core::ScatterField ApiDatasetRepository::loadScatter(const std::string& dsId) {
|
||||
const net::ApiResponse r = api_.get(
|
||||
QStringLiteral("/business/dd/ert/inversion/getErtRawDataScatterGraph/%1").arg(enc(dsId)));
|
||||
must(r, "scatterGraph");
|
||||
return dto::parseScatterGraph(r.data);
|
||||
}
|
||||
geopro::core::ColorScale ApiDatasetRepository::loadColorScale(const std::string& dsId) {
|
||||
return colorScale(api_, dsId, 2);
|
||||
}
|
||||
geopro::core::ColorScale ApiDatasetRepository::loadScatterColorScale(const std::string& dsId) {
|
||||
return colorScale(api_, dsId, 1);
|
||||
}
|
||||
std::vector<geopro::core::Anomaly> ApiDatasetRepository::loadAnomalies(const std::string& dsId) {
|
||||
const net::ApiResponse r = api_.get(
|
||||
QStringLiteral("/business/exception/queryException/%1").arg(enc(dsId)));
|
||||
must(r, "queryException");
|
||||
return dto::parseDatasetAnomalies(r.data.value(QStringLiteral("value")).toArray());
|
||||
}
|
||||
} // namespace geopro::data
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
#pragma once
|
||||
#include "repo/IDatasetRepository.hpp"
|
||||
namespace geopro::net { class ApiClient; }
|
||||
namespace geopro::data {
|
||||
|
||||
// 真实 API 实现 IDatasetRepository(ERT 反演相关)。失败抛 std::runtime_error。
|
||||
class ApiDatasetRepository : public IDatasetRepository {
|
||||
public:
|
||||
explicit ApiDatasetRepository(net::ApiClient& api);
|
||||
std::vector<GsNode> loadStructure() override { return {}; } // 不经此仓储取结构
|
||||
geopro::core::Grid loadGrid(const std::string& dsId) override;
|
||||
geopro::core::ScatterField loadScatter(const std::string& dsId) override;
|
||||
geopro::core::ColorScale loadColorScale(const std::string& dsId) override; // type2 网格
|
||||
geopro::core::ColorScale loadScatterColorScale(const std::string& dsId) override; // type1 原数据
|
||||
std::vector<geopro::core::Anomaly> loadAnomalies(const std::string& dsId) override;
|
||||
private:
|
||||
net::ApiClient& api_;
|
||||
};
|
||||
} // namespace geopro::data
|
||||
|
|
@ -15,6 +15,7 @@ public:
|
|||
virtual geopro::core::Grid loadGrid(const std::string& dsId) = 0;
|
||||
virtual geopro::core::ScatterField loadScatter(const std::string& dsId) = 0;
|
||||
virtual geopro::core::ColorScale loadColorScale(const std::string& dsId) = 0;
|
||||
virtual geopro::core::ColorScale loadScatterColorScale(const std::string& dsId) = 0;
|
||||
virtual std::vector<geopro::core::Anomaly> loadAnomalies(const std::string& dsId) = 0;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -18,8 +18,7 @@ public:
|
|||
std::vector<geopro::core::Anomaly> loadAnomalies(const std::string& dsId) override;
|
||||
|
||||
// 散点原数据(#17)专属色阶:剖面原数据自带的色阶文件(与网格色阶不同:分段值范围更大)。
|
||||
// 具体类专有方法(不进 IDatasetRepository 接口);散点点为不透明,alpha 量纲差异无影响。
|
||||
geopro::core::ColorScale loadScatterColorScale(const std::string& dsId);
|
||||
geopro::core::ColorScale loadScatterColorScale(const std::string& dsId) override;
|
||||
|
||||
// DEM/影像 GeoTIFF 的绝对路径(供 render::buildTerrain 经 GDAL 读)。
|
||||
std::string demPath() const;
|
||||
|
|
|
|||
Loading…
Reference in New Issue