正在显示
25 个修改的文件
包含
1042 行增加
和
133 行删除
dmapserver4.tar.gz
0 → 100644
不能预览此文件类型
| ... | ... | @@ -24,7 +24,7 @@ SET(DMAP_CORE_SRCS |
| 24 | 24 | dmptilematrixset.cpp |
| 25 | 25 | dmpvectordataprovider.cpp |
| 26 | 26 | dmpvectorlayer.cpp |
| 27 | - dmpvectorthinlayer.cpp | |
| 27 | + dmpvectorvacuatelayer.cpp | |
| 28 | 28 | dmpvectorlayerrenderer.cpp |
| 29 | 29 | dmpxmlutils.cpp |
| 30 | 30 | |
| ... | ... | @@ -76,7 +76,7 @@ SET(DMAP_CORE_HDRS |
| 76 | 76 | dmptilematrixset.h |
| 77 | 77 | dmpvectordataprovider.h |
| 78 | 78 | dmpvectorlayer.h |
| 79 | - dmpvectorthinlayer.h | |
| 79 | + dmpvectorvacuatelayer.h | |
| 80 | 80 | dmpvectorlayerrenderer.h |
| 81 | 81 | dmpxmlutils.h |
| 82 | 82 | ... | ... |
| ... | ... | @@ -223,4 +223,103 @@ DmpMapLayer *DmpProject::getLayer() const |
| 223 | 223 | { |
| 224 | 224 | return nullptr; |
| 225 | 225 | } |
| 226 | +} | |
| 227 | + | |
| 228 | +bool DmpProject::initVectorLayerVacuate(std::function<std::string(const std::string &)> getVacuateFun) | |
| 229 | +{ | |
| 230 | + try | |
| 231 | + { | |
| 232 | + std::string tableguids = ""; | |
| 233 | + for (int i = 0; i < vectorLayers_.size(); i++) | |
| 234 | + { | |
| 235 | + DmpMapLayer *layer = vectorLayers_.at(i); | |
| 236 | + if (layer->type() == DmpMapLayerType::VectorLayer) | |
| 237 | + { | |
| 238 | + if (!tableguids.empty()) | |
| 239 | + { | |
| 240 | + tableguids += ","; | |
| 241 | + } | |
| 242 | + tableguids += layer->id(); | |
| 243 | + } | |
| 244 | + } | |
| 245 | + | |
| 246 | + if (tableguids.empty()) | |
| 247 | + { | |
| 248 | + return false; | |
| 249 | + } | |
| 250 | + | |
| 251 | + std::string vacuateInfo = getVacuateFun(tableguids); | |
| 252 | + if (vacuateInfo.empty()) | |
| 253 | + { | |
| 254 | + return false; | |
| 255 | + } | |
| 256 | + | |
| 257 | + std::istringstream stream(vacuateInfo); | |
| 258 | + ptree pt; | |
| 259 | + read_json(stream, pt); | |
| 260 | + bool result = pt.get<bool>("result"); | |
| 261 | + if (!result) | |
| 262 | + { | |
| 263 | + return false; | |
| 264 | + } | |
| 265 | + | |
| 266 | + //图层 | |
| 267 | + ptree pLayers = pt.get_child("data"); | |
| 268 | + // for (BOOST_AUTO(pos, pLayers.begin()); pos != pLayers.end(); ++pos) | |
| 269 | + for (ptree::iterator pos = pLayers.begin(); pos != pLayers.end(); ++pos) | |
| 270 | + { | |
| 271 | + ptree pLayer = pos->second; | |
| 272 | + int vacuateCount = pLayer.get<int>("vacuate_count"); | |
| 273 | + if (vacuateCount > 0) | |
| 274 | + { | |
| 275 | + std::string tableGuid = pLayer.get<std::string>("table_guid"); | |
| 276 | + std::string tableName = pLayer.get<std::string>("table_name"); | |
| 277 | + | |
| 278 | + DmpMapLayer *layer = this->getLayer(tableName); | |
| 279 | + if (layer && layer->type() == DmpMapLayerType::VectorLayer) | |
| 280 | + { | |
| 281 | + DmpVectorLayer *vectorLayer = (DmpVectorLayer *)layer; | |
| 282 | + ptree ptableVacuates = pLayer.get_child("table_vacuate"); | |
| 283 | + for (BOOST_AUTO(pos1, ptableVacuates.begin()); pos1 != ptableVacuates.end(); ++pos1) | |
| 284 | + { | |
| 285 | + ptree pVacuateLayer = pos1->second; | |
| 286 | + shared_ptr<DmpVectorVacuateLayer> vacuateLayer(new DmpVectorVacuateLayer()); | |
| 287 | + std::string name = pVacuateLayer.get<std::string>("name"); | |
| 288 | + std::string connectStr = pVacuateLayer.get<std::string>("connectstr"); | |
| 289 | + double pixel_distance = pVacuateLayer.get<double>("pixel_distance"); | |
| 290 | + vacuateLayer->Init(pixel_distance, name, connectStr); | |
| 291 | + vectorLayer->ApplendCurrentScaleTable(vacuateLayer); | |
| 292 | + } | |
| 293 | + } | |
| 294 | + } | |
| 295 | + }//for | |
| 296 | + return true; | |
| 297 | + } | |
| 298 | + catch (const std::exception &e) | |
| 299 | + { | |
| 300 | + std::cerr << e.what() << '\n'; | |
| 301 | + return false; | |
| 302 | + } | |
| 303 | + return false; | |
| 304 | +} | |
| 305 | + | |
| 306 | +bool DmpProject::initVectorLayerVacuate(DmpProject* project) | |
| 307 | +{ | |
| 308 | + if(!project) return false; | |
| 309 | + for (size_t i = 0; i < project->vectorLayers().size(); i++) | |
| 310 | + { | |
| 311 | + DmpMapLayer *layer = project->vectorLayers().at(i); | |
| 312 | + if (layer->type() == DmpMapLayerType::VectorLayer) | |
| 313 | + { | |
| 314 | + DmpVectorLayer *vectorLayer = (DmpVectorLayer *)layer; | |
| 315 | + DmpVectorLayer *thisVectorLayer = (DmpVectorLayer*)this->getLayer(layer->name()); | |
| 316 | + for (size_t i0 = 0; i0 < vectorLayer->vacuateLayers().size(); i0++) | |
| 317 | + { | |
| 318 | + std::shared_ptr<DmpVectorVacuateLayer> pvectorVacuateLayer = vectorLayer->vacuateLayers().at(i0); | |
| 319 | + thisVectorLayer->vacuateLayers().push_back(pvectorVacuateLayer->clone()); | |
| 320 | + } | |
| 321 | + | |
| 322 | + } | |
| 323 | + } | |
| 324 | + return true; | |
| 226 | 325 | } |
| \ No newline at end of file | ... | ... |
| ... | ... | @@ -27,6 +27,9 @@ class CORE_EXPORT DmpProject |
| 27 | 27 | bool Read(const std::string &data); |
| 28 | 28 | bool Write(const std::string &filename, const std::string &data); |
| 29 | 29 | bool WritePtree(boost::property_tree::ptree& ptDoc); |
| 30 | + //初始化矢量图层金字塔信息 | |
| 31 | + bool initVectorLayerVacuate(std::function<std::string(const std::string &)> getVacuateFun); | |
| 32 | + bool initVectorLayerVacuate(DmpProject* project); | |
| 30 | 33 | std::string WriteXml(); |
| 31 | 34 | std::string WriteJson(); |
| 32 | 35 | DmpCoordinateReferenceSystem crs() const; | ... | ... |
| ... | ... | @@ -293,7 +293,7 @@ bool DmpVectorLayer::setDataProvider(const std::string &provider) |
| 293 | 293 | return true; |
| 294 | 294 | } |
| 295 | 295 | |
| 296 | -shared_ptr<DmpVectorThinLayer> DmpVectorLayer::GetCurrentScaleTable(double dx) | |
| 296 | +shared_ptr<DmpVectorVacuateLayer> DmpVectorLayer::GetCurrentScaleTable(double dx) | |
| 297 | 297 | { |
| 298 | 298 | |
| 299 | 299 | /* |
| ... | ... | @@ -319,13 +319,13 @@ shared_ptr<DmpVectorThinLayer> DmpVectorLayer::GetCurrentScaleTable(double dx) |
| 319 | 319 | } |
| 320 | 320 | */ |
| 321 | 321 | |
| 322 | - for (int i = 0; i < this->thinLayers_.size(); i++) | |
| 322 | + for (int i = 0; i < this->vacuateLayers_.size(); i++) | |
| 323 | 323 | { |
| 324 | - shared_ptr<DmpVectorThinLayer> mapLayerThinning = this->thinLayers_[i]; | |
| 324 | + shared_ptr<DmpVectorVacuateLayer> vacuateLayer = this->vacuateLayers_[i]; | |
| 325 | 325 | |
| 326 | - if (mapLayerThinning->IsCurrentLayer(dx)) | |
| 326 | + if (vacuateLayer->IsCurrentLayer(dx)) | |
| 327 | 327 | { |
| 328 | - return mapLayerThinning; | |
| 328 | + return vacuateLayer; | |
| 329 | 329 | } |
| 330 | 330 | } |
| 331 | 331 | return nullptr; | ... | ... |
| ... | ... | @@ -15,7 +15,7 @@ |
| 15 | 15 | #include "dmpmaplayer.h" |
| 16 | 16 | #include "dmpwkbtypes.h" |
| 17 | 17 | #include "dmpvectordataprovider.h" |
| 18 | -#include "dmpvectorthinlayer.h" | |
| 18 | +#include "dmpvectorvacuatelayer.h" | |
| 19 | 19 | #include "Renderer.h" |
| 20 | 20 | #include <vector> |
| 21 | 21 | |
| ... | ... | @@ -54,8 +54,9 @@ class CORE_EXPORT DmpVectorLayer : public DmpMapLayer |
| 54 | 54 | |
| 55 | 55 | |
| 56 | 56 | shared_ptr<DmapCore_30::Renderer> GetRenderer30() { return renderer_30_; } |
| 57 | - vector<shared_ptr<DmpVectorThinLayer>> thinLayers() const { return thinLayers_; } | |
| 58 | - shared_ptr<DmpVectorThinLayer> GetCurrentScaleTable(double dx); | |
| 57 | + vector<shared_ptr<DmpVectorVacuateLayer>> vacuateLayers() const { return vacuateLayers_; } | |
| 58 | + shared_ptr<DmpVectorVacuateLayer> GetCurrentScaleTable(double dx); | |
| 59 | + void ApplendCurrentScaleTable(shared_ptr<DmpVectorVacuateLayer> pVectorVacuateLayer){vacuateLayers_.push_back(pVectorVacuateLayer);} | |
| 59 | 60 | |
| 60 | 61 | std::string schema() { return schema_;} |
| 61 | 62 | std::string geom() { return geom_;} |
| ... | ... | @@ -79,9 +80,9 @@ class CORE_EXPORT DmpVectorLayer : public DmpMapLayer |
| 79 | 80 | std::string wherestr_; |
| 80 | 81 | bool isinit_ = false; |
| 81 | 82 | shared_ptr<DmapCore_30::Renderer> renderer_30_ = nullptr; |
| 82 | - vector<shared_ptr<DmpVectorThinLayer>> thinLayers_; | |
| 83 | + vector<shared_ptr<DmpVectorVacuateLayer>> vacuateLayers_; | |
| 84 | + | |
| 83 | 85 | |
| 84 | - | |
| 85 | 86 | |
| 86 | 87 | }; |
| 87 | 88 | #endif //__dmpvectorlayer_h__ | ... | ... |
| 1 | 1 | /************************************************************************** |
| 2 | -* file: dmpvectorthinlayer.cpp | |
| 2 | +* file: dmpvectorvacuatelayer.cpp | |
| 3 | 3 | |
| 4 | 4 | * Author: qingxiongf |
| 5 | 5 | * Date: 2021-12-13 10:05:35 |
| 6 | 6 | * Email: qingxiongf@chinadci.com |
| 7 | 7 | * copyright: 广州城市信息研究所有限公司 |
| 8 | 8 | ***************************************************************************/ |
| 9 | -#include "dmpvectorthinlayer.h" | |
| 9 | +#include "dmpvectorvacuatelayer.h" | |
| 10 | 10 | |
| 11 | -DmpVectorThinLayer::DmpVectorThinLayer(/* args */) | |
| 11 | +DmpVectorVacuateLayer::DmpVectorVacuateLayer(/* args */) | |
| 12 | 12 | { |
| 13 | - | |
| 13 | + | |
| 14 | 14 | } |
| 15 | 15 | |
| 16 | -DmpVectorThinLayer::~DmpVectorThinLayer() | |
| 16 | +DmpVectorVacuateLayer::~DmpVectorVacuateLayer() | |
| 17 | 17 | { |
| 18 | 18 | |
| 19 | 19 | } |
| 20 | 20 | |
| 21 | - bool DmpVectorThinLayer::IsCurrentLayer(double d) | |
| 21 | +bool DmpVectorVacuateLayer::IsCurrentLayer(double d) | |
| 22 | 22 | { |
| 23 | 23 | if(d > m_ddis) |
| 24 | 24 | { |
| ... | ... | @@ -27,21 +27,22 @@ DmpVectorThinLayer::~DmpVectorThinLayer() |
| 27 | 27 | return false; |
| 28 | 28 | } |
| 29 | 29 | |
| 30 | -bool DmpVectorThinLayer::Init(double minX, double minY, double maxX, double maxY, int dxCount, int dyCount,std::string tableName) | |
| 31 | -{ | |
| 32 | - m_ddis = std::max( (maxX - minX)/ dxCount, (maxY - minY)/ dyCount); | |
| 33 | - m_tableName = tableName; | |
| 34 | - return true; | |
| 35 | -} | |
| 30 | + std::shared_ptr<DmpVectorVacuateLayer> DmpVectorVacuateLayer::clone() | |
| 31 | + { | |
| 32 | + std::shared_ptr<DmpVectorVacuateLayer> vacuateLayer(new DmpVectorVacuateLayer(*this)); | |
| 33 | + return vacuateLayer; | |
| 34 | + } | |
| 35 | + | |
| 36 | 36 | |
| 37 | -bool DmpVectorThinLayer::Init(double dis,std::string tableName) | |
| 37 | +bool DmpVectorVacuateLayer::Init(double dis, const std::string& tableName, const std::string& connectstr) | |
| 38 | 38 | { |
| 39 | 39 | m_ddis =dis; |
| 40 | 40 | m_tableName = tableName; |
| 41 | + connectstr_ = connectstr; | |
| 41 | 42 | return true; |
| 42 | 43 | } |
| 43 | 44 | |
| 44 | -double DmpVectorThinLayer::GeDisPix() | |
| 45 | +double DmpVectorVacuateLayer::GeDisPix() | |
| 45 | 46 | { |
| 46 | 47 | return this->m_ddis; |
| 47 | 48 | } |
| \ No newline at end of file | ... | ... |
| 1 | 1 | /************************************************************************** |
| 2 | -* file: dmpvectorthinlayer.h | |
| 2 | +* file: dmpvectorvacuatelayer.h | |
| 3 | 3 | |
| 4 | 4 | * Author: qingxiongf |
| 5 | 5 | * Date: 2021-12-13 10:05:42 |
| ... | ... | @@ -7,33 +7,33 @@ |
| 7 | 7 | * copyright: 广州城市信息研究所有限公司 |
| 8 | 8 | ***************************************************************************/ |
| 9 | 9 | |
| 10 | -#ifndef __dmpvectorthinlayer_h__ | |
| 11 | -#define __dmpvectorthinlayer_h__ | |
| 10 | +#ifndef __dmpvectorvacuatelayer_h__ | |
| 11 | +#define __dmpvectorvacuatelayer_h__ | |
| 12 | 12 | |
| 13 | 13 | #include "dmap_core.h" |
| 14 | 14 | #include <string> |
| 15 | +#include <memory> | |
| 15 | 16 | |
| 16 | -class CORE_EXPORT DmpVectorThinLayer | |
| 17 | +class CORE_EXPORT DmpVectorVacuateLayer | |
| 17 | 18 | { |
| 18 | 19 | public: |
| 19 | - DmpVectorThinLayer(/* args */); | |
| 20 | + DmpVectorVacuateLayer(/* args */); | |
| 20 | 21 | |
| 21 | - ~DmpVectorThinLayer(); | |
| 22 | + ~DmpVectorVacuateLayer(); | |
| 22 | 23 | |
| 23 | 24 | bool IsCurrentLayer(double d); |
| 24 | 25 | |
| 25 | - bool Init(double minX, double minY, | |
| 26 | - double maxX, double maxY, | |
| 27 | - int dxCount, int dyCount, | |
| 28 | - std::string tableName); | |
| 29 | 26 | |
| 30 | - bool Init(double minX, | |
| 31 | - std::string tableName); | |
| 27 | + bool Init(double dis, const std::string& tableName, const std::string& connectstr); | |
| 28 | + | |
| 29 | + std::shared_ptr<DmpVectorVacuateLayer> clone(); | |
| 32 | 30 | |
| 33 | 31 | double GeDisPix(); |
| 34 | 32 | |
| 35 | 33 | std::string tableName()const { return m_tableName;} |
| 36 | 34 | |
| 35 | + std::string connectStr() const {return connectstr_;} | |
| 36 | + | |
| 37 | 37 | private: |
| 38 | 38 | int m_indexLevel; |
| 39 | 39 | int m_dataCount; |
| ... | ... | @@ -44,6 +44,7 @@ class CORE_EXPORT DmpVectorThinLayer |
| 44 | 44 | double m_ddis; |
| 45 | 45 | std::string m_tableName; |
| 46 | 46 | std::string polygon_area = "geodmap_area"; |
| 47 | + std::string connectstr_ = ""; | |
| 47 | 48 | }; |
| 48 | 49 | |
| 49 | -#endif // __dmpvectorthinlayer_h__ | |
| 50 | +#endif // __dmpvectorvacuatelayer_h__ | ... | ... |
| ... | ... | @@ -116,25 +116,24 @@ namespace DmapCore_30 |
| 116 | 116 | |
| 117 | 117 | clsPtree::PtreeAttrParse("glowing", ptRenderer, m_bGlowing); |
| 118 | 118 | if (m_bGlowing) |
| 119 | - clsPtree::PtreeAttrParseColor("glowingcolor", "glowingtransparency", ptRenderer, m_iBGColor); | |
| 119 | + clsPtree::PtreeAttrParseColor("glowingcolor", "glowingtransparency", ptRenderer, m_iGlowingColor); | |
| 120 | 120 | |
| 121 | 121 | |
| 122 | - clsPtree::PtreeAttrParse("shadow", ptRenderer, m_bGlowing); | |
| 123 | - if (m_bGlowing) | |
| 122 | + clsPtree::PtreeAttrParse("shadow", ptRenderer, m_bShadow); | |
| 123 | + if (m_bShadow) | |
| 124 | 124 | clsPtree::PtreeAttrParseColor("shadowcolor", "shadowtransparency", ptRenderer, m_iShadowColor); |
| 125 | 125 | |
| 126 | 126 | pt.add_child("TEXTSYMBOL",ptRenderer); |
| 127 | 127 | return true; |
| 128 | 128 | } |
| 129 | 129 | |
| 130 | - void TextSymbol::ToJson(AppendBuffer *ab) | |
| 130 | + void TextSymbol::ToJson(AppendBuffer *ab) | |
| 131 | 131 | { |
| 132 | 132 | char buff[300] = {0}; |
| 133 | 133 | char resultbuff[5000] ={0}; |
| 134 | 134 | sprintf(resultbuff, R"("TEXTSYMBOL":{"antialiasing":"antialias_default",)"); |
| 135 | 135 | clsJson::JsonAttrParse("font", resultbuff, buff, this->m_sFont); |
| 136 | 136 | clsJson::JsonAttrParse("fontsize", resultbuff, buff, this->m_iFontSize); |
| 137 | - // | |
| 138 | 137 | clsJson::JsonAttrParseColor("fontcolor", "fonttransparency", resultbuff, buff, m_iFontColor); |
| 139 | 138 | clsJson::JsonAttrParse("x_dis", resultbuff, buff, this->m_dXdis); |
| 140 | 139 | clsJson::JsonAttrParse("y_dis", resultbuff, buff, this->m_dYdis); |
| ... | ... | @@ -147,11 +146,11 @@ namespace DmapCore_30 |
| 147 | 146 | |
| 148 | 147 | clsJson::JsonAttrParse("glowing", resultbuff, buff, m_bGlowing); |
| 149 | 148 | if (m_bGlowing) |
| 150 | - clsJson::JsonAttrParseColor("glowingcolor", "glowingtransparency", resultbuff, buff, m_iBGColor); | |
| 149 | + clsJson::JsonAttrParseColor("glowingcolor", "glowingtransparency", resultbuff, buff, m_iGlowingColor); | |
| 151 | 150 | |
| 152 | 151 | |
| 153 | - clsJson::JsonAttrParse("shadow", resultbuff, buff, m_bGlowing); | |
| 154 | - if (m_bGlowing) | |
| 152 | + clsJson::JsonAttrParse("shadow", resultbuff, buff, m_bShadow); | |
| 153 | + if (m_bShadow) | |
| 155 | 154 | clsJson::JsonAttrParseColor("shadowcolor", "shadowtransparency", resultbuff, buff, m_iShadowColor); |
| 156 | 155 | |
| 157 | 156 | clsJson::JsonAttrEnd(resultbuff); | ... | ... |
| ... | ... | @@ -121,6 +121,11 @@ bool DmpServerManager::publish(const std::string& serverName, const std::string& |
| 121 | 121 | return false; |
| 122 | 122 | } |
| 123 | 123 | |
| 124 | + project->initVectorLayerVacuate([](const std::string &tableguid) | |
| 125 | + { | |
| 126 | + return DmpHttp::get(DmpServerConfig::Instance()->getMetaUrl() + URL_VACUATE + tableguid); | |
| 127 | + }); | |
| 128 | + | |
| 124 | 129 | if (!serverRegistry_->getServer(serverName)->publish(serviceName, title, capabilities, *project)) |
| 125 | 130 | { |
| 126 | 131 | delete project; |
| ... | ... | @@ -183,7 +188,7 @@ bool DmpServerManager::loadServices() |
| 183 | 188 | } |
| 184 | 189 | bool DmpServerManager::initServices(const std::string& serverName, const std::string& serviceName, const std::string& title, int capabilities, const std::string& projectData) |
| 185 | 190 | { |
| 186 | - //project | |
| 191 | + // project | |
| 187 | 192 | std::string projData; |
| 188 | 193 | if (!DmpServerUtils::Base64Decode(projectData, &projData)) |
| 189 | 194 | { |
| ... | ... | @@ -196,12 +201,16 @@ bool DmpServerManager::initServices(const std::string& serverName, const std::st |
| 196 | 201 | return false; |
| 197 | 202 | } |
| 198 | 203 | |
| 204 | + project->initVectorLayerVacuate([](const std::string &tableguid) | |
| 205 | + { | |
| 206 | + return DmpHttp::get(DmpServerConfig::Instance()->getMetaUrl() + URL_VACUATE + tableguid); | |
| 207 | + }); | |
| 208 | + | |
| 199 | 209 | if (!serverRegistry_->getServer(serverName)->publish(serviceName, title, capabilities, *project)) |
| 200 | 210 | { |
| 201 | 211 | delete project; |
| 202 | 212 | return false; |
| 203 | 213 | } |
| 204 | - projects_[serviceName] = project; | |
| 214 | + projects_[serviceName] = project; | |
| 205 | 215 | return true; |
| 206 | - | |
| 207 | 216 | } |
| \ No newline at end of file | ... | ... |
| ... | ... | @@ -20,7 +20,8 @@ |
| 20 | 20 | #include "dmpserverregistry.h" |
| 21 | 21 | |
| 22 | 22 | |
| 23 | -#define URI_RELOAD ("/API/Service/Reload") //加载已注册服务接口 | |
| 23 | +#define URI_RELOAD ("/API/Service/Reload") //加载已注册服务接口 | |
| 24 | +#define URL_VACUATE ("/API/Manager/TableVacuateDetail?table_guids=") //加载矢量数据抽稀图层 | |
| 24 | 25 | class SERVER_EXPORT DmpServerManager |
| 25 | 26 | { |
| 26 | 27 | public: | ... | ... |
| ... | ... | @@ -454,9 +454,14 @@ namespace mapserver |
| 454 | 454 | |
| 455 | 455 | bool DmpPgsqlSourcePools::AddDatabasePool(string guid) |
| 456 | 456 | { |
| 457 | - if (guid.find(" ") != string::npos && guid.size() > 50) | |
| 457 | + if (guid.find(" ") != string::npos || guid.size() > 100) | |
| 458 | 458 | { |
| 459 | - std::string connStr = guid; | |
| 459 | + std::string connStr = guid; | |
| 460 | + if(connStr.find(" ") == string::npos) | |
| 461 | + { | |
| 462 | + connStr = DmpServerDes::DesBase64Decrypt(connStr, "Chinadci"); | |
| 463 | + } | |
| 464 | + | |
| 460 | 465 | shared_ptr<DmpPgsqlPool> newPool(new DmpPgsqlPool(guid,guid,guid)); |
| 461 | 466 | newPool->Connect(connStr.c_str()); |
| 462 | 467 | //newPool->Connect("PostgreSQLConn=hostaddr=172.26.99.173 port=5433 dbname='postgres' user='postgres' password='chinadci'"); | ... | ... |
| ... | ... | @@ -48,8 +48,8 @@ namespace DmpMapping |
| 48 | 48 | |
| 49 | 49 | std::string guid = pt.get<std::string>("guid"); |
| 50 | 50 | |
| 51 | - DmpProject* project = (DmpProject*)context.serverProject()->project(); | |
| 52 | - std::string projectData = project->WriteXml(); | |
| 51 | + DmpProject* projectold = (DmpProject*)context.serverProject()->project(); | |
| 52 | + std::string projectData = projectold->WriteXml(); | |
| 53 | 53 | // printf("%s\r\n",projectData.c_str()); |
| 54 | 54 | if(!guid.empty() && !projectData.empty()) |
| 55 | 55 | { |
| ... | ... | @@ -60,6 +60,9 @@ namespace DmpMapping |
| 60 | 60 | context.response()->writeJson("{\"status\":\"false\",\"message\":\"加载DMD符号化失败!\"}"); |
| 61 | 61 | return false; |
| 62 | 62 | } |
| 63 | + | |
| 64 | + project->initVectorLayerVacuate(projectold); | |
| 65 | + | |
| 63 | 66 | vectorMappingProjects[guid] = project; |
| 64 | 67 | |
| 65 | 68 | // int i = 0; |
| ... | ... | @@ -166,31 +169,36 @@ namespace DmpMapping |
| 166 | 169 | context.response()->writeJson("{\"status\":\"false\",\"message\":\"DMD文档错误\"}"); |
| 167 | 170 | return false; |
| 168 | 171 | } |
| 169 | - vectorMappingProjects[guid] = project; | |
| 170 | - | |
| 171 | - double minx, miny, maxx, maxy; | |
| 172 | - std::vector<DmpMapLayer *> vectorLayers = project->vectorLayers(); | |
| 173 | - for (size_t i = 0; i < vectorLayers.size(); i++) | |
| 174 | - { | |
| 175 | - DmpMapLayer *layer = vectorLayers[i]; | |
| 176 | - if (i == 0) | |
| 177 | - { | |
| 178 | - minx = layer->extent().xmin(); | |
| 179 | - miny = layer->extent().ymin(); | |
| 180 | - maxx = layer->extent().xmax(); | |
| 181 | - maxy = layer->extent().ymax(); | |
| 182 | - } | |
| 183 | - else | |
| 172 | + project->initVectorLayerVacuate([](const std::string &tableguid) | |
| 173 | + { | |
| 174 | + return DmpServerConfig::Instance()->HttpGet( DmpServerConfig::Instance()->getMetaUrl() + URL_VACUATE + tableguid); | |
| 175 | + }); | |
| 176 | + | |
| 177 | + vectorMappingProjects[guid] = project; | |
| 178 | + | |
| 179 | + double minx, miny, maxx, maxy; | |
| 180 | + std::vector<DmpMapLayer *> vectorLayers = project->vectorLayers(); | |
| 181 | + for (size_t i = 0; i < vectorLayers.size(); i++) | |
| 184 | 182 | { |
| 185 | - if (minx > layer->extent().xmin()) | |
| 183 | + DmpMapLayer *layer = vectorLayers[i]; | |
| 184 | + if (i == 0) | |
| 185 | + { | |
| 186 | 186 | minx = layer->extent().xmin(); |
| 187 | - if (miny > layer->extent().ymin()) | |
| 188 | 187 | miny = layer->extent().ymin(); |
| 189 | - if (maxx < layer->extent().xmax()) | |
| 190 | 188 | maxx = layer->extent().xmax(); |
| 191 | - if (maxy < layer->extent().ymax()) | |
| 192 | 189 | maxy = layer->extent().ymax(); |
| 193 | - } | |
| 190 | + } | |
| 191 | + else | |
| 192 | + { | |
| 193 | + if (minx > layer->extent().xmin()) | |
| 194 | + minx = layer->extent().xmin(); | |
| 195 | + if (miny > layer->extent().ymin()) | |
| 196 | + miny = layer->extent().ymin(); | |
| 197 | + if (maxx < layer->extent().xmax()) | |
| 198 | + maxx = layer->extent().xmax(); | |
| 199 | + if (maxy < layer->extent().ymax()) | |
| 200 | + maxy = layer->extent().ymax(); | |
| 201 | + } | |
| 194 | 202 | } |
| 195 | 203 | |
| 196 | 204 | char buff[250]; |
| ... | ... | @@ -271,6 +279,10 @@ namespace DmpMapping |
| 271 | 279 | context.response()->writeJson("{\"status\":\"false\",\"message\":\"DMD文档错误\"}"); |
| 272 | 280 | return false; |
| 273 | 281 | } |
| 282 | + project->initVectorLayerVacuate([](const std::string &tableguid) | |
| 283 | + { | |
| 284 | + return DmpServerConfig::Instance()->HttpGet(DmpServerConfig::Instance()->getMetaUrl() + URL_VACUATE + tableguid); | |
| 285 | + }); | |
| 274 | 286 | vectorMappingProjects[guid] = project; |
| 275 | 287 | context.response()->writeJson("{\"status\":\"true\",\"message\":\"创建编辑服务工作空间成功!\"}"); |
| 276 | 288 | return true; | ... | ... |
| ... | ... | @@ -19,7 +19,6 @@ |
| 19 | 19 | #include "../wms/dmpwmsgetmap.h" |
| 20 | 20 | #include "../wms/dmpwmsparameters.h" |
| 21 | 21 | #include "dmpmapping.h" |
| 22 | -#include "dmpmappingparameters.h" | |
| 23 | 22 | #include "dmpimageinfo.h" |
| 24 | 23 | |
| 25 | 24 | using namespace std; |
| ... | ... | @@ -71,19 +70,33 @@ namespace DmpMapping |
| 71 | 70 | getImage(context); |
| 72 | 71 | } |
| 73 | 72 | else if(boost::iequals(request, "getmaplog")){ |
| 74 | - const std::string mapGuid = params.MapGuid(); | |
| 73 | + getmaplog(context,params); | |
| 74 | + } | |
| 75 | + else if (boost::iequals(request, "getmap")) | |
| 76 | + { | |
| 77 | + getmap(context,params); | |
| 78 | + } | |
| 79 | + | |
| 80 | + } | |
| 81 | + | |
| 82 | + bool DmpMappingService::getmaplog(const DmpServerContext &context,const DmpMappingParameters& params) | |
| 83 | + { | |
| 84 | + const std::string mapGuid = params.MapGuid(); | |
| 75 | 85 | if (vectorMappingProjects_.find(mapGuid) != vectorMappingProjects_.end()) |
| 76 | 86 | { |
| 77 | 87 | shared_ptr<DmpProject> project = vectorMappingProjects_.find(mapGuid)->second; |
| 78 | 88 | const DmpWms::DmpWmsParameters wmsParams(context.request()->serverParameters()); |
| 79 | 89 | DmpWms::writeGetMapLog(context, wmsParams, project.get()); |
| 90 | + return true; | |
| 80 | 91 | } |
| 81 | 92 | else |
| 82 | 93 | { |
| 83 | 94 | context.response()->writeJson("{\"status\":\"false\",\"message\":\"未找到服务\"}"); |
| 95 | + return false; | |
| 84 | 96 | } |
| 85 | 97 | } |
| 86 | - else if (boost::iequals(request, "getmap")) | |
| 98 | + | |
| 99 | + bool DmpMappingService::getmap(const DmpServerContext &context,const DmpMappingParameters& params) | |
| 87 | 100 | { |
| 88 | 101 | const std::string mapGuid = params.MapGuid(); |
| 89 | 102 | if (vectorMappingProjects_.find(mapGuid) != vectorMappingProjects_.end()) |
| ... | ... | @@ -91,6 +104,7 @@ namespace DmpMapping |
| 91 | 104 | shared_ptr<DmpProject> project = vectorMappingProjects_.find(mapGuid)->second; |
| 92 | 105 | const DmpWms::DmpWmsParameters wmsParams(context.request()->serverParameters()); |
| 93 | 106 | DmpWms::writeGetMap(context, wmsParams, project.get()); |
| 107 | + return true; | |
| 94 | 108 | } |
| 95 | 109 | else |
| 96 | 110 | { |
| ... | ... | @@ -114,27 +128,31 @@ namespace DmpMapping |
| 114 | 128 | if (!DmpServerUtils::Base64Decode(mapRenderer, &projData)) |
| 115 | 129 | { |
| 116 | 130 | context.response()->writeJson("{\"status\":\"false\",\"message\":\""+ mapRenderer +" base64转码错误\"}"); |
| 117 | - return; | |
| 131 | + return false; | |
| 118 | 132 | } |
| 119 | 133 | shared_ptr<DmpProject> project(new DmpProject()); |
| 120 | 134 | if (!project->Read(projData)) |
| 121 | 135 | { |
| 122 | 136 | context.response()->writeJson("{\"status\":\"false\",\"message\":\"DMD文档错误\"}"); |
| 123 | - return; | |
| 137 | + return false; | |
| 124 | 138 | } |
| 139 | + project->initVectorLayerVacuate([](const std::string &tableguid) | |
| 140 | + { | |
| 141 | + return DmpServerConfig::Instance()->HttpGet( DmpServerConfig::Instance()->getMetaUrl() + URL_VACUATE + tableguid); | |
| 142 | + }); | |
| 125 | 143 | const DmpWms::DmpWmsParameters wmsParams(context.request()->serverParameters()); |
| 126 | 144 | DmpWms::writeGetMap(context, wmsParams, project.get()); |
| 127 | 145 | if(!mapGuid.empty()) |
| 128 | 146 | { |
| 129 | 147 | vectorMappingProjects_[mapGuid] = project; |
| 130 | 148 | } |
| 131 | - return; | |
| 149 | + return true; | |
| 132 | 150 | } |
| 133 | 151 | } |
| 134 | 152 | } |
| 153 | + | |
| 154 | + return false; | |
| 135 | 155 | } |
| 136 | - | |
| 137 | - } | |
| 138 | 156 | |
| 139 | 157 | |
| 140 | 158 | ... | ... |
| ... | ... | @@ -10,11 +10,13 @@ |
| 10 | 10 | #define __dmpmapping_h__ |
| 11 | 11 | #include <string> |
| 12 | 12 | #include <string> |
| 13 | -#include "dmpeditservice.h" | |
| 14 | -#include "dmpservice.h" | |
| 15 | 13 | #include <boost/thread/shared_mutex.hpp> |
| 16 | 14 | #include <boost/thread.hpp> |
| 17 | 15 | |
| 16 | +#include "dmpeditservice.h" | |
| 17 | +#include "dmpservice.h" | |
| 18 | +#include "dmpmappingparameters.h" | |
| 19 | + | |
| 18 | 20 | typedef boost::shared_mutex rwmutex; |
| 19 | 21 | typedef boost::shared_lock<rwmutex> readLock; |
| 20 | 22 | typedef boost::unique_lock<rwmutex> writeLock; |
| ... | ... | @@ -31,6 +33,9 @@ namespace DmpMapping |
| 31 | 33 | bool allowMethod(DmpServerRequest::Method method) const override { return method == DmpServerRequest::GET_METHOD; } |
| 32 | 34 | void executeRequest(const DmpServerContext &context) override; |
| 33 | 35 | private: |
| 36 | + bool getmaplog(const DmpServerContext &context,const DmpMappingParameters& params); | |
| 37 | + bool getmap(const DmpServerContext &context, const DmpMappingParameters& params); | |
| 38 | + private: | |
| 34 | 39 | |
| 35 | 40 | //存储工程文档实例 |
| 36 | 41 | ProjectMap vectorMappingProjects_; | ... | ... |
| ... | ... | @@ -7,4 +7,722 @@ |
| 7 | 7 | * copyright: 广州城市信息研究所有限公司 |
| 8 | 8 | ***************************************************************************/ |
| 9 | 9 | #include "dmpprint.h" |
| 10 | +#include <unistd.h> | |
| 11 | +#include <algorithm> | |
| 12 | +#include <cairo/cairo-svg.h> | |
| 10 | 13 | |
| 14 | +namespace DmpWms | |
| 15 | +{ | |
| 16 | + static cairo_status_t cairo_write_func_print(void *pbuff, const unsigned char *data, unsigned int length) | |
| 17 | + { | |
| 18 | + //vector<unsigned char>& vecData = *((vector<unsigned char>*)closure); | |
| 19 | + string *pResponseData = (string *)pbuff; | |
| 20 | + pResponseData->append((char *)data,length); | |
| 21 | + return CAIRO_STATUS_SUCCESS; | |
| 22 | + } | |
| 23 | + | |
| 24 | + DmpPrint::DmpPrint() | |
| 25 | + { | |
| 26 | + } | |
| 27 | +/* | |
| 28 | + bool DmpPrint::getPrint(std::string &responseData, DmpProject *project,const char* xml,string servername) | |
| 29 | + { | |
| 30 | + string result_msg; | |
| 31 | + | |
| 32 | + xml_document<> doc; // character type defaults to char | |
| 33 | + try | |
| 34 | + { | |
| 35 | + doc.parse<0>((char *)xml); | |
| 36 | + } | |
| 37 | + catch (...) | |
| 38 | + { | |
| 39 | + result_msg = "error:Post参数是XML格式"; | |
| 40 | + } | |
| 41 | + | |
| 42 | + xml_node<char> *node = doc.first_node(); | |
| 43 | + if(!node) | |
| 44 | + { | |
| 45 | + return false; | |
| 46 | + } | |
| 47 | + | |
| 48 | + m_height = 1122; | |
| 49 | + m_width = 793; | |
| 50 | + | |
| 51 | + xml_node<char> *template_node = node->first_node("template"); | |
| 52 | + if(template_node != nullptr) | |
| 53 | + { | |
| 54 | + InitTemplateValue(template_node->value()); | |
| 55 | + } | |
| 56 | + | |
| 57 | + | |
| 58 | + xml_node<char> *extent_node = node->first_node("extent"); | |
| 59 | + | |
| 60 | + if(extent_node) | |
| 61 | + {// xmin="" ymin="" xmax="" ymax="" | |
| 62 | + xml_attribute<char> *attr_xmin = node->first_attribute("xmin"); | |
| 63 | + xml_attribute<char> *attr_ymin = node->first_attribute("ymin"); | |
| 64 | + xml_attribute<char> *attr_xmax = node->first_attribute("xmax"); | |
| 65 | + xml_attribute<char> *attr_ymax = node->first_attribute("ymax"); | |
| 66 | + | |
| 67 | + if(attr_xmin == nullptr || attr_ymin == nullptr || | |
| 68 | + attr_xmax == nullptr || attr_ymax == nullptr) | |
| 69 | + { | |
| 70 | + return 0; | |
| 71 | + } | |
| 72 | + | |
| 73 | + xmin = atof( attr_xmax->value()); | |
| 74 | + ymin = atof( attr_ymin->value()); | |
| 75 | + xmax = atof( attr_xmax->value()); | |
| 76 | + ymax = atof( attr_ymax->value()); | |
| 77 | + } | |
| 78 | + | |
| 79 | + shared_ptr<MapParameter> pMapParameter(new MapParameter()); | |
| 80 | + | |
| 81 | + | |
| 82 | + shared_ptr<OperationalDmapLayer> dmapLayer(new OperationalDmapLayer()); | |
| 83 | + dmapLayer->serviceName = servername; | |
| 84 | + | |
| 85 | + map<string, shared_ptr<WMSServer>>::iterator iter = mapWmsServer.find(dmapLayer->serviceName); | |
| 86 | + if(iter !=mapWmsServer.end()) | |
| 87 | + { | |
| 88 | + dmapLayer->m_wmsServer = iter->second; | |
| 89 | + Rect *rect = dmapLayer->m_wmsServer->GetExtent(); | |
| 90 | + pMapParameter->InitParameter(xmin,xmax,ymax,ymin,m_width -100,m_height -120); | |
| 91 | + //double scaleDenominator = this->RecalculateScale(rect->m_dRight,rect->m_dLeft,rect->m_dTop,rect->m_dBottom,1022,693); | |
| 92 | + } | |
| 93 | + else | |
| 94 | + { | |
| 95 | + return false; | |
| 96 | + } | |
| 97 | + | |
| 98 | + | |
| 99 | + //dmapLayer->serviceName = "土地利用现状"; | |
| 100 | + //dmapLayer->m_id = "土地利用现状"; | |
| 101 | + //dmapLayer->boxX1 = 683497; | |
| 102 | + //dmapLayer->boxX2 = 695357; | |
| 103 | + //dmapLayer->boxY1 = 2534922; | |
| 104 | + //dmapLayer->boxY2 = 2543053; | |
| 105 | + | |
| 106 | + Rect* rect = dmapLayer->m_wmsServer->GetExtent(); | |
| 107 | + | |
| 108 | + dmapLayer->boxX1 = xmin; | |
| 109 | + dmapLayer->boxX2 = xmax; | |
| 110 | + dmapLayer->boxY1 = ymin; | |
| 111 | + dmapLayer->boxY2 = ymax; | |
| 112 | + | |
| 113 | + shared_ptr<DmapPrintLayout> dmapLayout(new DmapPrintLayout()); | |
| 114 | + this->vector_dmapPrintLayout.push_back(dmapLayout); | |
| 115 | + | |
| 116 | + | |
| 117 | + dmapLayout->data.push_back(dmapLayer); | |
| 118 | + dmapLayout->localtion_x = 50; | |
| 119 | + dmapLayout->localtion_y = 70; | |
| 120 | + | |
| 121 | + dmapLayout->height = m_height -70; | |
| 122 | + dmapLayout->width = m_width -50; | |
| 123 | + | |
| 124 | + this->m_height = m_height; | |
| 125 | + this->m_width = m_width; | |
| 126 | + | |
| 127 | + | |
| 128 | + shared_ptr<OperationalGeom> geomLayer_scale(new OperationalGeom()); | |
| 129 | + geomLayer_scale->pMapParameter = pMapParameter; | |
| 130 | + geomLayer_scale->type = "scale"; | |
| 131 | + shared_ptr<DmapPrintLayout> dmapLayout_scale(new DmapPrintLayout()); | |
| 132 | + this->vector_dmapPrintLayout.push_back(dmapLayout_scale); | |
| 133 | + geomLayer_scale->localtion_x = 150; | |
| 134 | + geomLayer_scale->localtion_y = m_height - 50; | |
| 135 | + dmapLayout_scale->data.push_back(geomLayer_scale); | |
| 136 | + | |
| 137 | + | |
| 138 | + shared_ptr<OperationalGeom> geomLayer_compass(new OperationalGeom()); | |
| 139 | + geomLayer_compass->pMapParameter = pMapParameter; | |
| 140 | + geomLayer_compass->type = "compass"; | |
| 141 | + shared_ptr<DmapPrintLayout> dmapLayout_compass(new DmapPrintLayout()); | |
| 142 | + this->vector_dmapPrintLayout.push_back(dmapLayout_compass); | |
| 143 | + geomLayer_compass->localtion_x = 80; | |
| 144 | + geomLayer_compass->localtion_y = m_height - 80; | |
| 145 | + dmapLayout_compass->data.push_back(geomLayer_compass); | |
| 146 | + | |
| 147 | + | |
| 148 | + ToPrint(ab); | |
| 149 | + return true; | |
| 150 | + } | |
| 151 | + | |
| 152 | + bool DmpPrint::getPrint( std::string &responseData, DmpProject* project, | |
| 153 | + string servername,const char* printTemp,const char *bbox) | |
| 154 | + { | |
| 155 | + string result_msg; | |
| 156 | + | |
| 157 | + if(printTemp == nullptr || bbox == nullptr) | |
| 158 | + return false; | |
| 159 | + | |
| 160 | + m_height = 1122; | |
| 161 | + m_width = 793; | |
| 162 | + | |
| 163 | + | |
| 164 | + double boxX1, boxY1, boxX2, boxY2; | |
| 165 | + sscanf(bbox, "%lf,%lf,%lf,%lf", &boxY1, &boxX1, &boxY2, &boxX2); // &x1,&y1,&x2,&y2); | |
| 166 | + | |
| 167 | + | |
| 168 | + InitTemplateValue(printTemp); | |
| 169 | + | |
| 170 | + | |
| 171 | + shared_ptr<MapParameter> pMapParameter(new MapParameter()); | |
| 172 | + | |
| 173 | + | |
| 174 | + shared_ptr<OperationalDmapLayer> dmapLayer(new OperationalDmapLayer()); | |
| 175 | + dmapLayer->serviceName = servername; | |
| 176 | + | |
| 177 | + map<string, shared_ptr<WMSServer>>::iterator iter = mapWmsServer.find(dmapLayer->serviceName); | |
| 178 | + if(iter !=mapWmsServer.end()) | |
| 179 | + { | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + if (rect_service) | |
| 185 | + { | |
| 186 | + if (rect_service->m_dBottom > 0 && rect_service->m_dRight > 0 && rect_service->m_dLeft > 0 && rect_service->m_dTop > 0) | |
| 187 | + { | |
| 188 | + if (min(boxX1, boxX2) > rect_service->m_dRight || max(boxX1, boxX2) < rect_service->m_dLeft || | |
| 189 | + min(boxY1, boxY2) > rect_service->m_dTop || max(boxY1, boxY2) < rect_service->m_dBottom) | |
| 190 | + { | |
| 191 | + if (!(min(boxY1, boxY2) > rect_service->m_dRight || max(boxY1, boxY2) < rect_service->m_dLeft || | |
| 192 | + min(boxX1, boxX2) > rect_service->m_dTop || max(boxX1, boxX2) < rect_service->m_dBottom)) | |
| 193 | + { | |
| 194 | + double x1 = boxX1; | |
| 195 | + boxX1 = boxY1; | |
| 196 | + boxY1 = x1; | |
| 197 | + double x2 = boxX2; | |
| 198 | + boxX2 = boxY2; | |
| 199 | + boxY2 = x2; | |
| 200 | + } | |
| 201 | + } | |
| 202 | + } | |
| 203 | + } | |
| 204 | + xmin = min(boxX1, boxX2); | |
| 205 | + ymin = min(boxY1, boxY2); | |
| 206 | + xmax = max(boxX1, boxX2); | |
| 207 | + ymax = max(boxY1, boxY2); | |
| 208 | + pMapParameter->InitParameter(xmin,xmax,ymax,ymin,m_width -100,m_height -120); | |
| 209 | + //double scaleDenominator = this->RecalculateScale(rect->m_dRight,rect->m_dLeft,rect->m_dTop,rect->m_dBottom,1022,693); | |
| 210 | + } | |
| 211 | + else | |
| 212 | + { | |
| 213 | + return false; | |
| 214 | + } | |
| 215 | + | |
| 216 | + | |
| 217 | + //dmapLayer->serviceName = "土地利用现状"; | |
| 218 | + //dmapLayer->m_id = "土地利用现状"; | |
| 219 | + //dmapLayer->boxX1 = 683497; | |
| 220 | + //dmapLayer->boxX2 = 695357; | |
| 221 | + //dmapLayer->boxY1 = 2534922; | |
| 222 | + //dmapLayer->boxY2 = 2543053; | |
| 223 | + | |
| 224 | + Rect* rect = dmapLayer->m_wmsServer->GetExtent(); | |
| 225 | + | |
| 226 | + dmapLayer->boxX1 = xmin; | |
| 227 | + dmapLayer->boxX2 = xmax; | |
| 228 | + dmapLayer->boxY1 = ymin; | |
| 229 | + dmapLayer->boxY2 = ymax; | |
| 230 | + | |
| 231 | + shared_ptr<DmapPrintLayout> dmapLayout(new DmapPrintLayout()); | |
| 232 | + this->vector_dmapPrintLayout.push_back(dmapLayout); | |
| 233 | + | |
| 234 | + | |
| 235 | + dmapLayout->data.push_back(dmapLayer); | |
| 236 | + dmapLayout->localtion_x = 50; | |
| 237 | + dmapLayout->localtion_y = 70; | |
| 238 | + | |
| 239 | + dmapLayout->height = m_height -120; | |
| 240 | + dmapLayout->width = m_width -100; | |
| 241 | + | |
| 242 | + this->m_height = m_height; | |
| 243 | + this->m_width = m_width; | |
| 244 | + | |
| 245 | + | |
| 246 | + shared_ptr<OperationalGeom> geomLayer_scale(new OperationalGeom()); | |
| 247 | + geomLayer_scale->pMapParameter = pMapParameter; | |
| 248 | + geomLayer_scale->type = "scale"; | |
| 249 | + shared_ptr<DmapPrintLayout> dmapLayout_scale(new DmapPrintLayout()); | |
| 250 | + this->vector_dmapPrintLayout.push_back(dmapLayout_scale); | |
| 251 | + geomLayer_scale->localtion_x = 150; | |
| 252 | + geomLayer_scale->localtion_y = m_height - 110; | |
| 253 | + dmapLayout_scale->data.push_back(geomLayer_scale); | |
| 254 | + | |
| 255 | + | |
| 256 | + shared_ptr<OperationalGeom> geomLayer_compass(new OperationalGeom()); | |
| 257 | + geomLayer_compass->pMapParameter = pMapParameter; | |
| 258 | + geomLayer_compass->type = "compass"; | |
| 259 | + shared_ptr<DmapPrintLayout> dmapLayout_compass(new DmapPrintLayout()); | |
| 260 | + this->vector_dmapPrintLayout.push_back(dmapLayout_compass); | |
| 261 | + geomLayer_compass->localtion_x = 80; | |
| 262 | + geomLayer_compass->localtion_y = m_height - 140; | |
| 263 | + dmapLayout_compass->data.push_back(geomLayer_compass); | |
| 264 | + | |
| 265 | + | |
| 266 | + ToPrint(ab); | |
| 267 | + return true; | |
| 268 | + | |
| 269 | + } | |
| 270 | + | |
| 271 | + | |
| 272 | + bool DmpPrint::getPrintTempFile(string &responseData,,const char* tempName, const char* bbox) | |
| 273 | + { | |
| 274 | + string path = "./template/";path += tempName; path += ".xml"; | |
| 275 | + | |
| 276 | + | |
| 277 | + ifstream fin(path.c_str(), ios::binary); | |
| 278 | + | |
| 279 | + if (!fin) | |
| 280 | + { | |
| 281 | + string result_msg = "<Error>打印模板未找到</Error>"; | |
| 282 | + ab->AppendString(result_msg.c_str()); | |
| 283 | + return false; | |
| 284 | + } | |
| 285 | + | |
| 286 | + stringstream buffer; | |
| 287 | + buffer << fin.rdbuf(); | |
| 288 | + string content(buffer.str()); | |
| 289 | + fin.close(); | |
| 290 | + return getPrintLayout(ab, pWmsServer,content.c_str(), bbox); | |
| 291 | + //return true; | |
| 292 | + } | |
| 293 | + | |
| 294 | + | |
| 295 | + bool DmpPrint::getPrintLayout(AppendBuffer *ab,shared_ptr<WMSServer> pWmsServer, | |
| 296 | + const char* xml,const char *bbox) | |
| 297 | + { | |
| 298 | + string result_msg; | |
| 299 | + if(xml == nullptr || bbox == nullptr) | |
| 300 | + return false; | |
| 301 | + | |
| 302 | + m_height = 1122; | |
| 303 | + m_width = 793; | |
| 304 | + | |
| 305 | + xml_document<> doc; // character type defaults to char | |
| 306 | + try | |
| 307 | + { | |
| 308 | + doc.parse<0>((char *)xml); | |
| 309 | + xml_node<char> *node = doc.first_node(); | |
| 310 | + if (!node) | |
| 311 | + { | |
| 312 | + result_msg = "<Error>打印模板无法解析</Error>"; | |
| 313 | + ab->AppendString(result_msg.c_str()); | |
| 314 | + return false; | |
| 315 | + } | |
| 316 | + | |
| 317 | + m_height = 1122; | |
| 318 | + m_width = 793; | |
| 319 | + | |
| 320 | + xml_node<char> *template_node = node->first_node("template"); | |
| 321 | + if (template_node != nullptr) | |
| 322 | + { | |
| 323 | + InitTemplateValue(template_node->value()); | |
| 324 | + } | |
| 325 | + | |
| 326 | + double boxX1, boxY1, boxX2, boxY2; | |
| 327 | + sscanf(bbox, "%lf,%lf,%lf,%lf", &boxX1, &boxY1, &boxX2, &boxY2); // &x1,&y1,&x2,&y2); | |
| 328 | + shared_ptr<MapParameter> pMapParameter(new MapParameter()); | |
| 329 | + //Rect *rect_service = pWmsServer->GetExtent(); | |
| 330 | + //if (rect_service) | |
| 331 | + //{ | |
| 332 | + // rect_service->GetExtent(boxX1, boxX2, boxY1, boxY2); | |
| 333 | + //} | |
| 334 | + | |
| 335 | + xmin = min(boxX1, boxX2); | |
| 336 | + ymin = min(boxY1, boxY2); | |
| 337 | + xmax = max(boxX1, boxX2); | |
| 338 | + ymax = max(boxY1, boxY2); | |
| 339 | + pMapParameter->pWmsService = pWmsServer; | |
| 340 | + pMapParameter->InitParameter(xmin,xmax,ymax,ymin,m_width -100,m_height -120); | |
| 341 | + | |
| 342 | + shared_ptr<DmapPrintLayout> printLayout(new DmapPrintLayout()); | |
| 343 | + | |
| 344 | + if(printLayout->ReadXML(node,pMapParameter,result_msg)) | |
| 345 | + { | |
| 346 | + this->vector_dmapPrintLayout.push_back(printLayout); | |
| 347 | + ToPrint(ab); | |
| 348 | + return true; | |
| 349 | + } | |
| 350 | + } | |
| 351 | + catch (...) | |
| 352 | + { | |
| 353 | + result_msg = "<Error>error:Post参数是XML格式</Error>"; | |
| 354 | + } | |
| 355 | + | |
| 356 | + ab->AppendString(result_msg.c_str()); | |
| 357 | + return false; | |
| 358 | + | |
| 359 | + } | |
| 360 | + | |
| 361 | + bool DmpPrint::ToPrint(AppendBuffer *ab) | |
| 362 | + { | |
| 363 | + if(isPicture == PrintOutputFormat::SVG) | |
| 364 | + { | |
| 365 | + //string path = this->GetFilePath("mapPrint.pdf"); | |
| 366 | + cairo_surface_t *surface = cairo_svg_surface_create_for_stream(cairo_write_func_print,ab, | |
| 367 | + (int)m_width, | |
| 368 | + (int)m_height); | |
| 369 | + | |
| 370 | + //cairo_surface_set_fallback_resolution(surface,900,900); | |
| 371 | + clsCrSurf mClsSurfDC(surface,(int)m_width,(int)m_height,false); | |
| 372 | + cairo_set_antialias(mClsSurfDC.m_pCr,cairo_antialias_t::CAIRO_ANTIALIAS_BEST); | |
| 373 | + DoSetBackGround(&mClsSurfDC, 0xffffffff); | |
| 374 | + | |
| 375 | + for (size_t i = 0; i < vector_dmapPrintLayout.size(); i++) | |
| 376 | + { | |
| 377 | + shared_ptr<DmapPrintLayout> layout = vector_dmapPrintLayout.at(i); | |
| 378 | + layout->DrawData(&mClsSurfDC,PrintOutputFormat::SVG); | |
| 379 | + } | |
| 380 | + } | |
| 381 | + else if(isPicture == PrintOutputFormat::PDF) | |
| 382 | + { | |
| 383 | + //string path = this->GetFilePath("mapPrint.pdf"); | |
| 384 | + cairo_surface_t *surface = cairo_pdf_surface_create_for_stream(cairo_write_func_print,ab, | |
| 385 | + (int)m_width, | |
| 386 | + (int)m_height); | |
| 387 | + | |
| 388 | + //cairo_surface_set_fallback_resolution(surface,900,900); | |
| 389 | + clsCrSurf mClsSurfDC(surface,(int)m_width,(int)m_height,false); | |
| 390 | + cairo_set_antialias(mClsSurfDC.m_pCr,cairo_antialias_t::CAIRO_ANTIALIAS_BEST); | |
| 391 | + DoSetBackGround(&mClsSurfDC, 0xffffffff); | |
| 392 | + | |
| 393 | + for (size_t i = 0; i < vector_dmapPrintLayout.size(); i++) | |
| 394 | + { | |
| 395 | + shared_ptr<DmapPrintLayout> layout = vector_dmapPrintLayout.at(i); | |
| 396 | + layout->DrawData(&mClsSurfDC,PrintOutputFormat::PDF); | |
| 397 | + } | |
| 398 | + } | |
| 399 | + else | |
| 400 | + { | |
| 401 | + cairo_surface_t *surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, | |
| 402 | + (int)m_width, | |
| 403 | + (int)m_height); | |
| 404 | + | |
| 405 | + | |
| 406 | + | |
| 407 | + //cairo_surface_set_fallback_resolution(surface); | |
| 408 | + //double dpix, dpiy; | |
| 409 | + //cairo_surface_get_fallback_resolution(surface,&dpix, &dpiy); | |
| 410 | + //printf("%f,%f",dpix,dpiy); | |
| 411 | + | |
| 412 | + clsCrSurf mClsSurfDC(surface); | |
| 413 | + DoSetBackGround(&mClsSurfDC, 0xffffffff); | |
| 414 | + | |
| 415 | + | |
| 416 | + for (size_t i = 0; i < vector_dmapPrintLayout.size(); i++) | |
| 417 | + { | |
| 418 | + shared_ptr<DmapPrintLayout> layout = vector_dmapPrintLayout.at(i); | |
| 419 | + layout->DrawData(&mClsSurfDC,PrintOutputFormat::PNG); | |
| 420 | + } | |
| 421 | + | |
| 422 | + cairo_surface_write_to_png_stream(surface, cairo_write_func_print, ab); | |
| 423 | + } | |
| 424 | + return true; | |
| 425 | + } | |
| 426 | + | |
| 427 | + | |
| 428 | + bool DmpPrint::InitTemplateValue(string templateValue) | |
| 429 | + { | |
| 430 | + | |
| 431 | + if (templateValue == "A4竖" || templateValue == "A4-hoch") | |
| 432 | + { | |
| 433 | + m_height = 1122; | |
| 434 | + m_width = 793; | |
| 435 | + } | |
| 436 | + else if (templateValue == "A4横" || templateValue == "A4-quer") | |
| 437 | + { | |
| 438 | + m_height = 793; | |
| 439 | + m_width = 1122; | |
| 440 | + } | |
| 441 | + else if (templateValue == "A3竖" || templateValue == "A3-hoch") | |
| 442 | + { | |
| 443 | + m_height = 1122 * 2; | |
| 444 | + m_width = 793 * 2; | |
| 445 | + } | |
| 446 | + else if (templateValue == "A3横" || templateValue == "A3-quer") | |
| 447 | + { | |
| 448 | + m_height = 793 * 2; | |
| 449 | + m_width = 1122 * 2; | |
| 450 | + } | |
| 451 | + else if (templateValue == "A5竖" || templateValue == "A5-hoch") | |
| 452 | + { | |
| 453 | + m_height = 1122 / 2; | |
| 454 | + m_width = 793 / 2; | |
| 455 | + } | |
| 456 | + else if (templateValue == "A5横" || templateValue == "A5-quer") | |
| 457 | + { | |
| 458 | + m_height = 793 / 2; | |
| 459 | + m_width = 1122 / 2; | |
| 460 | + } | |
| 461 | + return true; | |
| 462 | + } | |
| 463 | + | |
| 464 | + | |
| 465 | + bool DmpPrint::Test(AppendBuffer *ab,map<string, shared_ptr<WMSServer>> &mapWmsServer,string servername) | |
| 466 | + { | |
| 467 | + //double scaleDenominator = 0; | |
| 468 | + | |
| 469 | + shared_ptr<MapParameter> pMapParameter(new MapParameter()); | |
| 470 | + | |
| 471 | + | |
| 472 | + shared_ptr<OperationalDmapLayer> dmapLayer(new OperationalDmapLayer()); | |
| 473 | + dmapLayer->serviceName = servername; | |
| 474 | + | |
| 475 | + map<string, shared_ptr<WMSServer>>::iterator iter = mapWmsServer.find(dmapLayer->serviceName); | |
| 476 | + if(iter !=mapWmsServer.end()) | |
| 477 | + { | |
| 478 | + dmapLayer->m_wmsServer = iter->second; | |
| 479 | + Rect *rect = dmapLayer->m_wmsServer->GetExtent(); | |
| 480 | + pMapParameter->InitParameter(rect->m_dLeft,rect->m_dRight,rect->m_dTop,rect->m_dBottom,693,1022); | |
| 481 | + double scaleDenominator = this->RecalculateScale(rect->m_dRight,rect->m_dLeft,rect->m_dTop,rect->m_dBottom,1022,693); | |
| 482 | + } | |
| 483 | + else | |
| 484 | + { | |
| 485 | + return false; | |
| 486 | + } | |
| 487 | + | |
| 488 | + | |
| 489 | + //dmapLayer->serviceName = "土地利用现状"; | |
| 490 | + //dmapLayer->m_id = "土地利用现状"; | |
| 491 | + //dmapLayer->boxX1 = 683497; | |
| 492 | + //dmapLayer->boxX2 = 695357; | |
| 493 | + //dmapLayer->boxY1 = 2534922; | |
| 494 | + //dmapLayer->boxY2 = 2543053; | |
| 495 | + | |
| 496 | + Rect* rect = dmapLayer->m_wmsServer->GetExtent(); | |
| 497 | + | |
| 498 | + dmapLayer->boxX1 = rect->m_dLeft; | |
| 499 | + dmapLayer->boxX2 = rect->m_dRight; | |
| 500 | + dmapLayer->boxY1 = rect->m_dBottom; | |
| 501 | + dmapLayer->boxY2 = rect->m_dTop; | |
| 502 | + | |
| 503 | + shared_ptr<DmapPrintLayout> dmapLayout(new DmapPrintLayout()); | |
| 504 | + this->vector_dmapPrintLayout.push_back(dmapLayout); | |
| 505 | + | |
| 506 | + | |
| 507 | + dmapLayout->data.push_back(dmapLayer); | |
| 508 | + dmapLayout->localtion_x = 50; | |
| 509 | + dmapLayout->localtion_y = 70; | |
| 510 | + | |
| 511 | + dmapLayout->height = 1022; | |
| 512 | + dmapLayout->width = 693; | |
| 513 | + | |
| 514 | + this->m_height = 1122; | |
| 515 | + this->m_width = 793; | |
| 516 | + | |
| 517 | + | |
| 518 | + shared_ptr<OperationalGeom> geomLayer_scale(new OperationalGeom()); | |
| 519 | + geomLayer_scale->pMapParameter = pMapParameter; | |
| 520 | + geomLayer_scale->type = "scale"; | |
| 521 | + shared_ptr<DmapPrintLayout> dmapLayout_scale(new DmapPrintLayout()); | |
| 522 | + this->vector_dmapPrintLayout.push_back(dmapLayout_scale); | |
| 523 | + dmapLayout_scale->localtion_x = 150; | |
| 524 | + dmapLayout_scale->localtion_y = 1022+20; | |
| 525 | + dmapLayout_scale->data.push_back(geomLayer_scale); | |
| 526 | + | |
| 527 | + | |
| 528 | + shared_ptr<OperationalGeom> geomLayer_compass(new OperationalGeom()); | |
| 529 | + geomLayer_compass->pMapParameter = pMapParameter; | |
| 530 | + geomLayer_compass->type = "compass"; | |
| 531 | + shared_ptr<DmapPrintLayout> dmapLayout_compass(new DmapPrintLayout()); | |
| 532 | + this->vector_dmapPrintLayout.push_back(dmapLayout_compass); | |
| 533 | + dmapLayout_compass->localtion_x = 80; | |
| 534 | + dmapLayout_compass->localtion_y = 1022-10; | |
| 535 | + dmapLayout_compass->data.push_back(geomLayer_compass); | |
| 536 | + | |
| 537 | + | |
| 538 | + if(isPicture == DmpWmsParameters::Format::SVG) | |
| 539 | + { | |
| 540 | + //string path = this->GetFilePath("mapPrint.pdf"); | |
| 541 | + cairo_surface_t *surface = cairo_svg_surface_create_for_stream(cairo_write_func_print,ab, | |
| 542 | + (int)m_width, | |
| 543 | + (int)m_height); | |
| 544 | + | |
| 545 | + //cairo_surface_set_fallback_resolution(surface,900,900); | |
| 546 | + clsCrSurf mClsSurfDC(surface,(int)m_width,(int)m_height,false); | |
| 547 | + cairo_set_antialias(mClsSurfDC.m_pCr,cairo_antialias_t::CAIRO_ANTIALIAS_BEST); | |
| 548 | + DoSetBackGround(&mClsSurfDC, 0xffffffff); | |
| 549 | + | |
| 550 | + for (size_t i = 0; i < vector_dmapPrintLayout.size(); i++) | |
| 551 | + { | |
| 552 | + shared_ptr<DmapPrintLayout> layout = vector_dmapPrintLayout.at(i); | |
| 553 | + layout->DrawData(&mClsSurfDC,DmpWmsParameters::Format::SVG); | |
| 554 | + } | |
| 555 | + } | |
| 556 | + else if(isPicture == DmpWmsParameters::Format::PDF) | |
| 557 | + { | |
| 558 | + //string path = this->GetFilePath("mapPrint.pdf"); | |
| 559 | + cairo_surface_t *surface = cairo_pdf_surface_create_for_stream(cairo_write_func_print,ab, | |
| 560 | + (int)m_width, | |
| 561 | + (int)m_height); | |
| 562 | + | |
| 563 | + //cairo_surface_set_fallback_resolution(surface,900,900); | |
| 564 | + clsCrSurf mClsSurfDC(surface,(int)m_width,(int)m_height,false); | |
| 565 | + cairo_set_antialias(mClsSurfDC.m_pCr,cairo_antialias_t::CAIRO_ANTIALIAS_BEST); | |
| 566 | + DoSetBackGround(&mClsSurfDC, 0xffffffff); | |
| 567 | + | |
| 568 | + for (size_t i = 0; i < vector_dmapPrintLayout.size(); i++) | |
| 569 | + { | |
| 570 | + shared_ptr<DmapPrintLayout> layout = vector_dmapPrintLayout.at(i); | |
| 571 | + layout->DrawData(&mClsSurfDC,DmpWmsParameters::Format::PDF); | |
| 572 | + } | |
| 573 | + } | |
| 574 | + else | |
| 575 | + { | |
| 576 | + cairo_surface_t *surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, | |
| 577 | + (int)m_width, | |
| 578 | + (int)m_height); | |
| 579 | + | |
| 580 | + | |
| 581 | + | |
| 582 | + //cairo_surface_set_fallback_resolution(surface); | |
| 583 | + //double dpix, dpiy; | |
| 584 | + //cairo_surface_get_fallback_resolution(surface,&dpix, &dpiy); | |
| 585 | + //printf("%f,%f",dpix,dpiy); | |
| 586 | + | |
| 587 | + clsCrSurf mClsSurfDC(surface); | |
| 588 | + DoSetBackGround(&mClsSurfDC, 0xffffffff); | |
| 589 | + | |
| 590 | + | |
| 591 | + for (size_t i = 0; i < vector_dmapPrintLayout.size(); i++) | |
| 592 | + { | |
| 593 | + shared_ptr<DmapPrintLayout> layout = vector_dmapPrintLayout.at(i); | |
| 594 | + layout->DrawData(&mClsSurfDC, DmpWmsParameters::Format::PNG); | |
| 595 | + } | |
| 596 | + | |
| 597 | + cairo_surface_write_to_png_stream(surface, cairo_write_func_print, ab); | |
| 598 | + } | |
| 599 | + | |
| 600 | + | |
| 601 | + } | |
| 602 | + | |
| 603 | + | |
| 604 | +double DmpPrint::RecalculateScale(double right, double left, double top, double bottom, double width, double height ) | |
| 605 | +{ | |
| 606 | + double w = right - left; | |
| 607 | + double h = top - bottom; | |
| 608 | + double oneInchInLayoutUnits = 0.0254; | |
| 609 | + double resolution = 96; | |
| 610 | + if ((w > std::pow(10, 12)) || (w < std::pow(10, -12))) | |
| 611 | + return false; | |
| 612 | + if ((h > std::pow(10, 12)) || (h < std::pow(10, -12))) | |
| 613 | + return false; | |
| 614 | + | |
| 615 | + long double R1 = width / w; | |
| 616 | + long double R2 = height / h; | |
| 617 | + double r = R1 < R2 ? R1 : R2; | |
| 618 | + if ((r > std::pow(10, 12)) || (r < std::pow(10, -12))) | |
| 619 | + return false; | |
| 620 | + | |
| 621 | + //m_dR = R1 < R2 ? R1 : R2; | |
| 622 | + double m_dR = r; | |
| 623 | + double m_dXdis = width / 2.0 - m_dR * (right + left) / 2.0; | |
| 624 | + double m_dYdis = height / 2.0 + m_dR * (top + bottom) / 2.0; | |
| 625 | + | |
| 626 | + | |
| 627 | + | |
| 628 | + | |
| 629 | + bool isWGS84 = left <=180 && right <180 && | |
| 630 | + left >= -180 && right >=-180 && | |
| 631 | + top < 90 && bottom <90; | |
| 632 | + | |
| 633 | + double scaleDenominator = 0; | |
| 634 | + if(isWGS84) | |
| 635 | + { | |
| 636 | + scaleDenominator = (resolution / oneInchInLayoutUnits)*(1/r)*111000; | |
| 637 | + //m_dR = r *(96 / 0.0254) *111000 ;//111000 为赤道1经度等于 111000米 | |
| 638 | + } | |
| 639 | + else | |
| 640 | + { | |
| 641 | + scaleDenominator= (resolution / oneInchInLayoutUnits) * 1/r; | |
| 642 | + } | |
| 643 | + | |
| 644 | + return scaleDenominator; | |
| 645 | +} | |
| 646 | + | |
| 647 | + string DmpPrint::GetFilePath(string path) | |
| 648 | + { | |
| 649 | + char sz[200] = {0}; | |
| 650 | + if(GetCurrentFolderPath(sz, sizeof(sz)) > 0) | |
| 651 | + { | |
| 652 | + std::string s; | |
| 653 | + s = sz; | |
| 654 | + size_t t = s.rfind('/'); | |
| 655 | + sz[t] = 0; | |
| 656 | + if(path[0]=='/') | |
| 657 | + { | |
| 658 | + return path; | |
| 659 | + } | |
| 660 | + int i=0; | |
| 661 | + if(path[0]=='.') | |
| 662 | + { | |
| 663 | + if(path[1]=='.') | |
| 664 | + { | |
| 665 | + i++; | |
| 666 | + s= sz; | |
| 667 | + t = s.rfind('/'); | |
| 668 | + sz[t] = 0; | |
| 669 | + } | |
| 670 | + i++; | |
| 671 | + } | |
| 672 | + if((sz[t]=='/' || sz[t]=='\\')&& (path[i]=='/' || path[i]=='\\')) | |
| 673 | + { | |
| 674 | + i++; | |
| 675 | + } | |
| 676 | + | |
| 677 | + int j= t; | |
| 678 | + for(j=t;i<path.length(); i++,j++) | |
| 679 | + { | |
| 680 | + if(path[i]=='\\') | |
| 681 | + { | |
| 682 | + sz[j] = '/'; | |
| 683 | + } | |
| 684 | + else | |
| 685 | + { | |
| 686 | + sz[j] = path[i]; | |
| 687 | + } | |
| 688 | + | |
| 689 | + } | |
| 690 | + sz[j] =0; | |
| 691 | + //strcat(sz, path.c_str()); | |
| 692 | + return sz; | |
| 693 | + } | |
| 694 | + else return 0; | |
| 695 | + | |
| 696 | + } | |
| 697 | + | |
| 698 | + int DmpPrint::GetCurrentFolderPath(char* processdir, size_t len) | |
| 699 | + { | |
| 700 | + char* path_end; | |
| 701 | + if (readlink("/proc/self/exe", processdir, len) <= 0) | |
| 702 | + return -1; | |
| 703 | + path_end = strrchr(processdir, '/'); | |
| 704 | + if (path_end == NULL) | |
| 705 | + return -1; | |
| 706 | + ++path_end; | |
| 707 | + //strcpy(processname, path_end); | |
| 708 | + *path_end = '\0'; | |
| 709 | + return (size_t)(path_end - processdir); | |
| 710 | + } | |
| 711 | + | |
| 712 | + | |
| 713 | + | |
| 714 | + bool DmpPrint::DoSetBackGround(clsCrSurf *pClsCS, int iColor) | |
| 715 | + { | |
| 716 | + cairo_surface_t *surface = pClsCS->m_pSurf; | |
| 717 | + cairo_t *cr = pClsCS->m_pCr; | |
| 718 | + int surf_w = cairo_image_surface_get_width(surface); | |
| 719 | + int surf_h = cairo_image_surface_get_height(surface); | |
| 720 | + //画一个矩形背景 | |
| 721 | + cairo_rectangle(cr, 0, 0, surf_w, surf_h); | |
| 722 | + double r, g, b, a; | |
| 723 | + MyUtil::ToCairoColor(iColor, r, g, b, a); | |
| 724 | + cairo_set_source_rgb(cr, r, g, b); | |
| 725 | + cairo_fill(cr); | |
| 726 | + return true; | |
| 727 | + }*/ | |
| 728 | +} | |
| \ No newline at end of file | ... | ... |
| ... | ... | @@ -14,6 +14,9 @@ |
| 14 | 14 | #include <string.h> |
| 15 | 15 | #include <vector> |
| 16 | 16 | #include <map> |
| 17 | +#include <math.h> | |
| 18 | +#include "dmpproject.h" | |
| 19 | +#include "dmpwmsrenderer.h" | |
| 17 | 20 | |
| 18 | 21 | #include "clsCrSurf.h" |
| 19 | 22 | #include "clsRect.h" |
| ... | ... | @@ -48,27 +51,26 @@ namespace DmpWms |
| 48 | 51 | bool ToPrint(std::string &responseData); |
| 49 | 52 | |
| 50 | 53 | public: |
| 51 | - DmpPrint(int isPicture); | |
| 52 | -/* | |
| 53 | - bool getPrint(AppendBuffer *ab, map<string, shared_ptr<WMSServer>> &mapWmsServer, const char *xml, string servername); | |
| 54 | - bool getPrint(AppendBuffer *ab, map<string, shared_ptr<WMSServer>> &mapWmsServer, string servername, const char *printTemp, const char *bbox); | |
| 54 | + DmpPrint(); | |
| 55 | + | |
| 56 | + bool getPrint(std::string &responseData, DmpProject* project, const char *xml, string servername); | |
| 57 | + bool getPrint(std::string &responseData, DmpProject* project, const char *printTemp, const char *bbox); | |
| 55 | 58 | |
| 56 | - bool getPrintLayout(AppendBuffer *ab, | |
| 57 | - shared_ptr<WMSServer> pWmsServer, | |
| 59 | + bool getPrintLayout(std::string &responseData, | |
| 60 | + DmpProject* project, | |
| 58 | 61 | const char *xml, |
| 59 | 62 | const char *bbox); |
| 60 | 63 | |
| 61 | - bool getPrintTempFile(AppendBuffer *ab, | |
| 62 | - shared_ptr<WMSServer> pWmsServer, | |
| 64 | + bool getPrintTempFile(std::string &responseData, | |
| 65 | + DmpProject* project, | |
| 63 | 66 | const char *tempName, |
| 64 | 67 | const char *bbox); |
| 65 | 68 | |
| 66 | - bool Test(AppendBuffer *ab, map<string, shared_ptr<WMSServer>> &mapWmsServer, string servername); | |
| 69 | + bool Test(std::string &responseData, DmpProject* project, string servername); | |
| 67 | 70 | |
| 68 | - vector<shared_ptr<DmapPrintLayout>> vector_dmapPrintLayout; | |
| 69 | - | |
| 70 | - vector<shared_ptr<OperationalLayer>> vector_operationalLayer; | |
| 71 | - */ | |
| 71 | + // vector<shared_ptr<DmapPrintLayout>> vector_dmapPrintLayout; | |
| 72 | + // vector<shared_ptr<OperationalLayer>> vector_operationalLayer; | |
| 73 | + | |
| 72 | 74 | }; |
| 73 | 75 | } |
| 74 | 76 | ... | ... |
| 1 | +/************************************************************************** | |
| 2 | +* file: dmpprintlayout.cpp | |
| 3 | + | |
| 4 | +* Author: qingxiongf | |
| 5 | +* Date: 2022-01-25 15:12:38 | |
| 6 | +* Email: qingxiongf@chinadci.com | |
| 7 | +* copyright: 广州城市信息研究所有限公司 | |
| 8 | +***************************************************************************/ | |
| 9 | +#include "dmpprintlayout.h" | |
| 10 | + | |
| 11 | +namespace DmpWms | |
| 12 | +{ | |
| 13 | + | |
| 14 | +} | |
| \ No newline at end of file | ... | ... |
| 1 | +/************************************************************************** | |
| 2 | +* file: dmpprintlayout.h | |
| 3 | + | |
| 4 | +* Author: qingxiongf | |
| 5 | +* Date: 2022-01-25 15:12:34 | |
| 6 | +* Email: qingxiongf@chinadci.com | |
| 7 | +* copyright: 广州城市信息研究所有限公司 | |
| 8 | +***************************************************************************/ | |
| 9 | + | |
| 10 | +#ifndef __dmpprintlayout_h__ | |
| 11 | +#define __dmpprintlayout_h__ | |
| 12 | + | |
| 13 | +namespace DmpWms | |
| 14 | +{ | |
| 15 | + | |
| 16 | +} | |
| 17 | + | |
| 18 | +#endif // __dmpprintlayout_h__ | |
| 19 | + | |
| 20 | + | ... | ... |
| ... | ... | @@ -149,11 +149,11 @@ namespace DmpWms |
| 149 | 149 | |
| 150 | 150 | string tableName = layer->name(); //layer->name(); |
| 151 | 151 | string shapeName = layer->geom(); |
| 152 | - shared_ptr<DmpVectorThinLayer> pVectorThinLayer = layer->GetCurrentScaleTable(1 / this->m_dR); | |
| 152 | + shared_ptr<DmpVectorVacuateLayer> pVectorVacuateLayer = layer->GetCurrentScaleTable(1 / this->m_dR); | |
| 153 | 153 | |
| 154 | - if (pVectorThinLayer != nullptr) | |
| 154 | + if (pVectorVacuateLayer != nullptr) | |
| 155 | 155 | { |
| 156 | - tableName = pVectorThinLayer->tableName(); | |
| 156 | + tableName = pVectorVacuateLayer->tableName(); | |
| 157 | 157 | } |
| 158 | 158 | |
| 159 | 159 | ss += " FROM \"%s\".\"%s\" "; // 这个 %s 是tableName |
| ... | ... | @@ -207,11 +207,11 @@ namespace DmpWms |
| 207 | 207 | |
| 208 | 208 | string tableName = layer->name(); //layer->name(); |
| 209 | 209 | string shapeName = layer->geom(); |
| 210 | - shared_ptr<DmpVectorThinLayer> pVectorThinLayer = layer->GetCurrentScaleTable(1 / this->m_dR); | |
| 210 | + shared_ptr<DmpVectorVacuateLayer> pVectorVacuateLayer = layer->GetCurrentScaleTable(1 / this->m_dR); | |
| 211 | 211 | |
| 212 | - if (pVectorThinLayer != nullptr) | |
| 212 | + if (pVectorVacuateLayer != nullptr) | |
| 213 | 213 | { |
| 214 | - tableName = pVectorThinLayer->tableName(); | |
| 214 | + tableName = pVectorVacuateLayer->tableName(); | |
| 215 | 215 | } |
| 216 | 216 | |
| 217 | 217 | ss += " FROM \"%s\".\"%s\" "; // 这个 %s 是tableName |
| ... | ... | @@ -294,11 +294,11 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
| 294 | 294 | |
| 295 | 295 | string tableName = layer->name(); //layer->name(); |
| 296 | 296 | string shapeName = layer->geom(); |
| 297 | - shared_ptr<DmpVectorThinLayer> pVectorThinLayer = layer->GetCurrentScaleTable(1 / this->m_dR); | |
| 297 | + shared_ptr<DmpVectorVacuateLayer> pVectorVacuateLayer = layer->GetCurrentScaleTable(1 / this->m_dR); | |
| 298 | 298 | |
| 299 | - if (pVectorThinLayer != nullptr) | |
| 299 | + if (pVectorVacuateLayer != nullptr) | |
| 300 | 300 | { |
| 301 | - tableName = pVectorThinLayer->tableName(); | |
| 301 | + tableName = pVectorVacuateLayer->tableName(); | |
| 302 | 302 | } |
| 303 | 303 | |
| 304 | 304 | ss += " FROM \"%s\".\"%s\" "; // 这个 %s 是tableName |
| ... | ... | @@ -332,7 +332,7 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
| 332 | 332 | return ""; |
| 333 | 333 | } |
| 334 | 334 | |
| 335 | - string DmpWmsRenderer::GetDrawSQLAll_Catch(DmpVectorLayer *layer, shared_ptr<DmpVectorThinLayer> pVectorThinLayer) | |
| 335 | + string DmpWmsRenderer::GetDrawSQLAll_Catch(DmpVectorLayer *layer, shared_ptr<DmpVectorVacuateLayer> pVectorVacuateLayer) | |
| 336 | 336 | { |
| 337 | 337 | if (layer == 0 || layer->geom().size() == 0) |
| 338 | 338 | return ""; |
| ... | ... | @@ -363,9 +363,9 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
| 363 | 363 | } |
| 364 | 364 | |
| 365 | 365 | string tableName = layer->name(); |
| 366 | - if (pVectorThinLayer != nullptr) | |
| 366 | + if (pVectorVacuateLayer != nullptr) | |
| 367 | 367 | { |
| 368 | - tableName = pVectorThinLayer->tableName(); | |
| 368 | + tableName = pVectorVacuateLayer->tableName(); | |
| 369 | 369 | } |
| 370 | 370 | |
| 371 | 371 | string shapeName = layer->geom(); |
| ... | ... | @@ -470,9 +470,9 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
| 470 | 470 | string tableName = layer->name(); |
| 471 | 471 | string shapeName = layer->geom(); |
| 472 | 472 | |
| 473 | - if (layer->thinLayers().size() > 0) | |
| 473 | + if (layer->vacuateLayers().size() > 0) | |
| 474 | 474 | { |
| 475 | - tableName = layer->thinLayers()[0]->tableName(); | |
| 475 | + tableName = layer->vacuateLayers()[0]->tableName(); | |
| 476 | 476 | } |
| 477 | 477 | |
| 478 | 478 | std::string sql = format(ss.c_str(), layer->schema().c_str(), tableName.c_str()); |
| ... | ... | @@ -1038,7 +1038,7 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
| 1038 | 1038 | outputStream << buff; |
| 1039 | 1039 | |
| 1040 | 1040 | string sql = ""; |
| 1041 | - shared_ptr<DmpVectorThinLayer> pVectorThinLayer = nullptr; | |
| 1041 | + shared_ptr<DmpVectorVacuateLayer> pVectorVacuateLayer = nullptr; | |
| 1042 | 1042 | |
| 1043 | 1043 | shared_ptr<DataCollection> data(new DataCollection()); |
| 1044 | 1044 | |
| ... | ... | @@ -1051,7 +1051,7 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
| 1051 | 1051 | sql = GetRegionQuerySQL(layer, pExtent.get(), format("%d", layer->crs().srid()), strRegionLayerNameDefs, strRegionColDefs, strLayerDef); |
| 1052 | 1052 | } |
| 1053 | 1053 | |
| 1054 | - pVectorThinLayer = layer->GetCurrentScaleTable(1 / this->m_dR); | |
| 1054 | + pVectorVacuateLayer = layer->GetCurrentScaleTable(1 / this->m_dR); | |
| 1055 | 1055 | |
| 1056 | 1056 | string sqlLog = sql; |
| 1057 | 1057 | DmpMapServerUtil::toXmlString(sqlLog); |
| ... | ... | @@ -1064,9 +1064,9 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
| 1064 | 1064 | |
| 1065 | 1065 | string tableName = layer->name(); |
| 1066 | 1066 | |
| 1067 | - if (pVectorThinLayer != nullptr) | |
| 1067 | + if (pVectorVacuateLayer != nullptr) | |
| 1068 | 1068 | { |
| 1069 | - tableName = pVectorThinLayer->tableName(); | |
| 1069 | + tableName = pVectorVacuateLayer->tableName(); | |
| 1070 | 1070 | } |
| 1071 | 1071 | |
| 1072 | 1072 | if (tableName.length() > 32) |
| ... | ... | @@ -1080,13 +1080,13 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
| 1080 | 1080 | { |
| 1081 | 1081 | |
| 1082 | 1082 | shared_ptr<DmpPgsql> pPgsqlConn = nullptr; |
| 1083 | - if (pVectorThinLayer == nullptr) | |
| 1083 | + if (pVectorVacuateLayer == nullptr) | |
| 1084 | 1084 | { |
| 1085 | 1085 | pPgsqlConn = DmpPgsqlSourcePools::get_instance()->GetPgsqlConn(layer->source()); |
| 1086 | 1086 | } |
| 1087 | 1087 | else |
| 1088 | 1088 | { |
| 1089 | - pPgsqlConn = DmpPgsqlSourcePools::get_instance()->GetDefaultPgsqlConn(); | |
| 1089 | + pPgsqlConn = DmpPgsqlSourcePools::get_instance()->GetPgsqlConn(pVectorVacuateLayer->connectStr()); | |
| 1090 | 1090 | } |
| 1091 | 1091 | |
| 1092 | 1092 | if (pPgsqlConn == nullptr) |
| ... | ... | @@ -1106,7 +1106,7 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
| 1106 | 1106 | sprintf(buff,"<log>draw success</log>"); |
| 1107 | 1107 | outputStream << buff; |
| 1108 | 1108 | } |
| 1109 | - else if (pVectorThinLayer != nullptr) | |
| 1109 | + else if (pVectorVacuateLayer != nullptr) | |
| 1110 | 1110 | { |
| 1111 | 1111 | /*shared_ptr<DmpPgsql> pPgsqlConn1 = DmpPgsqlSourcePools::get_instance()->GetPgsqlConn(layer->source()); |
| 1112 | 1112 | sprintf(buff,"<log>从抽稀图层获取数据%s</log>", pMapLayerThinning->m_tableName.c_str()); |
| ... | ... | @@ -1231,7 +1231,7 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
| 1231 | 1231 | double cost, cost2; |
| 1232 | 1232 | |
| 1233 | 1233 | string sql = ""; |
| 1234 | - shared_ptr<DmpVectorThinLayer> pVectorThinLayer = nullptr; | |
| 1234 | + shared_ptr<DmpVectorVacuateLayer> pVectorVacuateLayer = nullptr; | |
| 1235 | 1235 | |
| 1236 | 1236 | bool renderHeat = false; |
| 1237 | 1237 | shared_ptr<DataCollection> data(new DataCollection()); |
| ... | ... | @@ -1245,7 +1245,7 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
| 1245 | 1245 | sql = GetRegionQuerySQL(layer, pExtent.get(), format("%d", layer->crs().srid()), strRegionLayerNameDefs, strRegionColDefs, strLayerDef); |
| 1246 | 1246 | } |
| 1247 | 1247 | |
| 1248 | - pVectorThinLayer = layer->GetCurrentScaleTable(1 / this->m_dR); | |
| 1248 | + pVectorVacuateLayer = layer->GetCurrentScaleTable(1 / this->m_dR); | |
| 1249 | 1249 | |
| 1250 | 1250 | // printf( "%s\r\n", sql.c_str()); |
| 1251 | 1251 | // this->GetDrawSQL(layer, pExtent.get(), strLayerDef); //sql语句中使用 ::box |
| ... | ... | @@ -1254,9 +1254,9 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
| 1254 | 1254 | |
| 1255 | 1255 | string tableName = layer->name(); |
| 1256 | 1256 | |
| 1257 | - if (pVectorThinLayer != nullptr) | |
| 1257 | + if (pVectorVacuateLayer != nullptr) | |
| 1258 | 1258 | { |
| 1259 | - tableName = pVectorThinLayer->tableName(); | |
| 1259 | + tableName = pVectorVacuateLayer->tableName(); | |
| 1260 | 1260 | } |
| 1261 | 1261 | |
| 1262 | 1262 | if (tableName.length() > 32) |
| ... | ... | @@ -1270,13 +1270,13 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
| 1270 | 1270 | { |
| 1271 | 1271 | |
| 1272 | 1272 | shared_ptr<DmpPgsql> pPgsqlConn = nullptr; |
| 1273 | - if (pVectorThinLayer == nullptr) | |
| 1273 | + if (pVectorVacuateLayer == nullptr) | |
| 1274 | 1274 | { |
| 1275 | 1275 | pPgsqlConn = DmpPgsqlSourcePools::get_instance()->GetPgsqlConn(layer->source()); |
| 1276 | 1276 | } |
| 1277 | 1277 | else |
| 1278 | 1278 | { |
| 1279 | - pPgsqlConn = DmpPgsqlSourcePools::get_instance()->GetDefaultPgsqlConn(); | |
| 1279 | + pPgsqlConn = DmpPgsqlSourcePools::get_instance()->GetPgsqlConn(pVectorVacuateLayer->connectStr()); | |
| 1280 | 1280 | } |
| 1281 | 1281 | |
| 1282 | 1282 | if (pPgsqlConn == nullptr) |
| ... | ... | @@ -1300,7 +1300,7 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
| 1300 | 1300 | this->DrawSimpleData(data.get(), layer->GetRenderer30().get(), pClsSurfThis); |
| 1301 | 1301 | |
| 1302 | 1302 | } |
| 1303 | - else if (pVectorThinLayer != nullptr) | |
| 1303 | + else if (pVectorVacuateLayer != nullptr) | |
| 1304 | 1304 | { |
| 1305 | 1305 | shared_ptr<DmpPgsql> pPgsqlConn1 = DmpPgsqlSourcePools::get_instance()->GetPgsqlConn(layer->source()); |
| 1306 | 1306 | ... | ... |
| ... | ... | @@ -22,7 +22,7 @@ |
| 22 | 22 | #include "clsUtil.h" |
| 23 | 23 | #include "DataCollection.h" |
| 24 | 24 | #include "dmpvectorlayer.h" |
| 25 | -#include "dmpvectorthinlayer.h" | |
| 25 | +#include "dmpvectorvacuatelayer.h" | |
| 26 | 26 | #include "dmprasterbuffer.h" |
| 27 | 27 | #include "dmpproject.h" |
| 28 | 28 | #include "dmppgsqlsourcepools.h" |
| ... | ... | @@ -32,8 +32,6 @@ using namespace DmapCore_30; |
| 32 | 32 | using namespace mapserver; |
| 33 | 33 | namespace DmpWms |
| 34 | 34 | { |
| 35 | - | |
| 36 | - | |
| 37 | 35 | class DmpWmsRenderer |
| 38 | 36 | { |
| 39 | 37 | public: |
| ... | ... | @@ -49,7 +47,7 @@ namespace DmpWms |
| 49 | 47 | bool GetMapLegend( std::stringstream& ab, shared_ptr<legendParamater> pLegendParamater); |
| 50 | 48 | bool GetMapLegend( shared_ptr<legendParamater> pLegendParamater, clsCrSurf* pClsSurf); |
| 51 | 49 | |
| 52 | - string GetDrawSQLAll_Catch(DmpVectorLayer* layer,shared_ptr<DmpVectorThinLayer> pMapLayerThinning); | |
| 50 | + string GetDrawSQLAll_Catch(DmpVectorLayer* layer,shared_ptr<DmpVectorVacuateLayer> pVectorVacuateLayer); | |
| 53 | 51 | string GetDrawSQL(DmpVectorLayer* layer, Rect* pRect,const char* layerdef = nullptr); |
| 54 | 52 | string GetDrawSQLAll(DmpVectorLayer* layer); |
| 55 | 53 | string GetDrawSQLAllOrderby(DmpVectorLayer* layer); | ... | ... |
请
注册
或
登录
后发表评论