正在显示
7 个修改的文件
包含
63 行增加
和
165 行删除
| @@ -14,6 +14,7 @@ SET (TILESERVER_SRCS | @@ -14,6 +14,7 @@ SET (TILESERVER_SRCS | ||
| 14 | # dmpwmtsservice.cpp | 14 | # dmpwmtsservice.cpp |
| 15 | wmts/dmpwmtsutils.cpp | 15 | wmts/dmpwmtsutils.cpp |
| 16 | tms/dmptms.cpp | 16 | tms/dmptms.cpp |
| 17 | + tms/dmptmstileprovider.cpp | ||
| 17 | ) | 18 | ) |
| 18 | 19 | ||
| 19 | SET (TILESERVER_HDRS | 20 | SET (TILESERVER_HDRS |
| @@ -30,6 +31,7 @@ SET (TILESERVER_HDRS | @@ -30,6 +31,7 @@ SET (TILESERVER_HDRS | ||
| 30 | # dmpwmtsservice.h | 31 | # dmpwmtsservice.h |
| 31 | wmts/dmpwmtsutils.h | 32 | wmts/dmpwmtsutils.h |
| 32 | tms/dmptms.h | 33 | tms/dmptms.h |
| 34 | + tms/dmptmstileprovider.h | ||
| 33 | ) | 35 | ) |
| 34 | ######################################################## | 36 | ######################################################## |
| 35 | # Build | 37 | # Build |
| @@ -6,10 +6,16 @@ | @@ -6,10 +6,16 @@ | ||
| 6 | * Email: zhongpingw@chinadci.com | 6 | * Email: zhongpingw@chinadci.com |
| 7 | * copyright: 广州城市信息研究所有限公司 | 7 | * copyright: 广州城市信息研究所有限公司 |
| 8 | ***************************************************************************/ | 8 | ***************************************************************************/ |
| 9 | +#include <map> | ||
| 9 | #include "dmptms.h" | 10 | #include "dmptms.h" |
| 10 | #include "dmptilelayer.h" | 11 | #include "dmptilelayer.h" |
| 12 | +#include "dmpserverrequest.h" | ||
| 13 | +#include "dmpserverresponse.h" | ||
| 11 | #include "dmpservercontext.h" | 14 | #include "dmpservercontext.h" |
| 12 | #include "dmplogger.h" | 15 | #include "dmplogger.h" |
| 16 | +#include "dmptilelayer.h" | ||
| 17 | +#include "dmpproject.h" | ||
| 18 | +#include "dmptmstileprovider.h" | ||
| 13 | 19 | ||
| 14 | namespace DmpTms | 20 | namespace DmpTms |
| 15 | { | 21 | { |
| @@ -26,5 +32,54 @@ namespace DmpTms | @@ -26,5 +32,54 @@ namespace DmpTms | ||
| 26 | 32 | ||
| 27 | void DmpTMSService::executeRequest(const DmpServerContext &context) | 33 | void DmpTMSService::executeRequest(const DmpServerContext &context) |
| 28 | { | 34 | { |
| 35 | + | ||
| 36 | + if(context.request()->isRestful()) | ||
| 37 | + { | ||
| 38 | + std::string path_=context.request()->path(); | ||
| 39 | + std::vector<std::string> vec_; | ||
| 40 | + boost::split(vec_,context.request()->path(),boost::is_any_of("/"),boost::token_compress_on); | ||
| 41 | + int isize_=vec_.size(); | ||
| 42 | + if(isize_<4) | ||
| 43 | + { | ||
| 44 | + context.response()->write("Tms,Operation is null"); | ||
| 45 | + return; | ||
| 46 | + } | ||
| 47 | + std::string::size_type idx0_,idx1_; | ||
| 48 | + idx0_=vec_[isize_-1].find("png"); | ||
| 49 | + idx1_=vec_[isize_-1].find("jpg"); | ||
| 50 | + | ||
| 51 | + if((idx0_!=std::string::npos)||(idx1_!=std::string::npos)) | ||
| 52 | + { | ||
| 53 | + std::vector<std::string> vec0_; | ||
| 54 | + boost::split(vec0_,vec_[isize_-1],boost::is_any_of("."),boost::token_compress_on); | ||
| 55 | + int tileCol_=atoi(vec0_[0].c_str()); | ||
| 56 | + int tileRow_=atoi(vec_[isize_-2].c_str()); | ||
| 57 | + int tileMatrix_=atoi(vec_[isize_-3].c_str()); | ||
| 58 | + const DmpProject *project = context.project(); | ||
| 59 | + DmpTileLayer *tileLayer = static_cast<DmpTileLayer *>(project->getLayer("layer")); | ||
| 60 | + std::string format_=tileLayer->getFormat(); | ||
| 61 | + std::string filePath_=tileLayer->getDataSource(); | ||
| 62 | + if(filePath_.empty()) | ||
| 63 | + { | ||
| 64 | + context.response()->write("Tms,Operation is null"); | ||
| 65 | + } | ||
| 66 | + else | ||
| 67 | + { | ||
| 68 | + DmpTmsTileProvider provider_=DmpTmsTileProvider(filePath_); | ||
| 69 | + provider_.WriteTile(tileRow_, tileCol_, tileMatrix_, format_, *context.response()); | ||
| 70 | + } | ||
| 71 | + } | ||
| 72 | + else | ||
| 73 | + { | ||
| 74 | + context.response()->write("Tms,Operation is null"); | ||
| 75 | + return; | ||
| 76 | + } | ||
| 77 | + } | ||
| 78 | + else | ||
| 79 | + { | ||
| 80 | + context.response()->write("非TMS请求"); | ||
| 81 | + } | ||
| 82 | + | ||
| 29 | } | 83 | } |
| 84 | + | ||
| 30 | } // namespace DmpTms | 85 | } // namespace DmpTms |
| 1 | -/************************************************************************** | ||
| 2 | -* file: dmpserverparameters.cpp | ||
| 3 | - | ||
| 4 | -* Author: lijiahuan | ||
| 5 | -* Date: 2021-12-09 17:41:00 | ||
| 6 | -* Email: jiahuanl@chinadci.com | ||
| 7 | -* copyright: 广州城市信息研究所有限公司 | ||
| 8 | -***************************************************************************/ | ||
| 9 | -#include <iostream> | ||
| 10 | -#include <boost/lexical_cast.hpp> | ||
| 11 | -#include <boost/algorithm/string.hpp> | ||
| 12 | -#include "dmplogger.h" | ||
| 13 | -#include "dmpserverutils.h" | ||
| 14 | -#include "dmptmsparameters.h" | ||
| 15 | - | ||
| 16 | - | ||
| 17 | -namespace DmpTms | ||
| 18 | -{ | ||
| 19 | - DmpTmsParameters::DmpTmsParameters(const DmpServerParameters ¶meters) | ||
| 20 | - { | ||
| 21 | - params_ = parameters.Parameters(); | ||
| 22 | - } | ||
| 23 | - DmpTmsParameters::DmpTmsParameters() : DmpServerParameters() | ||
| 24 | - { | ||
| 25 | - | ||
| 26 | - } | ||
| 27 | - int DmpTmsParameters::TileMatrix() const | ||
| 28 | - { | ||
| 29 | - std::map<std::string, std::string>::const_iterator iter; | ||
| 30 | - iter = params_.find("TILEMATRIX"); | ||
| 31 | - if (iter != params_.end()) | ||
| 32 | - { | ||
| 33 | - try | ||
| 34 | - { | ||
| 35 | - int num_tile_atrix = boost::lexical_cast<int>(iter->second); | ||
| 36 | - return num_tile_atrix; | ||
| 37 | - } | ||
| 38 | - catch (boost::bad_lexical_cast &e) | ||
| 39 | - { | ||
| 40 | - LOGGER_ERROR(e.what()); | ||
| 41 | - } | ||
| 42 | - } | ||
| 43 | - return -1; | ||
| 44 | - } | ||
| 45 | - int DmpTmsParameters::TileRow() const | ||
| 46 | - { | ||
| 47 | - std::map<std::string, std::string>::const_iterator iter; | ||
| 48 | - iter = params_.find("TILEROW"); | ||
| 49 | - if (iter != params_.end()) | ||
| 50 | - { | ||
| 51 | - try | ||
| 52 | - { | ||
| 53 | - int num_tile_row = boost::lexical_cast<int>(iter->second); | ||
| 54 | - return num_tile_row; | ||
| 55 | - } | ||
| 56 | - catch (boost::bad_lexical_cast &e) | ||
| 57 | - { | ||
| 58 | - LOGGER_ERROR(e.what()); | ||
| 59 | - } | ||
| 60 | - } | ||
| 61 | - return -1; | ||
| 62 | - } | ||
| 63 | - int DmpTmsParameters::TileCol() const | ||
| 64 | - { | ||
| 65 | - std::map<std::string, std::string>::const_iterator iter; | ||
| 66 | - iter = params_.find("TILECOL"); | ||
| 67 | - if (iter != params_.end()) | ||
| 68 | - { | ||
| 69 | - try | ||
| 70 | - { | ||
| 71 | - int num_tile_col = boost::lexical_cast<int>(iter->second); | ||
| 72 | - return num_tile_col; | ||
| 73 | - } | ||
| 74 | - catch (boost::bad_lexical_cast &e) | ||
| 75 | - { | ||
| 76 | - LOGGER_ERROR(e.what()); | ||
| 77 | - } | ||
| 78 | - } | ||
| 79 | - return -1; | ||
| 80 | - } | ||
| 81 | - | ||
| 82 | - std::string DmpTmsParameters::TileMatrixSet() const | ||
| 83 | - { | ||
| 84 | - std::string tile_matrix_set; | ||
| 85 | - std::map<std::string, std::string>::const_iterator iter; | ||
| 86 | - iter = params_.find("TILEMATRIXSET"); | ||
| 87 | - if (iter != params_.end()) | ||
| 88 | - { | ||
| 89 | - tile_matrix_set = iter->second; | ||
| 90 | - } | ||
| 91 | - return tile_matrix_set; | ||
| 92 | - } | ||
| 93 | - std::string DmpTmsParameters::Layer() const | ||
| 94 | - { | ||
| 95 | - std::string layer; | ||
| 96 | - std::map<std::string, std::string>::const_iterator iter; | ||
| 97 | - iter = params_.find("LAYER"); | ||
| 98 | - if (iter != params_.end()) | ||
| 99 | - { | ||
| 100 | - layer = iter->second; | ||
| 101 | - } | ||
| 102 | - return layer; | ||
| 103 | - } | ||
| 104 | - | ||
| 105 | - DmpTmsParameters::Format DmpTmsParameters::ImageFormat() const | ||
| 106 | - { | ||
| 107 | - std::string frm; | ||
| 108 | - std::map<std::string, std::string>::const_iterator iter; | ||
| 109 | - iter = params_.find("format"); | ||
| 110 | - if (iter != params_.end()) | ||
| 111 | - { | ||
| 112 | - frm = iter->second; | ||
| 113 | - if (frm.empty()) { | ||
| 114 | - return Format::NONE; | ||
| 115 | - } | ||
| 116 | - Format f = Format::PNG; | ||
| 117 | - boost::to_lower(frm); | ||
| 118 | - if (frm.compare("jpg") == 0 || frm.compare("jpeg") == 0 || frm.compare("image/jpeg") == 0 ) { | ||
| 119 | - f = Format::JPG; | ||
| 120 | - } | ||
| 121 | - return f; | ||
| 122 | - } | ||
| 123 | - return Format::NONE; | ||
| 124 | - } | ||
| 125 | -} |
| 1 | -/************************************************************************** | ||
| 2 | -* file: dmpserverparameters.h | ||
| 3 | - | ||
| 4 | -* Author: lijiahuan | ||
| 5 | -* Date: 2021-12-09 17:41:00 | ||
| 6 | -* Email: jiahuanl@chinadci.com | ||
| 7 | -* copyright: 广州城市信息研究所有限公司 | ||
| 8 | -***************************************************************************/ | ||
| 9 | -#ifndef __dmptmsparameters_h__ | ||
| 10 | -#define __dmptmsparameters_h__ | ||
| 11 | - | ||
| 12 | -#include "dmpserverparameters.h" | ||
| 13 | -namespace DmpTms | ||
| 14 | -{ | ||
| 15 | - class DmpTmsParameters : public DmpServerParameters | ||
| 16 | - { | ||
| 17 | - public: | ||
| 18 | - enum class Format | ||
| 19 | - { | ||
| 20 | - NONE, | ||
| 21 | - JPG, | ||
| 22 | - PNG | ||
| 23 | - }; | ||
| 24 | - DmpTmsParameters(const DmpServerParameters ¶meters); | ||
| 25 | - DmpTmsParameters(); | ||
| 26 | - virtual ~DmpTmsParameters() = default; | ||
| 27 | - std::string Layer() const; | ||
| 28 | - Format ImageFormat() const; | ||
| 29 | - std::string TileMatrixSet() const; | ||
| 30 | - int TileMatrix() const; | ||
| 31 | - int TileRow() const; | ||
| 32 | - int TileCol() const; | ||
| 33 | - }; | ||
| 34 | -} | ||
| 35 | -#endif //__dmptmsparameters_h__ |
| @@ -19,8 +19,7 @@ namespace DmpTms | @@ -19,8 +19,7 @@ namespace DmpTms | ||
| 19 | std::string tile_path = file_rootPath+"/"+std::to_string(level)+"/"+std::to_string(row)+"/"+std::to_string(col)+"."+format; | 19 | std::string tile_path = file_rootPath+"/"+std::to_string(level)+"/"+std::to_string(row)+"/"+std::to_string(col)+"."+format; |
| 20 | std::ifstream fread(tile_path, std::ifstream::binary); | 20 | std::ifstream fread(tile_path, std::ifstream::binary); |
| 21 | if(!fread) | 21 | if(!fread) |
| 22 | - { | ||
| 23 | - | 22 | + { |
| 24 | response.sendError(500, "找不到瓦片:("); | 23 | response.sendError(500, "找不到瓦片:("); |
| 25 | return; | 24 | return; |
| 26 | } | 25 | } |
| @@ -16,11 +16,13 @@ namespace DmpTms | @@ -16,11 +16,13 @@ namespace DmpTms | ||
| 16 | { | 16 | { |
| 17 | class DmpTmsTileProvider | 17 | class DmpTmsTileProvider |
| 18 | { | 18 | { |
| 19 | - public: | 19 | + public: |
| 20 | + std::string ImageFormat() const; | ||
| 20 | DmpTmsTileProvider(const std::string& root_path); | 21 | DmpTmsTileProvider(const std::string& root_path); |
| 21 | void WriteTile(const int row, const int col, const int level, const std::string& format, DmpServerResponse& response) ; | 22 | void WriteTile(const int row, const int col, const int level, const std::string& format, DmpServerResponse& response) ; |
| 22 | - protected: | 23 | + protected: |
| 23 | std::string file_rootPath; | 24 | std::string file_rootPath; |
| 24 | }; | 25 | }; |
| 25 | } | 26 | } |
| 27 | + | ||
| 26 | #endif | 28 | #endif |
请
注册
或
登录
后发表评论