This commit is contained in:
2026-08-05 11:59:45 +08:00
parent 18e64dfe22
commit 587c1d6d01
22 changed files with 2517 additions and 3049 deletions
+11 -8
View File
@@ -274,23 +274,23 @@ public:
if (config_.extension.empty() || config_.extension.front() != '.') {
throw std::invalid_argument("invalid tile extension: " + config_.extension);
}
if (config_.file_format == "directory") {
if (config_.file_format == Map_Tile_File_Format::directory) {
resolver_ = std::make_unique<Tile_Path_Resolver>(config_);
}
else if (config_.file_format == "mbtiles") {
else if (config_.file_format == Map_Tile_File_Format::mbtiles) {
for (auto& file : config_.get_true_files()) {
mbtiles_files_.push_back(std::make_unique<Mbtiles_File>(std::move(file)));
}
}
else {
throw std::invalid_argument("invalid tile file_format: " + config_.file_format);
throw std::invalid_argument("invalid tile file_format: " + Psc::to_string(config_.file_format));
}
}
asio::awaitable<Tile_Load_Result> load(const Tile_Request& request, const Tile_Cache_Request& cache_request) const {
if (request.z < config_.minimum_level || request.z > config_.maximum_level) {
co_return Tile_Load_Result{Tile_Load_Status::Not_Found};
}
if (config_.file_format == "mbtiles") {
if (config_.file_format == Map_Tile_File_Format::mbtiles) {
co_return co_await load_mbtiles_tile(request, cache_request);
}
co_return co_await load_directory_tile(request, cache_request);
@@ -336,7 +336,6 @@ private:
std::move(content_type), *cache_info};
}
asio::awaitable<Tile_Load_Result> load_mbtiles_tile(Tile_Request request, Tile_Cache_Request cache_request) const {
std::cout << "加载 load_mbtiles_tile" << std::endl;
auto content_type =
httplib::detail::find_content_type("tile" + config_.extension, {}, "application/octet-stream");
co_return co_await asio::co_spawn(
@@ -520,7 +519,7 @@ void register_map_graphics_handler() {
return;
}
try {
global->cesium_graphics_config.from_base_json(&parsed.value());
global->cesium_graphics_config.from_base_json(&parsed.value(), false);
Global::save();
}
catch (const std::exception& error) {
@@ -643,7 +642,7 @@ void handle_map_model_config_update(const drogon::HttpRequestPtr& req, Global* g
if (!parsed.has_value()) {
throw std::invalid_argument("invalid map_models");
}
global->map_model_config.from_base_json(&parsed.value());
global->map_model_config.from_base_json(&parsed.value(), false);
Global::save();
}
void register_map_models_handler() {
@@ -700,11 +699,15 @@ void register_map_view_handler() {
}
try {
auto next_view = global->map_view_config;
next_view.from_base_json(&parsed.value());
next_view.from_base_json(&parsed.value(), false);
if (!global->map_resources_config.is_imagery_key(next_view.map2d.current_imagery_key) ||
!global->map_resources_config.is_imagery_key(next_view.map3d.current_imagery_key)) {
throw std::invalid_argument("invalid current_imagery_key");
}
if (!next_view.map3d.current_terrain_key.empty() &&
!global->map_resources_config.is_terrain_key(next_view.map3d.current_terrain_key)) {
throw std::invalid_argument("invalid current_terrain_key");
}
global->map_resources_config.current_imagery_key = key.value();
global->map_view_config = next_view;
Global::save();