正在显示
25 个修改的文件
包含
1042 行增加
和
133 行删除
dmapserver4.tar.gz
0 → 100644
不能预览此文件类型
@@ -24,7 +24,7 @@ SET(DMAP_CORE_SRCS | @@ -24,7 +24,7 @@ SET(DMAP_CORE_SRCS | ||
24 | dmptilematrixset.cpp | 24 | dmptilematrixset.cpp |
25 | dmpvectordataprovider.cpp | 25 | dmpvectordataprovider.cpp |
26 | dmpvectorlayer.cpp | 26 | dmpvectorlayer.cpp |
27 | - dmpvectorthinlayer.cpp | 27 | + dmpvectorvacuatelayer.cpp |
28 | dmpvectorlayerrenderer.cpp | 28 | dmpvectorlayerrenderer.cpp |
29 | dmpxmlutils.cpp | 29 | dmpxmlutils.cpp |
30 | 30 | ||
@@ -76,7 +76,7 @@ SET(DMAP_CORE_HDRS | @@ -76,7 +76,7 @@ SET(DMAP_CORE_HDRS | ||
76 | dmptilematrixset.h | 76 | dmptilematrixset.h |
77 | dmpvectordataprovider.h | 77 | dmpvectordataprovider.h |
78 | dmpvectorlayer.h | 78 | dmpvectorlayer.h |
79 | - dmpvectorthinlayer.h | 79 | + dmpvectorvacuatelayer.h |
80 | dmpvectorlayerrenderer.h | 80 | dmpvectorlayerrenderer.h |
81 | dmpxmlutils.h | 81 | dmpxmlutils.h |
82 | 82 |
@@ -223,4 +223,103 @@ DmpMapLayer *DmpProject::getLayer() const | @@ -223,4 +223,103 @@ DmpMapLayer *DmpProject::getLayer() const | ||
223 | { | 223 | { |
224 | return nullptr; | 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 | } |
@@ -27,6 +27,9 @@ class CORE_EXPORT DmpProject | @@ -27,6 +27,9 @@ class CORE_EXPORT DmpProject | ||
27 | bool Read(const std::string &data); | 27 | bool Read(const std::string &data); |
28 | bool Write(const std::string &filename, const std::string &data); | 28 | bool Write(const std::string &filename, const std::string &data); |
29 | bool WritePtree(boost::property_tree::ptree& ptDoc); | 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 | std::string WriteXml(); | 33 | std::string WriteXml(); |
31 | std::string WriteJson(); | 34 | std::string WriteJson(); |
32 | DmpCoordinateReferenceSystem crs() const; | 35 | DmpCoordinateReferenceSystem crs() const; |
@@ -293,7 +293,7 @@ bool DmpVectorLayer::setDataProvider(const std::string &provider) | @@ -293,7 +293,7 @@ bool DmpVectorLayer::setDataProvider(const std::string &provider) | ||
293 | return true; | 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,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 | return nullptr; | 331 | return nullptr; |
@@ -15,7 +15,7 @@ | @@ -15,7 +15,7 @@ | ||
15 | #include "dmpmaplayer.h" | 15 | #include "dmpmaplayer.h" |
16 | #include "dmpwkbtypes.h" | 16 | #include "dmpwkbtypes.h" |
17 | #include "dmpvectordataprovider.h" | 17 | #include "dmpvectordataprovider.h" |
18 | -#include "dmpvectorthinlayer.h" | 18 | +#include "dmpvectorvacuatelayer.h" |
19 | #include "Renderer.h" | 19 | #include "Renderer.h" |
20 | #include <vector> | 20 | #include <vector> |
21 | 21 | ||
@@ -54,8 +54,9 @@ class CORE_EXPORT DmpVectorLayer : public DmpMapLayer | @@ -54,8 +54,9 @@ class CORE_EXPORT DmpVectorLayer : public DmpMapLayer | ||
54 | 54 | ||
55 | 55 | ||
56 | shared_ptr<DmapCore_30::Renderer> GetRenderer30() { return renderer_30_; } | 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 | std::string schema() { return schema_;} | 61 | std::string schema() { return schema_;} |
61 | std::string geom() { return geom_;} | 62 | std::string geom() { return geom_;} |
@@ -79,9 +80,9 @@ class CORE_EXPORT DmpVectorLayer : public DmpMapLayer | @@ -79,9 +80,9 @@ class CORE_EXPORT DmpVectorLayer : public DmpMapLayer | ||
79 | std::string wherestr_; | 80 | std::string wherestr_; |
80 | bool isinit_ = false; | 81 | bool isinit_ = false; |
81 | shared_ptr<DmapCore_30::Renderer> renderer_30_ = nullptr; | 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 | #endif //__dmpvectorlayer_h__ | 88 | #endif //__dmpvectorlayer_h__ |
1 | /************************************************************************** | 1 | /************************************************************************** |
2 | -* file: dmpvectorthinlayer.cpp | 2 | +* file: dmpvectorvacuatelayer.cpp |
3 | 3 | ||
4 | * Author: qingxiongf | 4 | * Author: qingxiongf |
5 | * Date: 2021-12-13 10:05:35 | 5 | * Date: 2021-12-13 10:05:35 |
6 | * Email: qingxiongf@chinadci.com | 6 | * Email: qingxiongf@chinadci.com |
7 | * copyright: 广州城市信息研究所有限公司 | 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 | if(d > m_ddis) | 23 | if(d > m_ddis) |
24 | { | 24 | { |
@@ -27,21 +27,22 @@ DmpVectorThinLayer::~DmpVectorThinLayer() | @@ -27,21 +27,22 @@ DmpVectorThinLayer::~DmpVectorThinLayer() | ||
27 | return false; | 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 | m_ddis =dis; | 39 | m_ddis =dis; |
40 | m_tableName = tableName; | 40 | m_tableName = tableName; |
41 | + connectstr_ = connectstr; | ||
41 | return true; | 42 | return true; |
42 | } | 43 | } |
43 | 44 | ||
44 | -double DmpVectorThinLayer::GeDisPix() | 45 | +double DmpVectorVacuateLayer::GeDisPix() |
45 | { | 46 | { |
46 | return this->m_ddis; | 47 | return this->m_ddis; |
47 | } | 48 | } |
1 | /************************************************************************** | 1 | /************************************************************************** |
2 | -* file: dmpvectorthinlayer.h | 2 | +* file: dmpvectorvacuatelayer.h |
3 | 3 | ||
4 | * Author: qingxiongf | 4 | * Author: qingxiongf |
5 | * Date: 2021-12-13 10:05:42 | 5 | * Date: 2021-12-13 10:05:42 |
@@ -7,33 +7,33 @@ | @@ -7,33 +7,33 @@ | ||
7 | * copyright: 广州城市信息研究所有限公司 | 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 | #include "dmap_core.h" | 13 | #include "dmap_core.h" |
14 | #include <string> | 14 | #include <string> |
15 | +#include <memory> | ||
15 | 16 | ||
16 | -class CORE_EXPORT DmpVectorThinLayer | 17 | +class CORE_EXPORT DmpVectorVacuateLayer |
17 | { | 18 | { |
18 | public: | 19 | public: |
19 | - DmpVectorThinLayer(/* args */); | 20 | + DmpVectorVacuateLayer(/* args */); |
20 | 21 | ||
21 | - ~DmpVectorThinLayer(); | 22 | + ~DmpVectorVacuateLayer(); |
22 | 23 | ||
23 | bool IsCurrentLayer(double d); | 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 | double GeDisPix(); | 31 | double GeDisPix(); |
34 | 32 | ||
35 | std::string tableName()const { return m_tableName;} | 33 | std::string tableName()const { return m_tableName;} |
36 | 34 | ||
35 | + std::string connectStr() const {return connectstr_;} | ||
36 | + | ||
37 | private: | 37 | private: |
38 | int m_indexLevel; | 38 | int m_indexLevel; |
39 | int m_dataCount; | 39 | int m_dataCount; |
@@ -44,6 +44,7 @@ class CORE_EXPORT DmpVectorThinLayer | @@ -44,6 +44,7 @@ class CORE_EXPORT DmpVectorThinLayer | ||
44 | double m_ddis; | 44 | double m_ddis; |
45 | std::string m_tableName; | 45 | std::string m_tableName; |
46 | std::string polygon_area = "geodmap_area"; | 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,25 +116,24 @@ namespace DmapCore_30 | ||
116 | 116 | ||
117 | clsPtree::PtreeAttrParse("glowing", ptRenderer, m_bGlowing); | 117 | clsPtree::PtreeAttrParse("glowing", ptRenderer, m_bGlowing); |
118 | if (m_bGlowing) | 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 | clsPtree::PtreeAttrParseColor("shadowcolor", "shadowtransparency", ptRenderer, m_iShadowColor); | 124 | clsPtree::PtreeAttrParseColor("shadowcolor", "shadowtransparency", ptRenderer, m_iShadowColor); |
125 | 125 | ||
126 | pt.add_child("TEXTSYMBOL",ptRenderer); | 126 | pt.add_child("TEXTSYMBOL",ptRenderer); |
127 | return true; | 127 | return true; |
128 | } | 128 | } |
129 | 129 | ||
130 | - void TextSymbol::ToJson(AppendBuffer *ab) | 130 | + void TextSymbol::ToJson(AppendBuffer *ab) |
131 | { | 131 | { |
132 | char buff[300] = {0}; | 132 | char buff[300] = {0}; |
133 | char resultbuff[5000] ={0}; | 133 | char resultbuff[5000] ={0}; |
134 | sprintf(resultbuff, R"("TEXTSYMBOL":{"antialiasing":"antialias_default",)"); | 134 | sprintf(resultbuff, R"("TEXTSYMBOL":{"antialiasing":"antialias_default",)"); |
135 | clsJson::JsonAttrParse("font", resultbuff, buff, this->m_sFont); | 135 | clsJson::JsonAttrParse("font", resultbuff, buff, this->m_sFont); |
136 | clsJson::JsonAttrParse("fontsize", resultbuff, buff, this->m_iFontSize); | 136 | clsJson::JsonAttrParse("fontsize", resultbuff, buff, this->m_iFontSize); |
137 | - // | ||
138 | clsJson::JsonAttrParseColor("fontcolor", "fonttransparency", resultbuff, buff, m_iFontColor); | 137 | clsJson::JsonAttrParseColor("fontcolor", "fonttransparency", resultbuff, buff, m_iFontColor); |
139 | clsJson::JsonAttrParse("x_dis", resultbuff, buff, this->m_dXdis); | 138 | clsJson::JsonAttrParse("x_dis", resultbuff, buff, this->m_dXdis); |
140 | clsJson::JsonAttrParse("y_dis", resultbuff, buff, this->m_dYdis); | 139 | clsJson::JsonAttrParse("y_dis", resultbuff, buff, this->m_dYdis); |
@@ -147,11 +146,11 @@ namespace DmapCore_30 | @@ -147,11 +146,11 @@ namespace DmapCore_30 | ||
147 | 146 | ||
148 | clsJson::JsonAttrParse("glowing", resultbuff, buff, m_bGlowing); | 147 | clsJson::JsonAttrParse("glowing", resultbuff, buff, m_bGlowing); |
149 | if (m_bGlowing) | 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 | clsJson::JsonAttrParseColor("shadowcolor", "shadowtransparency", resultbuff, buff, m_iShadowColor); | 154 | clsJson::JsonAttrParseColor("shadowcolor", "shadowtransparency", resultbuff, buff, m_iShadowColor); |
156 | 155 | ||
157 | clsJson::JsonAttrEnd(resultbuff); | 156 | clsJson::JsonAttrEnd(resultbuff); |
@@ -108,7 +108,7 @@ public: | @@ -108,7 +108,7 @@ public: | ||
108 | 108 | ||
109 | int main(int argc, char *argv[]) | 109 | int main(int argc, char *argv[]) |
110 | { | 110 | { |
111 | - int port = 8088, maxThreads = 10; | 111 | + int port = 8820, maxThreads = 10; |
112 | const char *serverType = "lf"; | 112 | const char *serverType = "lf"; |
113 | #ifndef WIN32 | 113 | #ifndef WIN32 |
114 | extern char *optarg; | 114 | extern char *optarg; |
1 | [MetaData] | 1 | [MetaData] |
2 | pgsqlConnect="hostaddr=localhost port=5432 dbname='dmap_dms' user='postgres' password='chinadci'" | 2 | pgsqlConnect="hostaddr=localhost port=5432 dbname='dmap_dms' user='postgres' password='chinadci'" |
3 | -metaUrl=http://172.26.60.100:8841/ | ||
3 | +metaUrl=http://172.26.60.101:8840/ |
@@ -121,6 +121,11 @@ bool DmpServerManager::publish(const std::string& serverName, const std::string& | @@ -121,6 +121,11 @@ bool DmpServerManager::publish(const std::string& serverName, const std::string& | ||
121 | return false; | 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 | if (!serverRegistry_->getServer(serverName)->publish(serviceName, title, capabilities, *project)) | 129 | if (!serverRegistry_->getServer(serverName)->publish(serviceName, title, capabilities, *project)) |
125 | { | 130 | { |
126 | delete project; | 131 | delete project; |
@@ -183,7 +188,7 @@ bool DmpServerManager::loadServices() | @@ -183,7 +188,7 @@ bool DmpServerManager::loadServices() | ||
183 | } | 188 | } |
184 | bool DmpServerManager::initServices(const std::string& serverName, const std::string& serviceName, const std::string& title, int capabilities, const std::string& projectData) | 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 | std::string projData; | 192 | std::string projData; |
188 | if (!DmpServerUtils::Base64Decode(projectData, &projData)) | 193 | if (!DmpServerUtils::Base64Decode(projectData, &projData)) |
189 | { | 194 | { |
@@ -196,12 +201,16 @@ bool DmpServerManager::initServices(const std::string& serverName, const std::st | @@ -196,12 +201,16 @@ bool DmpServerManager::initServices(const std::string& serverName, const std::st | ||
196 | return false; | 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 | if (!serverRegistry_->getServer(serverName)->publish(serviceName, title, capabilities, *project)) | 209 | if (!serverRegistry_->getServer(serverName)->publish(serviceName, title, capabilities, *project)) |
200 | { | 210 | { |
201 | delete project; | 211 | delete project; |
202 | return false; | 212 | return false; |
203 | } | 213 | } |
204 | - projects_[serviceName] = project; | 214 | + projects_[serviceName] = project; |
205 | return true; | 215 | return true; |
206 | - | ||
207 | } | 216 | } |
@@ -20,7 +20,8 @@ | @@ -20,7 +20,8 @@ | ||
20 | #include "dmpserverregistry.h" | 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 | class SERVER_EXPORT DmpServerManager | 25 | class SERVER_EXPORT DmpServerManager |
25 | { | 26 | { |
26 | public: | 27 | public: |
@@ -454,9 +454,14 @@ namespace mapserver | @@ -454,9 +454,14 @@ namespace mapserver | ||
454 | 454 | ||
455 | bool DmpPgsqlSourcePools::AddDatabasePool(string guid) | 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 | shared_ptr<DmpPgsqlPool> newPool(new DmpPgsqlPool(guid,guid,guid)); | 465 | shared_ptr<DmpPgsqlPool> newPool(new DmpPgsqlPool(guid,guid,guid)); |
461 | newPool->Connect(connStr.c_str()); | 466 | newPool->Connect(connStr.c_str()); |
462 | //newPool->Connect("PostgreSQLConn=hostaddr=172.26.99.173 port=5433 dbname='postgres' user='postgres' password='chinadci'"); | 467 | //newPool->Connect("PostgreSQLConn=hostaddr=172.26.99.173 port=5433 dbname='postgres' user='postgres' password='chinadci'"); |
@@ -48,8 +48,8 @@ namespace DmpMapping | @@ -48,8 +48,8 @@ namespace DmpMapping | ||
48 | 48 | ||
49 | std::string guid = pt.get<std::string>("guid"); | 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 | // printf("%s\r\n",projectData.c_str()); | 53 | // printf("%s\r\n",projectData.c_str()); |
54 | if(!guid.empty() && !projectData.empty()) | 54 | if(!guid.empty() && !projectData.empty()) |
55 | { | 55 | { |
@@ -60,6 +60,9 @@ namespace DmpMapping | @@ -60,6 +60,9 @@ namespace DmpMapping | ||
60 | context.response()->writeJson("{\"status\":\"false\",\"message\":\"加载DMD符号化失败!\"}"); | 60 | context.response()->writeJson("{\"status\":\"false\",\"message\":\"加载DMD符号化失败!\"}"); |
61 | return false; | 61 | return false; |
62 | } | 62 | } |
63 | + | ||
64 | + project->initVectorLayerVacuate(projectold); | ||
65 | + | ||
63 | vectorMappingProjects[guid] = project; | 66 | vectorMappingProjects[guid] = project; |
64 | 67 | ||
65 | // int i = 0; | 68 | // int i = 0; |
@@ -166,31 +169,36 @@ namespace DmpMapping | @@ -166,31 +169,36 @@ namespace DmpMapping | ||
166 | context.response()->writeJson("{\"status\":\"false\",\"message\":\"DMD文档错误\"}"); | 169 | context.response()->writeJson("{\"status\":\"false\",\"message\":\"DMD文档错误\"}"); |
167 | return false; | 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 | minx = layer->extent().xmin(); | 186 | minx = layer->extent().xmin(); |
187 | - if (miny > layer->extent().ymin()) | ||
188 | miny = layer->extent().ymin(); | 187 | miny = layer->extent().ymin(); |
189 | - if (maxx < layer->extent().xmax()) | ||
190 | maxx = layer->extent().xmax(); | 188 | maxx = layer->extent().xmax(); |
191 | - if (maxy < layer->extent().ymax()) | ||
192 | maxy = layer->extent().ymax(); | 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 | char buff[250]; | 204 | char buff[250]; |
@@ -271,6 +279,10 @@ namespace DmpMapping | @@ -271,6 +279,10 @@ namespace DmpMapping | ||
271 | context.response()->writeJson("{\"status\":\"false\",\"message\":\"DMD文档错误\"}"); | 279 | context.response()->writeJson("{\"status\":\"false\",\"message\":\"DMD文档错误\"}"); |
272 | return false; | 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 | vectorMappingProjects[guid] = project; | 286 | vectorMappingProjects[guid] = project; |
275 | context.response()->writeJson("{\"status\":\"true\",\"message\":\"创建编辑服务工作空间成功!\"}"); | 287 | context.response()->writeJson("{\"status\":\"true\",\"message\":\"创建编辑服务工作空间成功!\"}"); |
276 | return true; | 288 | return true; |
@@ -15,6 +15,7 @@ | @@ -15,6 +15,7 @@ | ||
15 | #include "dmpproject.h" | 15 | #include "dmpproject.h" |
16 | #include "dmpservercontext.h" | 16 | #include "dmpservercontext.h" |
17 | #include "dmppgsqlsourcepools.h" | 17 | #include "dmppgsqlsourcepools.h" |
18 | +#include "dmpservermanager.h" | ||
18 | 19 | ||
19 | namespace DmpMapping | 20 | namespace DmpMapping |
20 | { | 21 | { |
@@ -19,7 +19,6 @@ | @@ -19,7 +19,6 @@ | ||
19 | #include "../wms/dmpwmsgetmap.h" | 19 | #include "../wms/dmpwmsgetmap.h" |
20 | #include "../wms/dmpwmsparameters.h" | 20 | #include "../wms/dmpwmsparameters.h" |
21 | #include "dmpmapping.h" | 21 | #include "dmpmapping.h" |
22 | -#include "dmpmappingparameters.h" | ||
23 | #include "dmpimageinfo.h" | 22 | #include "dmpimageinfo.h" |
24 | 23 | ||
25 | using namespace std; | 24 | using namespace std; |
@@ -71,19 +70,33 @@ namespace DmpMapping | @@ -71,19 +70,33 @@ namespace DmpMapping | ||
71 | getImage(context); | 70 | getImage(context); |
72 | } | 71 | } |
73 | else if(boost::iequals(request, "getmaplog")){ | 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 | if (vectorMappingProjects_.find(mapGuid) != vectorMappingProjects_.end()) | 85 | if (vectorMappingProjects_.find(mapGuid) != vectorMappingProjects_.end()) |
76 | { | 86 | { |
77 | shared_ptr<DmpProject> project = vectorMappingProjects_.find(mapGuid)->second; | 87 | shared_ptr<DmpProject> project = vectorMappingProjects_.find(mapGuid)->second; |
78 | const DmpWms::DmpWmsParameters wmsParams(context.request()->serverParameters()); | 88 | const DmpWms::DmpWmsParameters wmsParams(context.request()->serverParameters()); |
79 | DmpWms::writeGetMapLog(context, wmsParams, project.get()); | 89 | DmpWms::writeGetMapLog(context, wmsParams, project.get()); |
90 | + return true; | ||
80 | } | 91 | } |
81 | else | 92 | else |
82 | { | 93 | { |
83 | context.response()->writeJson("{\"status\":\"false\",\"message\":\"未找到服务\"}"); | 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 | const std::string mapGuid = params.MapGuid(); | 101 | const std::string mapGuid = params.MapGuid(); |
89 | if (vectorMappingProjects_.find(mapGuid) != vectorMappingProjects_.end()) | 102 | if (vectorMappingProjects_.find(mapGuid) != vectorMappingProjects_.end()) |
@@ -91,6 +104,7 @@ namespace DmpMapping | @@ -91,6 +104,7 @@ namespace DmpMapping | ||
91 | shared_ptr<DmpProject> project = vectorMappingProjects_.find(mapGuid)->second; | 104 | shared_ptr<DmpProject> project = vectorMappingProjects_.find(mapGuid)->second; |
92 | const DmpWms::DmpWmsParameters wmsParams(context.request()->serverParameters()); | 105 | const DmpWms::DmpWmsParameters wmsParams(context.request()->serverParameters()); |
93 | DmpWms::writeGetMap(context, wmsParams, project.get()); | 106 | DmpWms::writeGetMap(context, wmsParams, project.get()); |
107 | + return true; | ||
94 | } | 108 | } |
95 | else | 109 | else |
96 | { | 110 | { |
@@ -114,27 +128,31 @@ namespace DmpMapping | @@ -114,27 +128,31 @@ namespace DmpMapping | ||
114 | if (!DmpServerUtils::Base64Decode(mapRenderer, &projData)) | 128 | if (!DmpServerUtils::Base64Decode(mapRenderer, &projData)) |
115 | { | 129 | { |
116 | context.response()->writeJson("{\"status\":\"false\",\"message\":\""+ mapRenderer +" base64转码错误\"}"); | 130 | context.response()->writeJson("{\"status\":\"false\",\"message\":\""+ mapRenderer +" base64转码错误\"}"); |
117 | - return; | 131 | + return false; |
118 | } | 132 | } |
119 | shared_ptr<DmpProject> project(new DmpProject()); | 133 | shared_ptr<DmpProject> project(new DmpProject()); |
120 | if (!project->Read(projData)) | 134 | if (!project->Read(projData)) |
121 | { | 135 | { |
122 | context.response()->writeJson("{\"status\":\"false\",\"message\":\"DMD文档错误\"}"); | 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 | const DmpWms::DmpWmsParameters wmsParams(context.request()->serverParameters()); | 143 | const DmpWms::DmpWmsParameters wmsParams(context.request()->serverParameters()); |
126 | DmpWms::writeGetMap(context, wmsParams, project.get()); | 144 | DmpWms::writeGetMap(context, wmsParams, project.get()); |
127 | if(!mapGuid.empty()) | 145 | if(!mapGuid.empty()) |
128 | { | 146 | { |
129 | vectorMappingProjects_[mapGuid] = project; | 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,11 +10,13 @@ | ||
10 | #define __dmpmapping_h__ | 10 | #define __dmpmapping_h__ |
11 | #include <string> | 11 | #include <string> |
12 | #include <string> | 12 | #include <string> |
13 | -#include "dmpeditservice.h" | ||
14 | -#include "dmpservice.h" | ||
15 | #include <boost/thread/shared_mutex.hpp> | 13 | #include <boost/thread/shared_mutex.hpp> |
16 | #include <boost/thread.hpp> | 14 | #include <boost/thread.hpp> |
17 | 15 | ||
16 | +#include "dmpeditservice.h" | ||
17 | +#include "dmpservice.h" | ||
18 | +#include "dmpmappingparameters.h" | ||
19 | + | ||
18 | typedef boost::shared_mutex rwmutex; | 20 | typedef boost::shared_mutex rwmutex; |
19 | typedef boost::shared_lock<rwmutex> readLock; | 21 | typedef boost::shared_lock<rwmutex> readLock; |
20 | typedef boost::unique_lock<rwmutex> writeLock; | 22 | typedef boost::unique_lock<rwmutex> writeLock; |
@@ -31,6 +33,9 @@ namespace DmpMapping | @@ -31,6 +33,9 @@ namespace DmpMapping | ||
31 | bool allowMethod(DmpServerRequest::Method method) const override { return method == DmpServerRequest::GET_METHOD; } | 33 | bool allowMethod(DmpServerRequest::Method method) const override { return method == DmpServerRequest::GET_METHOD; } |
32 | void executeRequest(const DmpServerContext &context) override; | 34 | void executeRequest(const DmpServerContext &context) override; |
33 | private: | 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 | ProjectMap vectorMappingProjects_; | 41 | ProjectMap vectorMappingProjects_; |
@@ -7,4 +7,722 @@ | @@ -7,4 +7,722 @@ | ||
7 | * copyright: 广州城市信息研究所有限公司 | 7 | * copyright: 广州城市信息研究所有限公司 |
8 | ***************************************************************************/ | 8 | ***************************************************************************/ |
9 | #include "dmpprint.h" | 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 | +} |
@@ -14,6 +14,9 @@ | @@ -14,6 +14,9 @@ | ||
14 | #include <string.h> | 14 | #include <string.h> |
15 | #include <vector> | 15 | #include <vector> |
16 | #include <map> | 16 | #include <map> |
17 | +#include <math.h> | ||
18 | +#include "dmpproject.h" | ||
19 | +#include "dmpwmsrenderer.h" | ||
17 | 20 | ||
18 | #include "clsCrSurf.h" | 21 | #include "clsCrSurf.h" |
19 | #include "clsRect.h" | 22 | #include "clsRect.h" |
@@ -48,27 +51,26 @@ namespace DmpWms | @@ -48,27 +51,26 @@ namespace DmpWms | ||
48 | bool ToPrint(std::string &responseData); | 51 | bool ToPrint(std::string &responseData); |
49 | 52 | ||
50 | public: | 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 | const char *xml, | 61 | const char *xml, |
59 | const char *bbox); | 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 | const char *tempName, | 66 | const char *tempName, |
64 | const char *bbox); | 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 | +} |
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 | + |
@@ -25,7 +25,9 @@ namespace DmpWms | @@ -25,7 +25,9 @@ namespace DmpWms | ||
25 | XML, | 25 | XML, |
26 | HTML, | 26 | HTML, |
27 | GML, | 27 | GML, |
28 | - GeoJson | 28 | + GeoJson, |
29 | + PDF, | ||
30 | + SVG | ||
29 | }; | 31 | }; |
30 | DmpWmsParameters(const DmpServerParameters ¶meters); | 32 | DmpWmsParameters(const DmpServerParameters ¶meters); |
31 | DmpWmsParameters(); | 33 | DmpWmsParameters(); |
@@ -149,11 +149,11 @@ namespace DmpWms | @@ -149,11 +149,11 @@ namespace DmpWms | ||
149 | 149 | ||
150 | string tableName = layer->name(); //layer->name(); | 150 | string tableName = layer->name(); //layer->name(); |
151 | string shapeName = layer->geom(); | 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 | ss += " FROM \"%s\".\"%s\" "; // 这个 %s 是tableName | 159 | ss += " FROM \"%s\".\"%s\" "; // 这个 %s 是tableName |
@@ -207,11 +207,11 @@ namespace DmpWms | @@ -207,11 +207,11 @@ namespace DmpWms | ||
207 | 207 | ||
208 | string tableName = layer->name(); //layer->name(); | 208 | string tableName = layer->name(); //layer->name(); |
209 | string shapeName = layer->geom(); | 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 | ss += " FROM \"%s\".\"%s\" "; // 这个 %s 是tableName | 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,11 +294,11 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ | ||
294 | 294 | ||
295 | string tableName = layer->name(); //layer->name(); | 295 | string tableName = layer->name(); //layer->name(); |
296 | string shapeName = layer->geom(); | 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 | ss += " FROM \"%s\".\"%s\" "; // 这个 %s 是tableName | 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,7 +332,7 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ | ||
332 | return ""; | 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 | if (layer == 0 || layer->geom().size() == 0) | 337 | if (layer == 0 || layer->geom().size() == 0) |
338 | return ""; | 338 | return ""; |
@@ -363,9 +363,9 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ | @@ -363,9 +363,9 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ | ||
363 | } | 363 | } |
364 | 364 | ||
365 | string tableName = layer->name(); | 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 | string shapeName = layer->geom(); | 371 | string shapeName = layer->geom(); |
@@ -470,9 +470,9 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ | @@ -470,9 +470,9 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ | ||
470 | string tableName = layer->name(); | 470 | string tableName = layer->name(); |
471 | string shapeName = layer->geom(); | 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 | std::string sql = format(ss.c_str(), layer->schema().c_str(), tableName.c_str()); | 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,7 +1038,7 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ | ||
1038 | outputStream << buff; | 1038 | outputStream << buff; |
1039 | 1039 | ||
1040 | string sql = ""; | 1040 | string sql = ""; |
1041 | - shared_ptr<DmpVectorThinLayer> pVectorThinLayer = nullptr; | 1041 | + shared_ptr<DmpVectorVacuateLayer> pVectorVacuateLayer = nullptr; |
1042 | 1042 | ||
1043 | shared_ptr<DataCollection> data(new DataCollection()); | 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,7 +1051,7 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ | ||
1051 | sql = GetRegionQuerySQL(layer, pExtent.get(), format("%d", layer->crs().srid()), strRegionLayerNameDefs, strRegionColDefs, strLayerDef); | 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 | string sqlLog = sql; | 1056 | string sqlLog = sql; |
1057 | DmpMapServerUtil::toXmlString(sqlLog); | 1057 | DmpMapServerUtil::toXmlString(sqlLog); |
@@ -1064,9 +1064,9 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ | @@ -1064,9 +1064,9 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ | ||
1064 | 1064 | ||
1065 | string tableName = layer->name(); | 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 | if (tableName.length() > 32) | 1072 | if (tableName.length() > 32) |
@@ -1080,13 +1080,13 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ | @@ -1080,13 +1080,13 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ | ||
1080 | { | 1080 | { |
1081 | 1081 | ||
1082 | shared_ptr<DmpPgsql> pPgsqlConn = nullptr; | 1082 | shared_ptr<DmpPgsql> pPgsqlConn = nullptr; |
1083 | - if (pVectorThinLayer == nullptr) | 1083 | + if (pVectorVacuateLayer == nullptr) |
1084 | { | 1084 | { |
1085 | pPgsqlConn = DmpPgsqlSourcePools::get_instance()->GetPgsqlConn(layer->source()); | 1085 | pPgsqlConn = DmpPgsqlSourcePools::get_instance()->GetPgsqlConn(layer->source()); |
1086 | } | 1086 | } |
1087 | else | 1087 | else |
1088 | { | 1088 | { |
1089 | - pPgsqlConn = DmpPgsqlSourcePools::get_instance()->GetDefaultPgsqlConn(); | 1089 | + pPgsqlConn = DmpPgsqlSourcePools::get_instance()->GetPgsqlConn(pVectorVacuateLayer->connectStr()); |
1090 | } | 1090 | } |
1091 | 1091 | ||
1092 | if (pPgsqlConn == nullptr) | 1092 | if (pPgsqlConn == nullptr) |
@@ -1106,7 +1106,7 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ | @@ -1106,7 +1106,7 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ | ||
1106 | sprintf(buff,"<log>draw success</log>"); | 1106 | sprintf(buff,"<log>draw success</log>"); |
1107 | outputStream << buff; | 1107 | outputStream << buff; |
1108 | } | 1108 | } |
1109 | - else if (pVectorThinLayer != nullptr) | 1109 | + else if (pVectorVacuateLayer != nullptr) |
1110 | { | 1110 | { |
1111 | /*shared_ptr<DmpPgsql> pPgsqlConn1 = DmpPgsqlSourcePools::get_instance()->GetPgsqlConn(layer->source()); | 1111 | /*shared_ptr<DmpPgsql> pPgsqlConn1 = DmpPgsqlSourcePools::get_instance()->GetPgsqlConn(layer->source()); |
1112 | sprintf(buff,"<log>从抽稀图层获取数据%s</log>", pMapLayerThinning->m_tableName.c_str()); | 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,7 +1231,7 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ | ||
1231 | double cost, cost2; | 1231 | double cost, cost2; |
1232 | 1232 | ||
1233 | string sql = ""; | 1233 | string sql = ""; |
1234 | - shared_ptr<DmpVectorThinLayer> pVectorThinLayer = nullptr; | 1234 | + shared_ptr<DmpVectorVacuateLayer> pVectorVacuateLayer = nullptr; |
1235 | 1235 | ||
1236 | bool renderHeat = false; | 1236 | bool renderHeat = false; |
1237 | shared_ptr<DataCollection> data(new DataCollection()); | 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,7 +1245,7 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ | ||
1245 | sql = GetRegionQuerySQL(layer, pExtent.get(), format("%d", layer->crs().srid()), strRegionLayerNameDefs, strRegionColDefs, strLayerDef); | 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 | // printf( "%s\r\n", sql.c_str()); | 1250 | // printf( "%s\r\n", sql.c_str()); |
1251 | // this->GetDrawSQL(layer, pExtent.get(), strLayerDef); //sql语句中使用 ::box | 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,9 +1254,9 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ | ||
1254 | 1254 | ||
1255 | string tableName = layer->name(); | 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 | if (tableName.length() > 32) | 1262 | if (tableName.length() > 32) |
@@ -1270,13 +1270,13 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ | @@ -1270,13 +1270,13 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ | ||
1270 | { | 1270 | { |
1271 | 1271 | ||
1272 | shared_ptr<DmpPgsql> pPgsqlConn = nullptr; | 1272 | shared_ptr<DmpPgsql> pPgsqlConn = nullptr; |
1273 | - if (pVectorThinLayer == nullptr) | 1273 | + if (pVectorVacuateLayer == nullptr) |
1274 | { | 1274 | { |
1275 | pPgsqlConn = DmpPgsqlSourcePools::get_instance()->GetPgsqlConn(layer->source()); | 1275 | pPgsqlConn = DmpPgsqlSourcePools::get_instance()->GetPgsqlConn(layer->source()); |
1276 | } | 1276 | } |
1277 | else | 1277 | else |
1278 | { | 1278 | { |
1279 | - pPgsqlConn = DmpPgsqlSourcePools::get_instance()->GetDefaultPgsqlConn(); | 1279 | + pPgsqlConn = DmpPgsqlSourcePools::get_instance()->GetPgsqlConn(pVectorVacuateLayer->connectStr()); |
1280 | } | 1280 | } |
1281 | 1281 | ||
1282 | if (pPgsqlConn == nullptr) | 1282 | if (pPgsqlConn == nullptr) |
@@ -1300,7 +1300,7 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ | @@ -1300,7 +1300,7 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ | ||
1300 | this->DrawSimpleData(data.get(), layer->GetRenderer30().get(), pClsSurfThis); | 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 | shared_ptr<DmpPgsql> pPgsqlConn1 = DmpPgsqlSourcePools::get_instance()->GetPgsqlConn(layer->source()); | 1305 | shared_ptr<DmpPgsql> pPgsqlConn1 = DmpPgsqlSourcePools::get_instance()->GetPgsqlConn(layer->source()); |
1306 | 1306 |
@@ -22,7 +22,7 @@ | @@ -22,7 +22,7 @@ | ||
22 | #include "clsUtil.h" | 22 | #include "clsUtil.h" |
23 | #include "DataCollection.h" | 23 | #include "DataCollection.h" |
24 | #include "dmpvectorlayer.h" | 24 | #include "dmpvectorlayer.h" |
25 | -#include "dmpvectorthinlayer.h" | 25 | +#include "dmpvectorvacuatelayer.h" |
26 | #include "dmprasterbuffer.h" | 26 | #include "dmprasterbuffer.h" |
27 | #include "dmpproject.h" | 27 | #include "dmpproject.h" |
28 | #include "dmppgsqlsourcepools.h" | 28 | #include "dmppgsqlsourcepools.h" |
@@ -32,8 +32,6 @@ using namespace DmapCore_30; | @@ -32,8 +32,6 @@ using namespace DmapCore_30; | ||
32 | using namespace mapserver; | 32 | using namespace mapserver; |
33 | namespace DmpWms | 33 | namespace DmpWms |
34 | { | 34 | { |
35 | - | ||
36 | - | ||
37 | class DmpWmsRenderer | 35 | class DmpWmsRenderer |
38 | { | 36 | { |
39 | public: | 37 | public: |
@@ -49,7 +47,7 @@ namespace DmpWms | @@ -49,7 +47,7 @@ namespace DmpWms | ||
49 | bool GetMapLegend( std::stringstream& ab, shared_ptr<legendParamater> pLegendParamater); | 47 | bool GetMapLegend( std::stringstream& ab, shared_ptr<legendParamater> pLegendParamater); |
50 | bool GetMapLegend( shared_ptr<legendParamater> pLegendParamater, clsCrSurf* pClsSurf); | 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 | string GetDrawSQL(DmpVectorLayer* layer, Rect* pRect,const char* layerdef = nullptr); | 51 | string GetDrawSQL(DmpVectorLayer* layer, Rect* pRect,const char* layerdef = nullptr); |
54 | string GetDrawSQLAll(DmpVectorLayer* layer); | 52 | string GetDrawSQLAll(DmpVectorLayer* layer); |
55 | string GetDrawSQLAllOrderby(DmpVectorLayer* layer); | 53 | string GetDrawSQLAllOrderby(DmpVectorLayer* layer); |
请
注册
或
登录
后发表评论