正在显示
37 个修改的文件
包含
665 行增加
和
585 行删除
... | ... | @@ -303,6 +303,18 @@ bool DmpProject::initVectorLayerVacuate(std::function<std::string(const std::str |
303 | 303 | return false; |
304 | 304 | } |
305 | 305 | |
306 | +std::shared_ptr<DmpRectangle> DmpProject::GetExtent() | |
307 | +{ | |
308 | + shared_ptr<DmpRectangle> rect(new DmpRectangle()); | |
309 | + for (size_t i = 0; i < this->vectorLayers_.size(); i++) | |
310 | + { | |
311 | + DmpMapLayer* layer = this->vectorLayers_.at(i); | |
312 | + DmpRectangle layerExtent = layer->extent(); | |
313 | + rect->merge(layerExtent); | |
314 | + } | |
315 | + return rect; | |
316 | +} | |
317 | + | |
306 | 318 | bool DmpProject::initVectorLayerVacuate(DmpProject* project) |
307 | 319 | { |
308 | 320 | if(!project) return false; | ... | ... |
... | ... | @@ -16,6 +16,7 @@ |
16 | 16 | #include <boost/filesystem.hpp> |
17 | 17 | #include "dmpcoordinatereferencesystem.h" |
18 | 18 | #include "dmpmaplayer.h" |
19 | +#include <memory> | |
19 | 20 | |
20 | 21 | //配图文件 |
21 | 22 | class CORE_EXPORT DmpProject |
... | ... | @@ -37,6 +38,7 @@ class CORE_EXPORT DmpProject |
37 | 38 | std::vector<DmpMapLayer*> vectorLayers() const; |
38 | 39 | DmpMapLayer* getLayer(const std::string &layerName) const; |
39 | 40 | DmpMapLayer* getLayer()const; |
41 | + std::shared_ptr<DmpRectangle> GetExtent(); | |
40 | 42 | private: |
41 | 43 | static DmpProject *project_; |
42 | 44 | std::string projectName_; | ... | ... |
... | ... | @@ -215,8 +215,8 @@ void DmpVectorLayer::setDataSource(const std::string &dataSource, const std::str |
215 | 215 | } |
216 | 216 | |
217 | 217 | DmpWkbTypes::GeometryType DmpVectorLayer::GeometryType() const |
218 | -{ | |
219 | - return DmpWkbTypes::GeometryType(wkbType_); | |
218 | +{ | |
219 | + return DmpWkbTypes::geometryType(wkbType_); | |
220 | 220 | } |
221 | 221 | |
222 | 222 | bool DmpVectorLayer::setDataProvider(const std::string &provider) | ... | ... |
... | ... | @@ -50,6 +50,7 @@ class CORE_EXPORT DmpVectorLayer : public DmpMapLayer |
50 | 50 | void setRenderer(DmpFeatureRenderer *renderer); |
51 | 51 | void setDataSource(const std::string &dataSource, const std::string &baseName, const std::string &provider, bool loadDefaultStyleFlag); |
52 | 52 | DmpWkbTypes::GeometryType GeometryType() const; |
53 | + DmpWkbTypes::Type GeomWkbType() const{ return wkbType_;} | |
53 | 54 | bool setDataProvider(std::string const &provider); |
54 | 55 | |
55 | 56 | |
... | ... | @@ -65,6 +66,8 @@ class CORE_EXPORT DmpVectorLayer : public DmpMapLayer |
65 | 66 | std::string srid(){return srid_;} |
66 | 67 | size_t featurecount(){return featurecount_;} |
67 | 68 | bool IsInit(){return isinit_;} |
69 | + | |
70 | + void setSrid(string srid){ srid_ = srid;} | |
68 | 71 | private: |
69 | 72 | bool readExtentFromXml_; |
70 | 73 | DmpWkbTypes::Type wkbType_ = DmpWkbTypes::Unknown; | ... | ... |
... | ... | @@ -33,6 +33,24 @@ void DmpRectangle::normalize() |
33 | 33 | } |
34 | 34 | } |
35 | 35 | |
36 | +void DmpRectangle::merge(DmpRectangle &rectangle) | |
37 | +{ | |
38 | + if(xmin_ == 0 && ymin_ ==0 && xmax_ ==0 && ymax_ ==0 ) | |
39 | + { | |
40 | + this->xmin_ = rectangle.xmin(); | |
41 | + this->ymin_ = rectangle.ymin(); | |
42 | + this->xmax_ = rectangle.xmax(); | |
43 | + this->ymax_ = rectangle.ymax(); | |
44 | + } | |
45 | + else | |
46 | + { | |
47 | + if(rectangle.xmin() < this->xmin_ ) this->xmin_ = rectangle.xmin(); | |
48 | + if(rectangle.ymin() < this->ymin_ ) this->ymin_ = rectangle.ymin(); | |
49 | + if(rectangle.xmax() > this->xmax_ ) this->xmax_ = rectangle.xmax(); | |
50 | + if(rectangle.ymax() < this->ymax_ ) this->ymax_ = rectangle.ymax(); | |
51 | + } | |
52 | +} | |
53 | + | |
36 | 54 | |
37 | 55 | bool DmpRectangle::isNull() |
38 | 56 | { | ... | ... |
... | ... | @@ -38,6 +38,13 @@ class CORE_EXPORT DmpRectangle |
38 | 38 | double width() const { return xmax_ - xmin_; } |
39 | 39 | double height() const { return ymax_ - ymin_; } |
40 | 40 | |
41 | + void setXmax(double xmax){xmax_ = xmax; } | |
42 | + void setYmax(double ymax){ymax_ = ymax; } | |
43 | + void setXmin(double xmin){xmin_ = xmin; } | |
44 | + void setYmin(double ymin){ymin_ = ymin; } | |
45 | + | |
46 | + void merge(DmpRectangle &rectangle); | |
47 | + | |
41 | 48 | private: |
42 | 49 | double xmin_ = 0.0; |
43 | 50 | double ymin_ = 0.0; | ... | ... |
... | ... | @@ -12,7 +12,7 @@ namespace DmapCore_30 |
12 | 12 | |
13 | 13 | SimpleLineSymbol::SimpleLineSymbol() |
14 | 14 | { |
15 | - m_iAntialiasing = CAIRO_ANTIALIAS_DEFAULT; | |
15 | + m_iAntialiasing = CAIRO_ANTIALIAS_BEST; | |
16 | 16 | m_iColor = clsUtil::RandomColor(); |
17 | 17 | clsUtil::ToCairoColor(m_iColor, r, g, b, a); |
18 | 18 | //m_pClsSurfBackup = NULL; | ... | ... |
... | ... | @@ -12,7 +12,7 @@ namespace DmapCore_30 |
12 | 12 | { |
13 | 13 | SimpleMarkerSymbol::SimpleMarkerSymbol() |
14 | 14 | { |
15 | - m_iAntialiasing = CAIRO_ANTIALIAS_DEFAULT; | |
15 | + m_iAntialiasing = CAIRO_ANTIALIAS_BEST; | |
16 | 16 | m_bBoundary = true; |
17 | 17 | m_iColor = clsUtil::RandomColor(); |
18 | 18 | clsUtil::ToCairoColor(m_iColor, r, g, b, a); | ... | ... |
... | ... | @@ -12,7 +12,7 @@ namespace DmapCore_30 |
12 | 12 | { |
13 | 13 | SimplePolygonSymbol::SimplePolygonSymbol() |
14 | 14 | { |
15 | - m_iAntialiasing = CAIRO_ANTIALIAS_DEFAULT; | |
15 | + m_iAntialiasing = CAIRO_ANTIALIAS_BEST; | |
16 | 16 | m_iBackgroundColor = clsUtil::RandomColor(); |
17 | 17 | clsUtil::ToCairoColor(m_iBackgroundColor, r, g, b, a); |
18 | 18 | m_iLineType = 0; | ... | ... |
... | ... | @@ -316,16 +316,21 @@ namespace DmapCore_30 |
316 | 316 | x += m_dXdis; |
317 | 317 | y += m_dYdis; |
318 | 318 | cairo_t* cr = pClsCS->m_pCr; |
319 | - //cairo_font_options_set_antialias(cfo, CAIRO_ANTIALIAS_GRAY); | |
319 | + //cairo_font_options_set_antialias(cr, CAIRO_ANTIALIAS_BEST); | |
320 | 320 | cairo_text_extents(cr, sUTF8, m_pCrExtents); |
321 | 321 | int iX = (int)x; int iY = (int)y; |
322 | 322 | int iTextW = (int)(m_pCrExtents->x_advance); int iTextH = (int)(m_pCrExtents->height); |
323 | 323 | //int surf_w = pClsCS->m_iW; int surf_h = pClsCS->m_iH; |
324 | + | |
325 | + //文字被截取 | |
326 | + if(iX < -30 || (iX + iTextW) > pClsCS->m_iW + 30 || (iY - iTextH ) < -15 || iY > pClsCS->m_iH + 15) | |
327 | + { | |
328 | + return false; | |
329 | + } | |
324 | 330 | |
325 | 331 | /* |
326 | 332 | 文字避让部分 |
327 | 333 | */ |
328 | - | |
329 | 334 | ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
330 | 335 | int xFrom = iX / gridsize; |
331 | 336 | int xTo = (iX + iTextW) / gridsize; |
... | ... | @@ -371,6 +376,10 @@ namespace DmapCore_30 |
371 | 376 | //if (pFlag[iFlagW*i + j]) return false; |
372 | 377 | } |
373 | 378 | } |
379 | + | |
380 | + //文字截取部分 | |
381 | + | |
382 | + | |
374 | 383 | ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
375 | 384 | |
376 | 385 | ... | ... |
... | ... | @@ -8,7 +8,7 @@ namespace DmapCore_30 |
8 | 8 | { |
9 | 9 | m_pSurf = surface; |
10 | 10 | m_pCr = cairo_create(m_pSurf); |
11 | - //cairo_set_antialias(m_pCr,cairo_antialias_t::CAIRO_ANTIALIAS_BEST); | |
11 | + cairo_set_antialias(m_pCr,cairo_antialias_t::CAIRO_ANTIALIAS_BEST); | |
12 | 12 | m_iN = 1; |
13 | 13 | m_iW = cairo_image_surface_get_width(surface); |
14 | 14 | m_iH = cairo_image_surface_get_height(surface); | ... | ... |
... | ... | @@ -287,7 +287,7 @@ namespace DmapCore_30 |
287 | 287 | //CAIRO_ANTIALIAS_FAST, |
288 | 288 | // CAIRO_ANTIALIAS_GOOD, |
289 | 289 | // CAIRO_ANTIALIAS_BEST |
290 | - cairo_set_antialias(cr,CAIRO_ANTIALIAS_FAST); | |
290 | + // cairo_set_antialias(cr,CAIRO_ANTIALIAS_FAST); | |
291 | 291 | return true; |
292 | 292 | switch (iAntialias) |
293 | 293 | { | ... | ... |
... | ... | @@ -30,7 +30,7 @@ namespace DmapCore_30 |
30 | 30 | |
31 | 31 | bool legendParamater::next(char * title) |
32 | 32 | { |
33 | - if(index/row_maxsize> current_Col_Index) | |
33 | + if( row_maxsize >0 && index/row_maxsize > current_Col_Index) | |
34 | 34 | { |
35 | 35 | current_Col_Index ++; |
36 | 36 | pixXIndex = 10 + (current_Col_Index *100); | ... | ... |
... | ... | @@ -44,19 +44,19 @@ DmpServerManager::~DmpServerManager() |
44 | 44 | delete mapProject; |
45 | 45 | mapProject = nullptr; |
46 | 46 | } |
47 | - } | |
47 | + } | |
48 | 48 | projects_.clear(); |
49 | 49 | } |
50 | 50 | |
51 | 51 | void DmpServerManager::init(const boost::filesystem::path &modulePath) |
52 | 52 | { |
53 | 53 | serverRegistry_->init(modulePath); |
54 | - if(!loadServices()) | |
54 | + if (!loadServices()) | |
55 | 55 | { |
56 | 56 | std::cout << "加载服务失败!" << std::endl; |
57 | 57 | LOGGER_ERROR("加载服务失败!"); |
58 | 58 | } |
59 | - //LoadDmpServices(); | |
59 | + // LoadDmpServices(); | |
60 | 60 | } |
61 | 61 | |
62 | 62 | std::string DmpServerManager::getCapabilities() |
... | ... | @@ -106,9 +106,9 @@ bool DmpServerManager::removeProject(const std::string &serviceName) |
106 | 106 | return true; |
107 | 107 | } |
108 | 108 | |
109 | -bool DmpServerManager::publish(const std::string& serverName, const std::string& serviceName, const std::string& title, int capabilities, const std::string& projectData) | |
109 | +bool DmpServerManager::publish(const std::string &serverName, const std::string &serviceName, const std::string &title, int capabilities, const std::string &projectData) | |
110 | 110 | { |
111 | - //project | |
111 | + // project | |
112 | 112 | std::string projData; |
113 | 113 | if (!DmpServerUtils::Base64Decode(projectData, &projData)) |
114 | 114 | { |
... | ... | @@ -122,9 +122,7 @@ bool DmpServerManager::publish(const std::string& serverName, const std::string& |
122 | 122 | } |
123 | 123 | |
124 | 124 | project->initVectorLayerVacuate([](const std::string &tableguid) |
125 | - { | |
126 | - return DmpHttp::get(DmpServerConfig::Instance()->getMetaUrl() + URL_VACUATE + tableguid); | |
127 | - }); | |
125 | + { return DmpHttp::get(DmpServerConfig::Instance()->getMetaUrl() + URL_VACUATE + tableguid); }); | |
128 | 126 | |
129 | 127 | if (!serverRegistry_->getServer(serverName)->publish(serviceName, title, capabilities, *project)) |
130 | 128 | { |
... | ... | @@ -132,7 +130,7 @@ bool DmpServerManager::publish(const std::string& serverName, const std::string& |
132 | 130 | return false; |
133 | 131 | } |
134 | 132 | projects_[serviceName] = project; |
135 | - | |
133 | + | |
136 | 134 | return true; |
137 | 135 | } |
138 | 136 | |
... | ... | @@ -159,34 +157,44 @@ bool DmpServerManager::stopService(const std::string &serverName, const std::str |
159 | 157 | } |
160 | 158 | bool DmpServerManager::loadServices() |
161 | 159 | { |
162 | - boost::property_tree::ptree pt,ptList; | |
163 | - std::string conn = DmpServerConfig::Instance()->getMetaUrl(); | |
164 | - const std::string url= conn + URI_RELOAD; | |
165 | - std::string strContent=DmpHttp::get(url); | |
166 | - if(strContent.length()==0) | |
167 | - { | |
168 | - return false; | |
169 | - } | |
170 | - std::stringstream ssData; | |
171 | - ssData<<strContent.c_str(); | |
172 | - boost::property_tree::read_json(ssData, pt); | |
173 | - int iCount = std::atoi(pt.get<std::string>("data.count").c_str()); | |
174 | - if(iCount>0) | |
160 | + std::string strContent; | |
161 | + try | |
175 | 162 | { |
176 | - ptList=pt.get_child("data.list"); | |
177 | - for (auto& e : ptList) | |
163 | + boost::property_tree::ptree pt, ptList; | |
164 | + std::string conn = DmpServerConfig::Instance()->getMetaUrl(); | |
165 | + const std::string url = conn + URI_RELOAD; | |
166 | + strContent = DmpHttp::get(url); | |
167 | + if (strContent.length() == 0) | |
178 | 168 | { |
179 | - std::string name = e.second.get<std::string>("name"); | |
180 | - std::string title = e.second.get<std::string>("title"); | |
181 | - std::string type = e.second.get<std::string>("type"); | |
182 | - int capabilities =e.second.get<int>("capabilities"); | |
183 | - std::string project = e.second.get<std::string>("project"); | |
184 | - this->initServices(type,name,title,capabilities,project); | |
169 | + return false; | |
185 | 170 | } |
171 | + std::stringstream ssData; | |
172 | + ssData << strContent.c_str(); | |
173 | + boost::property_tree::read_json(ssData, pt); | |
174 | + int iCount = std::atoi(pt.get<std::string>("data.count").c_str()); | |
175 | + if (iCount > 0) | |
176 | + { | |
177 | + ptList = pt.get_child("data.list"); | |
178 | + for (auto &e : ptList) | |
179 | + { | |
180 | + std::string name = e.second.get<std::string>("name"); | |
181 | + std::string title = e.second.get<std::string>("title"); | |
182 | + std::string type = e.second.get<std::string>("type"); | |
183 | + int capabilities = e.second.get<int>("capabilities"); | |
184 | + std::string project = e.second.get<std::string>("project"); | |
185 | + this->initServices(type, name, title, capabilities, project); | |
186 | + } | |
187 | + } | |
188 | + } | |
189 | + catch(const std::exception& e) | |
190 | + { | |
191 | + std::cerr << e.what() << strContent.c_str() << '\n'; | |
192 | + return false; | |
186 | 193 | } |
194 | + | |
187 | 195 | return true; |
188 | 196 | } |
189 | -bool DmpServerManager::initServices(const std::string& serverName, const std::string& serviceName, const std::string& title, int capabilities, const std::string& projectData) | |
197 | +bool DmpServerManager::initServices(const std::string &serverName, const std::string &serviceName, const std::string &title, int capabilities, const std::string &projectData) | |
190 | 198 | { |
191 | 199 | // project |
192 | 200 | std::string projData; |
... | ... | @@ -202,9 +210,7 @@ bool DmpServerManager::initServices(const std::string& serverName, const std::st |
202 | 210 | } |
203 | 211 | |
204 | 212 | project->initVectorLayerVacuate([](const std::string &tableguid) |
205 | - { | |
206 | - return DmpHttp::get(DmpServerConfig::Instance()->getMetaUrl() + URL_VACUATE + tableguid); | |
207 | - }); | |
213 | + { return DmpHttp::get(DmpServerConfig::Instance()->getMetaUrl() + URL_VACUATE + tableguid); }); | |
208 | 214 | |
209 | 215 | if (!serverRegistry_->getServer(serverName)->publish(serviceName, title, capabilities, *project)) |
210 | 216 | { | ... | ... |
... | ... | @@ -20,6 +20,7 @@ SET (MAPSERVER_SRCS |
20 | 20 | wms/dmpwmsparameters.cpp |
21 | 21 | wms/dmpwmsgetcapabilities.cpp |
22 | 22 | wms/dmpwmsgetmap.cpp |
23 | + wms/dmpwmsgetprint.cpp | |
23 | 24 | wms/dmpwmsserviceinfo.cpp |
24 | 25 | wms/dmpwmsgetfeatureinfo.cpp |
25 | 26 | wms/print/dmpmapprint.cpp |
... | ... | @@ -55,6 +56,7 @@ SET (MAPSERVER_HDRS |
55 | 56 | wms/dmpwmsparameters.h |
56 | 57 | wms/dmpwmsgetcapabilities.h |
57 | 58 | wms/dmpwmsgetmap.h |
59 | + wms/dmpwmsgetprint.h | |
58 | 60 | wms/dmpwmsserviceinfo.h |
59 | 61 | wms/dmpwmsgetfeatureinfo.h |
60 | 62 | wms/print/dmpmapprint.h | ... | ... |
... | ... | @@ -18,6 +18,23 @@ using boost::asio::ip::tcp; |
18 | 18 | namespace mapserver |
19 | 19 | { |
20 | 20 | |
21 | + void DmpMapServerUtil::initVectorLayerSrid(shared_ptr<DmpPgsql> pPgsqlConn,DmpVectorLayer* layer) | |
22 | + { | |
23 | + if(layer->srid().empty()) | |
24 | + { | |
25 | + string name = layer->name(); | |
26 | + string sql = "select t.f_geometry_column shapeField, t.type ,f_table_schema,t.srid from public.geometry_columns t where lower( t.f_table_name) = lower('"+ name +"');"; | |
27 | + if(pPgsqlConn->ExecWait(sql)) | |
28 | + { | |
29 | + string geom = pPgsqlConn->getString(0); | |
30 | + string value = pPgsqlConn->getString( 1); | |
31 | + string strSchema = pPgsqlConn->getString(2); | |
32 | + string srid = pPgsqlConn->getString(3); | |
33 | + layer->setSrid(srid); | |
34 | + } | |
35 | + } | |
36 | + } | |
37 | + | |
21 | 38 | void DmpMapServerUtil::responseGml(shared_ptr<DmpPgsql> pPgsqlConn, std::string &responseData, const string &layerName, const std::string &srid) |
22 | 39 | { |
23 | 40 | ... | ... |
... | ... | @@ -13,13 +13,16 @@ |
13 | 13 | #include <string> |
14 | 14 | #include <memory> |
15 | 15 | #include "dmppgsqlsourcepools.h" |
16 | - | |
16 | +#include "dmpproject.h" | |
17 | +#include "dmpvectorlayer.h" | |
17 | 18 | |
18 | 19 | namespace mapserver |
19 | 20 | { |
20 | 21 | class DmpMapServerUtil |
21 | 22 | { |
22 | 23 | public: |
24 | + static void initVectorLayerSrid(shared_ptr<DmpPgsql> pPgsqlConn,DmpVectorLayer* layer); | |
25 | + | |
23 | 26 | static void responseGeojson(shared_ptr<DmpPgsql> pPgsqlConn, std::string &responseData,const string& layerName,const std::string &srid); |
24 | 27 | static void responseGml(shared_ptr<DmpPgsql> pPgsqlConn, std::string &responseData,const string& layerName,const std::string &srid); |
25 | 28 | static void toXmlString(std::string &s); | ... | ... |
... | ... | @@ -140,7 +140,7 @@ namespace DmpMapping |
140 | 140 | bool loadProjectService(const DmpServerContext &context,ProjectMap& vectorMappingProjects) |
141 | 141 | { |
142 | 142 | const char *data = (char *)(context.request()->GetData()); |
143 | - if(data== nullptr || *data == '\0') | |
143 | + if(data== nullptr || *data == '\0' || context.request()->method() != DmpServerRequest::Method::POST_METHOD) | |
144 | 144 | { |
145 | 145 | LOGGER_ERROR("post 参数错误"); |
146 | 146 | context.response()->writeJson("{\"status\":\"false\",\"message\":\"post 参数错误!\"}"); |
... | ... | @@ -250,7 +250,7 @@ namespace DmpMapping |
250 | 250 | bool editService(const DmpServerContext &context,ProjectMap& vectorMappingProjects) |
251 | 251 | { |
252 | 252 | const char *data = (char *)(context.request()->GetData()); |
253 | - if(data== nullptr || *data == '\0') | |
253 | + if(data== nullptr || *data == '\0' || context.request()->method() != DmpServerRequest::Method::POST_METHOD) | |
254 | 254 | { |
255 | 255 | LOGGER_ERROR("post 参数错误"); |
256 | 256 | context.response()->writeJson("{\"status\":\"false\",\"message\":\"post 参数错误!\"}"); | ... | ... |
... | ... | @@ -56,6 +56,11 @@ namespace DmpWfs |
56 | 56 | { |
57 | 57 | writeGetFeature(context,params, project); |
58 | 58 | } |
59 | + else | |
60 | + { | |
61 | + std::string responseData = "{\"result\":\"false\",\"message\":\"WFS 未实现" + request + "接口\"}"; | |
62 | + context.response()->writeJson(responseData); | |
63 | + } | |
59 | 64 | } |
60 | 65 | } |
61 | 66 | ... | ... |
... | ... | @@ -23,7 +23,31 @@ namespace DmpWfs |
23 | 23 | const DmpProject *project, |
24 | 24 | bool projectSettings) |
25 | 25 | { |
26 | - WfsGetFeature(context, params, project, projectSettings); | |
26 | + std::string errorinfo = WfsGetFeature(context, params, project, projectSettings); | |
27 | + if(!errorinfo.empty()) | |
28 | + { | |
29 | + DmpWfsParameters::Format resultType = params.ResultType(); | |
30 | + if (resultType == DmpWfsParameters::Format::GeoJson) | |
31 | + { | |
32 | + std::string responseData; | |
33 | + responseData = "{\"result\":\"false\",\"message\":\"" + errorinfo + "\"}"; | |
34 | + context.response()->writeJson(responseData); | |
35 | + } | |
36 | + else | |
37 | + { | |
38 | + boost::property_tree::ptree ptreeDoc; | |
39 | + boost::property_tree::ptree ptreeRoot; | |
40 | + ptreeRoot.add<bool>("result", false); | |
41 | + ptreeRoot.add<std::string>("message", errorinfo); | |
42 | + ptreeDoc.add_child("WfsGetfeatureResponse",ptreeRoot); | |
43 | + std::stringstream stream; | |
44 | + write_xml(stream, ptreeDoc); | |
45 | + std::string responseData = stream.str(); | |
46 | + context.response()->removeHeader("Content-Type"); | |
47 | + context.response()->setHeader("Content-Type", "text/xml;charset=utf-8"); | |
48 | + context.response()->write(responseData); | |
49 | + } | |
50 | + } | |
27 | 51 | } |
28 | 52 | |
29 | 53 | std::string WfsGetFeature(const DmpServerContext &context, const DmpWfsParameters ¶ms, | ... | ... |
... | ... | @@ -21,6 +21,7 @@ |
21 | 21 | #include "dmpwmsgetmap.h" |
22 | 22 | #include "dmpwmsserviceinfo.h" |
23 | 23 | #include "dmpwmsgetfeatureinfo.h" |
24 | +#include "dmpwmsgetprint.h" | |
24 | 25 | using namespace std; |
25 | 26 | |
26 | 27 | namespace DmpWms |
... | ... | @@ -40,6 +41,7 @@ namespace DmpWms |
40 | 41 | const DmpWmsParameters params(context.request()->serverParameters()); |
41 | 42 | const DmpProject* project = context.serverProject()->project(); |
42 | 43 | const std::string request = params.Request(); |
44 | + // printf("%s\r\n", request.c_str()); | |
43 | 45 | if (request.empty()) |
44 | 46 | { |
45 | 47 | context.response()->writeHtml("wms,Operation is null"); |
... | ... | @@ -66,12 +68,21 @@ namespace DmpWms |
66 | 68 | } |
67 | 69 | else if(boost::iequals(request, "getserviceinfo")) |
68 | 70 | { |
69 | - writeGetServiceInfo(context,params, project); | |
71 | + writeGetServiceInfo(context,params, project); | |
70 | 72 | } |
71 | - else if(request == "getlegendgraphic") | |
73 | + else if(boost::iequals(request, "getlegendgraphic")) | |
72 | 74 | { |
73 | 75 | |
74 | 76 | } |
77 | + else if(boost::iequals(request, "getprint")) | |
78 | + { | |
79 | + writeGetPrint(context,params, project); | |
80 | + } | |
81 | + else | |
82 | + { | |
83 | + std::string responseData = "{\"result\":\"false\",\"message\":\"WMS 未实现" + request + "接口\"}"; | |
84 | + context.response()->writeJson(responseData); | |
85 | + } | |
75 | 86 | } |
76 | 87 | } |
77 | 88 | ... | ... |
1 | +/************************************************************************** | |
2 | +* file: dmpwmsgetprint.cpp | |
3 | + | |
4 | +* Author: qingxiongf | |
5 | +* Date: 2022-02-10 14:18:07 | |
6 | +* Email: qingxiongf@chinadci.com | |
7 | +* copyright: 广州城市信息研究所有限公司 | |
8 | +***************************************************************************/ | |
9 | +#include "dmpwmsgetprint.h" | |
10 | +#include "print/dmpmapprint.h" | |
11 | +#include "dmpwmsrenderer.h" | |
12 | +#include "dmpserverresponse.h" | |
13 | +#include "dmpserverrequest.h" | |
14 | +#include "dmpserverproject.h" | |
15 | +#include <map> | |
16 | +#include <memory> | |
17 | +namespace DmpWms | |
18 | +{ | |
19 | + void writeGetPrint(const DmpServerContext &context,const DmpWmsParameters& params, | |
20 | + const DmpProject* project, | |
21 | + bool projectSettings ) | |
22 | + { | |
23 | + DmpWmsParameters::Format outformat = params.ResFormat(); | |
24 | + DmpMapPrint mapPrint(outformat); | |
25 | + | |
26 | + std::string responseData; | |
27 | + | |
28 | + std::string name = context.serverProject()->name(); | |
29 | + std::string title = context.serverProject()->title(); | |
30 | + std::string boxx = params.BBox(); | |
31 | + std::string printTemp = params.printTemp(); | |
32 | + | |
33 | + if(mapPrint.getPrintTempFile(responseData,project,printTemp.c_str(),boxx.c_str())) | |
34 | + { | |
35 | + if(outformat == DmpWmsParameters::Format::PDF) | |
36 | + { | |
37 | + context.response()->setHeader("Content-Type", "application/pdf"); | |
38 | + } | |
39 | + else if(outformat == DmpWmsParameters::Format::SVG) | |
40 | + { | |
41 | + context.response()->setHeader("Content-Type", "image/svg"); | |
42 | + } | |
43 | + else | |
44 | + { | |
45 | + context.response()->setHeader("Content-Type", "image/png"); | |
46 | + } | |
47 | + } | |
48 | + else | |
49 | + { | |
50 | + context.response()->setHeader("Content-Type", "text/xml"); | |
51 | + } | |
52 | + | |
53 | + context.response()->write(responseData); | |
54 | + } | |
55 | +} | |
\ No newline at end of file | ... | ... |
1 | +/************************************************************************** | |
2 | +* file: dmpwmsgetprint.h | |
3 | + | |
4 | +* Author: qingxiongf | |
5 | +* Date: 2022-02-10 14:17:58 | |
6 | +* Email: qingxiongf@chinadci.com | |
7 | +* copyright: 广州城市信息研究所有限公司 | |
8 | +***************************************************************************/ | |
9 | + | |
10 | +#ifndef __dmpwmsgetprint_h__ | |
11 | +#define __dmpwmsgetprint_h__ | |
12 | + | |
13 | + | |
14 | +#include <boost/property_tree/ptree.hpp> | |
15 | +#include <boost/property_tree/xml_parser.hpp> | |
16 | +#include <boost/typeof/typeof.hpp> | |
17 | +#include <memory> | |
18 | +#include <vector> | |
19 | +#include "dmpproject.h" | |
20 | +#include "dmpwmsparameters.h" | |
21 | +#include "dmpservercontext.h" | |
22 | + | |
23 | +namespace DmpWms | |
24 | +{ | |
25 | + void writeGetPrint(const DmpServerContext &context,const DmpWmsParameters& params, | |
26 | + const DmpProject* project, | |
27 | + bool projectSettings = false ); | |
28 | +} | |
29 | + | |
30 | +#endif // __dmpwmsgetprint_h__ | ... | ... |
... | ... | @@ -169,6 +169,13 @@ namespace DmpWms |
169 | 169 | return value; |
170 | 170 | } |
171 | 171 | |
172 | + std::string DmpWmsParameters::printTemp() const | |
173 | + { | |
174 | + std::string value = ""; | |
175 | + GetStringParameter("PRINTTEMP",value); | |
176 | + return value; | |
177 | + } | |
178 | + | |
172 | 179 | DmpWmsParameters::Format DmpWmsParameters::InfoFormat() const |
173 | 180 | { |
174 | 181 | std::string value = ""; |
... | ... | @@ -241,6 +248,16 @@ namespace DmpWms |
241 | 248 | if (frm.compare("jpg") == 0 || frm.compare("jpeg") == 0 || frm.compare("image/jpeg") == 0 ) { |
242 | 249 | f = DmpWmsParameters::Format::JPG; |
243 | 250 | } |
251 | + else if(frm.compare("pdf") == 0){ | |
252 | + f = DmpWmsParameters::Format::PDF; | |
253 | + }else if(frm.compare("svg") == 0){ | |
254 | + f = DmpWmsParameters::Format::SVG; | |
255 | + }else if(frm.compare("xml") == 0 || frm.compare("gml") == 0){ | |
256 | + f = DmpWmsParameters::Format::GML; | |
257 | + }else if(frm.compare("json") == 0 || frm.compare("geojson") == 0){ | |
258 | + f = DmpWmsParameters::Format::GeoJson; | |
259 | + } | |
260 | + | |
244 | 261 | return f; |
245 | 262 | } |
246 | 263 | return DmpWmsParameters::Format::NONE; | ... | ... |
... | ... | @@ -61,6 +61,8 @@ namespace DmpWms |
61 | 61 | int Y() const; //地图上查询点的Y坐标,以像素为单位。0是左侧。j是WMS 1.3.0中使用的参数键。 |
62 | 62 | |
63 | 63 | DmpWmsParameters::Format ResFormat() const; //GetMap URL为Format GetFeatureInfo url为:info_format |
64 | + | |
65 | + std::string printTemp() const; | |
64 | 66 | private: |
65 | 67 | bool GetStringParameter(const char* key, std::string &value) const; |
66 | 68 | bool GetIntParameter(const char* key, int& value) const; | ... | ... |
... | ... | @@ -173,6 +173,25 @@ namespace DmpWms |
173 | 173 | //ss += " limit 40000 "; |
174 | 174 | |
175 | 175 | double t = pRect->m_dTop, r = pRect->m_dRight, b = pRect->m_dBottom, l = pRect->m_dLeft; |
176 | + //点 标注 避免被截取 | |
177 | + if(layer->GeometryType() == DmpWkbTypes::GeometryType::PointGeometry) | |
178 | + { | |
179 | + double drh = (pRect->m_dTop - pRect->m_dBottom)/this->m_dHeight; | |
180 | + double drw = (pRect->m_dRight - pRect->m_dLeft)/this->m_dWidth; | |
181 | + t = t + drh * 15; | |
182 | + b = b - drh * 15; | |
183 | + if(length > 0) | |
184 | + { | |
185 | + l = l - drw * 30; | |
186 | + r = r + drw * 20; | |
187 | + } | |
188 | + else | |
189 | + { | |
190 | + l = l - drw * 15; | |
191 | + r = r + drw * 15; | |
192 | + } | |
193 | + } | |
194 | + | |
176 | 195 | std::string sql = format(ss.c_str(), shapeName.c_str(), layer->schema().c_str(), tableName.c_str(), shapeName.c_str(), l, b, r, t); |
177 | 196 | //printf("%s\r\n",sql.c_str()); |
178 | 197 | return sql; |
... | ... | @@ -572,8 +591,8 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
572 | 591 | std::string sql = format(ss.c_str(), layer->schema().c_str(), tableName.c_str()); |
573 | 592 | |
574 | 593 | string shapeName = layer->geom(); |
575 | - sql += format(" ST_DWithin(\"%s\", ST_GeometryFromText('POINT(%f %f)',%s), %f) limit %d ", | |
576 | - shapeName.c_str(), x, y, layer->srid().c_str(), dis, feature_count); | |
594 | + sql += format(" ST_DWithin(\"%s\", ST_GeometryFromText('POINT(%f %f)',%s),%f) limit %d ", | |
595 | + shapeName.c_str(), x, y,layer->srid().c_str(), dis, feature_count); | |
577 | 596 | //cout<<sql.c_str() <<endl; |
578 | 597 | return sql; |
579 | 598 | } |
... | ... | @@ -596,16 +615,17 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
596 | 615 | double start = clock(); |
597 | 616 | double cost, cost2; |
598 | 617 | |
599 | - string sql = this->GetFeatureInfoSQL(layer, x0, y0, dis, feature_count); //sql语句中使用 ::box | |
600 | - if (sql == "") | |
601 | - continue; | |
602 | - //printf("%s\r\n",sql.c_str()); | |
603 | - string layerName = layer->name(); | |
618 | + | |
604 | 619 | try |
605 | 620 | { |
606 | 621 | shared_ptr<DmpPgsql> pPgsqlConn = DmpPgsqlSourcePools::get_instance()->GetPgsqlConn(layer->source()); |
607 | 622 | if (pPgsqlConn == nullptr) |
608 | 623 | break; |
624 | + DmpMapServerUtil::initVectorLayerSrid(pPgsqlConn, layer); | |
625 | + string sql = this->GetFeatureInfoSQL(layer, x0, y0, dis, feature_count); //sql语句中使用 ::box | |
626 | + if (sql == "") continue; | |
627 | + string layerName = layer->name(); | |
628 | + //printf("%s\r\n",sql.c_str()); | |
609 | 629 | if (pPgsqlConn->ExecWaitBinary(sql)) |
610 | 630 | { |
611 | 631 | if(pPgsqlConn->GetRowCount()>0 || i==0) |
... | ... | @@ -949,7 +969,8 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
949 | 969 | } |
950 | 970 | } |
951 | 971 | |
952 | - for (int i = 0; i < (int)(m_vLayers.size()); i++) | |
972 | + //for (int i = 0; i < (int)(m_vLayers.size()); i++) | |
973 | + for (int i = (int)(m_vLayers.size()) -1; i > 0; i--) | |
953 | 974 | { |
954 | 975 | DmpVectorLayer *layer = m_vLayers[i]; |
955 | 976 | sprintf(buff, "<log>draw layer %s</log>", layer->name().c_str()); |
... | ... | @@ -1206,7 +1227,9 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
1206 | 1227 | |
1207 | 1228 | map<DmpVectorLayer *, shared_ptr<DataCollection>> map_DataCollection; |
1208 | 1229 | |
1209 | - for (int i = 0; i < (int)(m_vLayers.size()); i++) | |
1230 | + | |
1231 | + //for (int i = 0; i < (int)(m_vLayers.size()); i++) | |
1232 | + for (int i = (int)(m_vLayers.size()) -1; i > 0; i--) | |
1210 | 1233 | { |
1211 | 1234 | DmpVectorLayer *layer = m_vLayers[i]; |
1212 | 1235 | |
... | ... | @@ -1292,7 +1315,7 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
1292 | 1315 | if (PQntuples(res) == 0) |
1293 | 1316 | continue; |
1294 | 1317 | |
1295 | - int shapeType = layer->GeometryType(); | |
1318 | + int shapeType = layer->GeomWkbType(); | |
1296 | 1319 | shared_ptr<DataCollection> data(new DataCollection()); |
1297 | 1320 | data->InitDataCollection(res, shapeType, this->m_dWidth, this->m_dHeight, 0, m_dR, m_dScaleDenominator, x_dis, y_dis); |
1298 | 1321 | |
... | ... | @@ -1317,7 +1340,7 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
1317 | 1340 | if (PQntuples(res) == 0) |
1318 | 1341 | continue; |
1319 | 1342 | |
1320 | - int shapeType = layer->GeometryType(); | |
1343 | + int shapeType = layer->GeomWkbType(); | |
1321 | 1344 | shared_ptr<DataCollection> data(new DataCollection()); |
1322 | 1345 | if (!renderHeat) |
1323 | 1346 | { |
... | ... | @@ -1361,6 +1384,76 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
1361 | 1384 | return true; |
1362 | 1385 | } |
1363 | 1386 | |
1387 | + bool DmpWmsRenderer::GetMapLegend( std::stringstream& ab, shared_ptr<legendParamater> pLegendParamater) | |
1388 | + { | |
1389 | + clsCrSurf *pClsSurfThis; | |
1390 | + | |
1391 | + pClsSurfThis = m_pClsSurfBuff; //refresh画图在 buff 中 | |
1392 | + this->DoSetBackGround(pClsSurfThis, m_iBackColor); | |
1393 | + | |
1394 | + for (int layerType = 0; layerType < 3; layerType++) | |
1395 | + { | |
1396 | + | |
1397 | + for (int i = 0; i < (int)(m_vLayers.size()); i++) | |
1398 | + { | |
1399 | + DmpVectorLayer *layer = m_vLayers[i]; | |
1400 | + | |
1401 | + //if ((ml->m_bVisible) == false) | |
1402 | + // continue; | |
1403 | + | |
1404 | + //if (ml->m_pDataset == nullptr) | |
1405 | + // continue; | |
1406 | + | |
1407 | + //double r1 = ml->m_dUpperScale; // * | |
1408 | + //double r2 = ml->m_dLowerScale; // * | |
1409 | + std::shared_ptr<DmapCore_30::Renderer> renderer = layer->GetRenderer30(); | |
1410 | + renderer->DrawLegend(pClsSurfThis, pLegendParamater, layerType, (char *)layer->name().c_str()); | |
1411 | + } | |
1412 | + } | |
1413 | + | |
1414 | + this->BufferCopy(m_pClsSurfBuff, m_pClsMaxSurfBuffer); | |
1415 | + this->BufferCopy(m_pClsSurfBuff, m_pClsSurfDC); | |
1416 | + | |
1417 | + pLegendParamater->next(nullptr); | |
1418 | + | |
1419 | + cairo_surface_t *surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, (int)m_dWidth, pLegendParamater->pixYIndex + 10); //cairo_win32_surface_create(hdc); | |
1420 | + clsCrSurf surfDC(surface); | |
1421 | + this->BufferCopy(m_pClsSurfDC, &surfDC); | |
1422 | + | |
1423 | + cairo_surface_write_to_png_stream(surfDC.m_pSurf, cairo_write_func, &ab); | |
1424 | + | |
1425 | + return true; | |
1426 | + } | |
1427 | + | |
1428 | + bool DmpWmsRenderer::GetMapLegend( shared_ptr<legendParamater> pLegendParamater, clsCrSurf* pClsSurf) | |
1429 | + { | |
1430 | + if(pClsSurf == nullptr) | |
1431 | + { | |
1432 | + pClsSurf = m_pClsSurfBuff; | |
1433 | + } | |
1434 | + | |
1435 | + for (int layerType = 0; layerType < 3; layerType++) | |
1436 | + { | |
1437 | + for (int i = 0; i < (int)(m_vLayers.size()); i++) | |
1438 | + { | |
1439 | + DmpVectorLayer *layer = m_vLayers[i]; | |
1440 | + | |
1441 | + //if ((ml->m_bVisible) == false) | |
1442 | + // continue; | |
1443 | + | |
1444 | + //if (ml->m_pDataset == nullptr) | |
1445 | + // continue; | |
1446 | + | |
1447 | + //double r1 = ml->m_dUpperScale; // * | |
1448 | + //double r2 = ml->m_dLowerScale; // * | |
1449 | + std::shared_ptr<DmapCore_30::Renderer> renderer = layer->GetRenderer30(); | |
1450 | + renderer->DrawLegend(pClsSurf, pLegendParamater, layerType, (char *)layer->name().c_str()); | |
1451 | + } | |
1452 | + | |
1453 | + } | |
1454 | + return true; | |
1455 | + } | |
1456 | + | |
1364 | 1457 | bool DmpWmsRenderer::ToStream(std::string &responseData) |
1365 | 1458 | { |
1366 | 1459 | responseData.reserve(10240); | ... | ... |
... | ... | @@ -13,274 +13,191 @@ |
13 | 13 | |
14 | 14 | namespace DmpWms |
15 | 15 | { |
16 | - static cairo_status_t cairo_write_func_print(void *pbuff, const unsigned char *data, unsigned int length) | |
16 | + static cairo_status_t cairo_write_func_print(void *pbuff, const unsigned char *data, unsigned int length) | |
17 | 17 | { |
18 | - //vector<unsigned char>& vecData = *((vector<unsigned char>*)closure); | |
18 | + // vector<unsigned char>& vecData = *((vector<unsigned char>*)closure); | |
19 | 19 | string *pResponseData = (string *)pbuff; |
20 | - pResponseData->append((char *)data,length); | |
20 | + pResponseData->append((char *)data, length); | |
21 | 21 | return CAIRO_STATUS_SUCCESS; |
22 | 22 | } |
23 | 23 | |
24 | - DmpMapPrint::DmpMapPrint() | |
24 | + DmpMapPrint::DmpMapPrint(DmpWmsParameters::Format outformat) | |
25 | 25 | { |
26 | - | |
26 | + this->format = outformat; | |
27 | 27 | } |
28 | -/* | |
29 | - bool DmpMapPrint::getPrint(std::string &responseData, DmpProject *project,const char* xml,string servername) | |
30 | - { | |
31 | - string result_msg; | |
32 | - | |
33 | - xml_document<> doc; // character type defaults to char | |
34 | - try | |
35 | - { | |
36 | - doc.parse<0>((char *)xml); | |
37 | - } | |
38 | - catch (...) | |
39 | - { | |
40 | - result_msg = "error:Post参数是XML格式"; | |
41 | - } | |
42 | - | |
43 | - xml_node<char> *node = doc.first_node(); | |
44 | - if(!node) | |
45 | - { | |
46 | - return false; | |
47 | - } | |
48 | - | |
49 | - m_height = 1122; | |
50 | - m_width = 793; | |
51 | - | |
52 | - xml_node<char> *template_node = node->first_node("template"); | |
53 | - if(template_node != nullptr) | |
54 | - { | |
55 | - InitTemplateValue(template_node->value()); | |
56 | - } | |
57 | - | |
58 | - | |
59 | - xml_node<char> *extent_node = node->first_node("extent"); | |
60 | 28 | |
61 | - if(extent_node) | |
62 | - {// xmin="" ymin="" xmax="" ymax="" | |
63 | - xml_attribute<char> *attr_xmin = node->first_attribute("xmin"); | |
64 | - xml_attribute<char> *attr_ymin = node->first_attribute("ymin"); | |
65 | - xml_attribute<char> *attr_xmax = node->first_attribute("xmax"); | |
66 | - xml_attribute<char> *attr_ymax = node->first_attribute("ymax"); | |
67 | - | |
68 | - if(attr_xmin == nullptr || attr_ymin == nullptr || | |
69 | - attr_xmax == nullptr || attr_ymax == nullptr) | |
70 | - { | |
71 | - return 0; | |
72 | - } | |
29 | + bool DmpMapPrint::getPrint(std::string &responseData,const DmpProject *project, const string &xml, const string& servername) | |
30 | + { | |
31 | + string result_msg; | |
73 | 32 | |
74 | - xmin = atof( attr_xmax->value()); | |
75 | - ymin = atof( attr_ymin->value()); | |
76 | - xmax = atof( attr_xmax->value()); | |
77 | - ymax = atof( attr_ymax->value()); | |
78 | - } | |
33 | + try | |
34 | + { | |
35 | + std::stringstream stream(xml); | |
36 | + boost::property_tree::ptree ptree; | |
37 | + boost::property_tree::read_xml(stream, ptree); | |
79 | 38 | |
80 | - shared_ptr<MapParameter> pMapParameter(new MapParameter()); | |
39 | + std::string templateStr = ptree.get<string>("template"); | |
40 | + InitTemplateValue(templateStr); | |
81 | 41 | |
42 | + m_height = 1122; | |
43 | + m_width = 793; | |
82 | 44 | |
83 | - shared_ptr<OperationalDmapLayer> dmapLayer(new OperationalDmapLayer()); | |
84 | - dmapLayer->serviceName = servername; | |
45 | + double xmin = ptree.get<double>("extent/xmin"); | |
46 | + double ymin = ptree.get<double>("extent/ymin"); | |
47 | + double xmax = ptree.get<double>("extent/xmax"); | |
48 | + double ymax = ptree.get<double>("extent/ymax"); | |
49 | + | |
50 | + shared_ptr<DmpPrintParameter> pDmpPrintParameter(new DmpPrintParameter()); | |
85 | 51 | |
86 | - map<string, shared_ptr<WMSServer>>::iterator iter = mapWmsServer.find(dmapLayer->serviceName); | |
87 | - if(iter !=mapWmsServer.end()) | |
88 | - { | |
89 | - dmapLayer->m_wmsServer = iter->second; | |
90 | - Rect *rect = dmapLayer->m_wmsServer->GetExtent(); | |
91 | - pMapParameter->InitParameter(xmin,xmax,ymax,ymin,m_width -100,m_height -120); | |
92 | - //double scaleDenominator = this->RecalculateScale(rect->m_dRight,rect->m_dLeft,rect->m_dTop,rect->m_dBottom,1022,693); | |
93 | - } | |
94 | - else | |
95 | - { | |
96 | - return false; | |
97 | - } | |
98 | - | |
52 | + shared_ptr<DmpPrintWMSService> dmapLayer(new DmpPrintWMSService()); | |
53 | + dmapLayer->serviceName_ = servername; | |
99 | 54 | |
100 | - //dmapLayer->serviceName = "土地利用现状"; | |
101 | - //dmapLayer->m_id = "土地利用现状"; | |
102 | - //dmapLayer->boxX1 = 683497; | |
103 | - //dmapLayer->boxX2 = 695357; | |
104 | - //dmapLayer->boxY1 = 2534922; | |
105 | - //dmapLayer->boxY2 = 2543053; | |
55 | + dmapLayer->project_ = project; | |
56 | + //shared_ptr<DmpRectangle> dmpRectangle | |
57 | + //Rect *rect = dmapLayer->project_->GetExtent(); | |
58 | + pDmpPrintParameter->InitParameter(xmin, xmax, ymax, ymin, m_width - 100, m_height - 120); | |
106 | 59 | |
107 | - Rect* rect = dmapLayer->m_wmsServer->GetExtent(); | |
60 | + // dmapLayer->serviceName = "土地利用现状"; | |
61 | + // dmapLayer->m_id = "土地利用现状"; | |
62 | + // dmapLayer->boxX1 = 683497; | |
63 | + // dmapLayer->boxX2 = 695357; | |
64 | + // dmapLayer->boxY1 = 2534922; | |
65 | + // dmapLayer->boxY2 = 2543053; | |
108 | 66 | |
109 | - dmapLayer->boxX1 = xmin; | |
110 | - dmapLayer->boxX2 = xmax; | |
111 | - dmapLayer->boxY1 = ymin; | |
112 | - dmapLayer->boxY2 = ymax; | |
67 | + //Rect *rect = dmapLayer->m_wmsServer->GetExtent(); | |
113 | 68 | |
114 | - shared_ptr<DmapPrintLayout> dmapLayout(new DmapPrintLayout()); | |
115 | - this->vector_dmapPrintLayout.push_back(dmapLayout); | |
69 | + dmapLayer->boxX1_ = xmin; | |
70 | + dmapLayer->boxX2_ = xmax; | |
71 | + dmapLayer->boxY1_ = ymin; | |
72 | + dmapLayer->boxY2_ = ymax; | |
116 | 73 | |
74 | + shared_ptr<DmpPrintLayout> dmapLayout(new DmpPrintLayout()); | |
75 | + this->vector_DmpPrintLayout.push_back(dmapLayout); | |
117 | 76 | |
118 | 77 | dmapLayout->data.push_back(dmapLayer); |
119 | - dmapLayout->localtion_x = 50; | |
120 | - dmapLayout->localtion_y = 70; | |
78 | + dmapLayout->localtionX_ = 50; | |
79 | + dmapLayout->localtionY_ = 70; | |
121 | 80 | |
122 | - dmapLayout->height = m_height -70; | |
123 | - dmapLayout->width = m_width -50; | |
81 | + dmapLayout->height_ = m_height - 70; | |
82 | + dmapLayout->width_ = m_width - 50; | |
124 | 83 | |
125 | - this->m_height = m_height; | |
84 | + this->m_height = m_height; | |
126 | 85 | this->m_width = m_width; |
127 | 86 | |
128 | - | |
129 | - shared_ptr<OperationalGeom> geomLayer_scale(new OperationalGeom()); | |
130 | - geomLayer_scale->pMapParameter = pMapParameter; | |
131 | - geomLayer_scale->type = "scale"; | |
132 | - shared_ptr<DmapPrintLayout> dmapLayout_scale(new DmapPrintLayout()); | |
133 | - this->vector_dmapPrintLayout.push_back(dmapLayout_scale); | |
134 | - geomLayer_scale->localtion_x = 150; | |
135 | - geomLayer_scale->localtion_y = m_height - 50; | |
87 | + shared_ptr<DmpPrintScale> geomLayer_scale(new DmpPrintScale()); | |
88 | + geomLayer_scale->pPrintParameter_ = pDmpPrintParameter; | |
89 | + shared_ptr<DmpPrintLayout> dmapLayout_scale(new DmpPrintLayout()); | |
90 | + this->vector_DmpPrintLayout.push_back(dmapLayout_scale); | |
91 | + geomLayer_scale->localtionX_ = 150; | |
92 | + geomLayer_scale->localtionY_ = m_height - 50; | |
136 | 93 | dmapLayout_scale->data.push_back(geomLayer_scale); |
137 | 94 | |
138 | - | |
139 | - shared_ptr<OperationalGeom> geomLayer_compass(new OperationalGeom()); | |
140 | - geomLayer_compass->pMapParameter = pMapParameter; | |
141 | - geomLayer_compass->type = "compass"; | |
142 | - shared_ptr<DmapPrintLayout> dmapLayout_compass(new DmapPrintLayout()); | |
143 | - this->vector_dmapPrintLayout.push_back(dmapLayout_compass); | |
144 | - geomLayer_compass->localtion_x = 80; | |
145 | - geomLayer_compass->localtion_y = m_height - 80; | |
95 | + shared_ptr<DmpPrintCompass> geomLayer_compass(new DmpPrintCompass()); | |
96 | + geomLayer_compass->pPrintParameter_ = pDmpPrintParameter; | |
97 | + shared_ptr<DmpPrintLayout> dmapLayout_compass(new DmpPrintLayout()); | |
98 | + this->vector_DmpPrintLayout.push_back(dmapLayout_compass); | |
99 | + geomLayer_compass->localtionX_ = 80; | |
100 | + geomLayer_compass->localtionY_ = m_height - 80; | |
146 | 101 | dmapLayout_compass->data.push_back(geomLayer_compass); |
147 | 102 | |
148 | - | |
149 | - ToPrint(ab); | |
150 | - return true; | |
151 | - } | |
152 | - | |
153 | - bool DmpMapPrint::getPrint( std::string &responseData, DmpProject* project, | |
154 | - string servername,const char* printTemp,const char *bbox) | |
155 | - { | |
156 | - string result_msg; | |
157 | - | |
158 | - if(printTemp == nullptr || bbox == nullptr) | |
159 | - return false; | |
160 | - | |
161 | - m_height = 1122; | |
162 | - m_width = 793; | |
163 | - | |
164 | - | |
165 | - double boxX1, boxY1, boxX2, boxY2; | |
166 | - sscanf(bbox, "%lf,%lf,%lf,%lf", &boxY1, &boxX1, &boxY2, &boxX2); // &x1,&y1,&x2,&y2); | |
103 | + ToPrint(responseData); | |
104 | + return true; | |
167 | 105 | |
168 | - | |
169 | - InitTemplateValue(printTemp); | |
170 | - | |
106 | + } | |
107 | + catch (...) | |
108 | + { | |
171 | 109 | |
172 | - shared_ptr<MapParameter> pMapParameter(new MapParameter()); | |
110 | + } | |
111 | + return false; | |
112 | + } | |
173 | 113 | |
114 | + bool DmpMapPrint::getPrint(std::string &responseData,const DmpProject *project, const string& servername, | |
115 | + const char *printTemp, const char *bbox) | |
116 | + { | |
117 | + string result_msg; | |
174 | 118 | |
175 | - shared_ptr<OperationalDmapLayer> dmapLayer(new OperationalDmapLayer()); | |
176 | - dmapLayer->serviceName = servername; | |
119 | + if (printTemp == nullptr || bbox == nullptr) | |
120 | + return false; | |
177 | 121 | |
178 | - map<string, shared_ptr<WMSServer>>::iterator iter = mapWmsServer.find(dmapLayer->serviceName); | |
179 | - if(iter !=mapWmsServer.end()) | |
180 | - { | |
181 | - | |
122 | + m_height = 1122; | |
123 | + m_width = 793; | |
182 | 124 | |
125 | + double boxX1, boxY1, boxX2, boxY2; | |
126 | + sscanf(bbox, "%lf,%lf,%lf,%lf", &boxY1, &boxX1, &boxY2, &boxX2); // &x1,&y1,&x2,&y2); | |
183 | 127 | |
128 | + InitTemplateValue(printTemp); | |
184 | 129 | |
185 | - if (rect_service) | |
186 | - { | |
187 | - if (rect_service->m_dBottom > 0 && rect_service->m_dRight > 0 && rect_service->m_dLeft > 0 && rect_service->m_dTop > 0) | |
188 | - { | |
189 | - if (min(boxX1, boxX2) > rect_service->m_dRight || max(boxX1, boxX2) < rect_service->m_dLeft || | |
190 | - min(boxY1, boxY2) > rect_service->m_dTop || max(boxY1, boxY2) < rect_service->m_dBottom) | |
191 | - { | |
192 | - if (!(min(boxY1, boxY2) > rect_service->m_dRight || max(boxY1, boxY2) < rect_service->m_dLeft || | |
193 | - min(boxX1, boxX2) > rect_service->m_dTop || max(boxX1, boxX2) < rect_service->m_dBottom)) | |
194 | - { | |
195 | - double x1 = boxX1; | |
196 | - boxX1 = boxY1; | |
197 | - boxY1 = x1; | |
198 | - double x2 = boxX2; | |
199 | - boxX2 = boxY2; | |
200 | - boxY2 = x2; | |
201 | - } | |
202 | - } | |
203 | - } | |
204 | - } | |
130 | + shared_ptr<DmpPrintParameter> pDmpPrintParameter(new DmpPrintParameter()); | |
131 | + | |
132 | + shared_ptr<DmpPrintWMSService> dmapLayer(new DmpPrintWMSService()); | |
133 | + dmapLayer->serviceName_ = servername; | |
134 | + | |
135 | + | |
205 | 136 | xmin = min(boxX1, boxX2); |
206 | 137 | ymin = min(boxY1, boxY2); |
207 | 138 | xmax = max(boxX1, boxX2); |
208 | 139 | ymax = max(boxY1, boxY2); |
209 | - pMapParameter->InitParameter(xmin,xmax,ymax,ymin,m_width -100,m_height -120); | |
210 | - //double scaleDenominator = this->RecalculateScale(rect->m_dRight,rect->m_dLeft,rect->m_dTop,rect->m_dBottom,1022,693); | |
211 | - } | |
212 | - else | |
213 | - { | |
214 | - return false; | |
215 | - } | |
216 | - | |
217 | - | |
218 | - //dmapLayer->serviceName = "土地利用现状"; | |
219 | - //dmapLayer->m_id = "土地利用现状"; | |
220 | - //dmapLayer->boxX1 = 683497; | |
221 | - //dmapLayer->boxX2 = 695357; | |
222 | - //dmapLayer->boxY1 = 2534922; | |
223 | - //dmapLayer->boxY2 = 2543053; | |
140 | + pDmpPrintParameter->InitParameter(xmin, xmax, ymax, ymin, m_width - 100, m_height - 120); | |
141 | + // double scaleDenominator = this->RecalculateScale(rect->m_dRight,rect->m_dLeft,rect->m_dTop,rect->m_dBottom,1022,693); | |
142 | + | |
224 | 143 | |
225 | - Rect* rect = dmapLayer->m_wmsServer->GetExtent(); | |
144 | + // dmapLayer->serviceName = "土地利用现状"; | |
145 | + // dmapLayer->m_id = "土地利用现状"; | |
146 | + // dmapLayer->boxX1 = 683497; | |
147 | + // dmapLayer->boxX2 = 695357; | |
148 | + // dmapLayer->boxY1 = 2534922; | |
149 | + // dmapLayer->boxY2 = 2543053; | |
226 | 150 | |
227 | - dmapLayer->boxX1 = xmin; | |
228 | - dmapLayer->boxX2 = xmax; | |
229 | - dmapLayer->boxY1 = ymin; | |
230 | - dmapLayer->boxY2 = ymax; | |
151 | + // Rect *rect = dmapLayer->m_wmsServer->GetExtent(); | |
231 | 152 | |
232 | - shared_ptr<DmapPrintLayout> dmapLayout(new DmapPrintLayout()); | |
233 | - this->vector_dmapPrintLayout.push_back(dmapLayout); | |
153 | + dmapLayer->boxX1_ = xmin; | |
154 | + dmapLayer->boxX2_ = xmax; | |
155 | + dmapLayer->boxY1_ = ymin; | |
156 | + dmapLayer->boxY2_ = ymax; | |
234 | 157 | |
158 | + shared_ptr<DmpPrintLayout> dmapLayout(new DmpPrintLayout()); | |
159 | + this->vector_DmpPrintLayout.push_back(dmapLayout); | |
235 | 160 | |
236 | 161 | dmapLayout->data.push_back(dmapLayer); |
237 | - dmapLayout->localtion_x = 50; | |
238 | - dmapLayout->localtion_y = 70; | |
162 | + dmapLayout->localtionX_ = 50; | |
163 | + dmapLayout->localtionY_ = 70; | |
239 | 164 | |
240 | - dmapLayout->height = m_height -120; | |
241 | - dmapLayout->width = m_width -100; | |
165 | + dmapLayout->height_ = m_height - 120; | |
166 | + dmapLayout->width_ = m_width - 100; | |
242 | 167 | |
243 | - this->m_height = m_height; | |
168 | + this->m_height = m_height; | |
244 | 169 | this->m_width = m_width; |
245 | 170 | |
246 | - | |
247 | - shared_ptr<OperationalGeom> geomLayer_scale(new OperationalGeom()); | |
248 | - geomLayer_scale->pMapParameter = pMapParameter; | |
249 | - geomLayer_scale->type = "scale"; | |
250 | - shared_ptr<DmapPrintLayout> dmapLayout_scale(new DmapPrintLayout()); | |
251 | - this->vector_dmapPrintLayout.push_back(dmapLayout_scale); | |
252 | - geomLayer_scale->localtion_x = 150; | |
253 | - geomLayer_scale->localtion_y = m_height - 110; | |
171 | + shared_ptr<DmpPrintScale> geomLayer_scale(new DmpPrintScale()); | |
172 | + geomLayer_scale->pPrintParameter_ = pDmpPrintParameter; | |
173 | + shared_ptr<DmpPrintLayout> dmapLayout_scale(new DmpPrintLayout()); | |
174 | + this->vector_DmpPrintLayout.push_back(dmapLayout_scale); | |
175 | + geomLayer_scale->localtionX_ = 150; | |
176 | + geomLayer_scale->localtionY_ = m_height - 110; | |
254 | 177 | dmapLayout_scale->data.push_back(geomLayer_scale); |
255 | 178 | |
256 | - | |
257 | - shared_ptr<OperationalGeom> geomLayer_compass(new OperationalGeom()); | |
258 | - geomLayer_compass->pMapParameter = pMapParameter; | |
259 | - geomLayer_compass->type = "compass"; | |
260 | - shared_ptr<DmapPrintLayout> dmapLayout_compass(new DmapPrintLayout()); | |
261 | - this->vector_dmapPrintLayout.push_back(dmapLayout_compass); | |
262 | - geomLayer_compass->localtion_x = 80; | |
263 | - geomLayer_compass->localtion_y = m_height - 140; | |
179 | + shared_ptr<DmpPrintCompass> geomLayer_compass(new DmpPrintCompass()); | |
180 | + geomLayer_compass->pPrintParameter_ = pDmpPrintParameter; | |
181 | + shared_ptr<DmpPrintLayout> dmapLayout_compass(new DmpPrintLayout()); | |
182 | + this->vector_DmpPrintLayout.push_back(dmapLayout_compass); | |
183 | + geomLayer_compass->localtionX_ = 80; | |
184 | + geomLayer_compass->localtionY_ = m_height - 140; | |
264 | 185 | dmapLayout_compass->data.push_back(geomLayer_compass); |
265 | 186 | |
266 | - | |
267 | - ToPrint(ab); | |
187 | + ToPrint(responseData); | |
268 | 188 | return true; |
269 | - | |
270 | - } | |
271 | - | |
189 | + } | |
272 | 190 | |
273 | - bool DmpMapPrint::getPrintTempFile(string &responseData,,const char* tempName, const char* bbox) | |
191 | + bool DmpMapPrint::getPrintTempFile(string &responseData,const DmpProject *project, const char *tempName, const char *bbox) | |
274 | 192 | { |
275 | - string path = "./template/";path += tempName; path += ".xml"; | |
276 | - | |
193 | + string path = "../template/"; | |
194 | + path += tempName; | |
195 | + path += ".xml"; | |
277 | 196 | |
278 | 197 | ifstream fin(path.c_str(), ios::binary); |
279 | - | |
280 | 198 | if (!fin) |
281 | 199 | { |
282 | - string result_msg = "<Error>打印模板未找到</Error>"; | |
283 | - ab->AppendString(result_msg.c_str()); | |
200 | + responseData = "<Error>打印模板未找到</Error>"; | |
284 | 201 | return false; |
285 | 202 | } |
286 | 203 | |
... | ... | @@ -288,113 +205,100 @@ namespace DmpWms |
288 | 205 | buffer << fin.rdbuf(); |
289 | 206 | string content(buffer.str()); |
290 | 207 | fin.close(); |
291 | - return getPrintLayout(ab, pWmsServer,content.c_str(), bbox); | |
292 | - //return true; | |
208 | + return getPrintLayout(responseData, project, content.c_str(), bbox); | |
209 | + // return true; | |
293 | 210 | } |
294 | 211 | |
295 | - | |
296 | - bool DmpMapPrint::getPrintLayout(AppendBuffer *ab,shared_ptr<WMSServer> pWmsServer, | |
297 | - const char* xml,const char *bbox) | |
298 | - { | |
299 | - string result_msg; | |
300 | - if(xml == nullptr || bbox == nullptr) | |
301 | - return false; | |
302 | - | |
303 | - m_height = 1122; | |
304 | - m_width = 793; | |
305 | - | |
306 | - xml_document<> doc; // character type defaults to char | |
307 | - try | |
308 | - { | |
309 | - doc.parse<0>((char *)xml); | |
310 | - xml_node<char> *node = doc.first_node(); | |
311 | - if (!node) | |
312 | - { | |
313 | - result_msg = "<Error>打印模板无法解析</Error>"; | |
314 | - ab->AppendString(result_msg.c_str()); | |
315 | - return false; | |
316 | - } | |
212 | + bool DmpMapPrint::getPrintLayout(string &responseData,const DmpProject *project, const char *xml, const char *bbox) | |
213 | + { | |
214 | + string result_msg; | |
215 | + if (xml == nullptr || bbox == nullptr) | |
216 | + return false; | |
317 | 217 | |
318 | - m_height = 1122; | |
319 | - m_width = 793; | |
218 | + m_height = 1122; | |
219 | + m_width = 793; | |
320 | 220 | |
321 | - xml_node<char> *template_node = node->first_node("template"); | |
322 | - if (template_node != nullptr) | |
323 | - { | |
324 | - InitTemplateValue(template_node->value()); | |
325 | - } | |
221 | + | |
222 | + try | |
223 | + { | |
224 | + std::stringstream stream(xml); | |
225 | + boost::property_tree::ptree ptree; | |
226 | + boost::property_tree::read_xml(stream, ptree); | |
227 | + | |
228 | + std::string templateStr = ptree.get<string>("printlayout.template"); | |
229 | + InitTemplateValue(templateStr); | |
326 | 230 | |
327 | 231 | double boxX1, boxY1, boxX2, boxY2; |
328 | 232 | sscanf(bbox, "%lf,%lf,%lf,%lf", &boxX1, &boxY1, &boxX2, &boxY2); // &x1,&y1,&x2,&y2); |
329 | - shared_ptr<MapParameter> pMapParameter(new MapParameter()); | |
330 | - //Rect *rect_service = pWmsServer->GetExtent(); | |
331 | - //if (rect_service) | |
233 | + shared_ptr<DmpPrintParameter> pDmpPrintParameter(new DmpPrintParameter()); | |
234 | + // Rect *rect_service = pWmsServer->GetExtent(); | |
235 | + // if (rect_service) | |
332 | 236 | //{ |
333 | 237 | // rect_service->GetExtent(boxX1, boxX2, boxY1, boxY2); |
334 | - //} | |
335 | - | |
238 | + // } | |
239 | + | |
336 | 240 | xmin = min(boxX1, boxX2); |
337 | 241 | ymin = min(boxY1, boxY2); |
338 | 242 | xmax = max(boxX1, boxX2); |
339 | 243 | ymax = max(boxY1, boxY2); |
340 | - pMapParameter->pWmsService = pWmsServer; | |
341 | - pMapParameter->InitParameter(xmin,xmax,ymax,ymin,m_width -100,m_height -120); | |
342 | - | |
343 | - shared_ptr<DmapPrintLayout> printLayout(new DmapPrintLayout()); | |
344 | - | |
345 | - if(printLayout->ReadXML(node,pMapParameter,result_msg)) | |
346 | - { | |
347 | - this->vector_dmapPrintLayout.push_back(printLayout); | |
348 | - ToPrint(ab); | |
244 | + pDmpPrintParameter->pWmsService = project; | |
245 | + pDmpPrintParameter->InitParameter(xmin, xmax, ymax, ymin, m_width - 100, m_height - 120); | |
246 | + | |
247 | + shared_ptr<DmpPrintLayout> printLayout(new DmpPrintLayout()); | |
248 | + boost::property_tree::ptree ptreelayout = ptree.get_child("printlayout"); | |
249 | + if (printLayout->ReadXML(ptreelayout, pDmpPrintParameter, result_msg)) | |
250 | + { | |
251 | + this->vector_DmpPrintLayout.push_back(printLayout); | |
252 | + ToPrint(responseData); | |
349 | 253 | return true; |
350 | 254 | } |
351 | 255 | } |
352 | - catch (...) | |
353 | - { | |
354 | - result_msg = "<Error>error:Post参数是XML格式</Error>"; | |
355 | - } | |
256 | + catch (const std::exception& e) | |
257 | + { | |
258 | + std::cerr << e.what() << '\n'; | |
259 | + result_msg = "<Error>error:Post参数是XML格式</Error>"; | |
260 | + } | |
356 | 261 | |
357 | - ab->AppendString(result_msg.c_str()); | |
262 | + responseData = result_msg; | |
358 | 263 | return false; |
264 | + } | |
359 | 265 | |
360 | - } | |
361 | - | |
362 | - bool DmpMapPrint::ToPrint(AppendBuffer *ab) | |
266 | + bool DmpMapPrint::ToPrint(string &responseData) | |
363 | 267 | { |
364 | - if(isPicture == PrintOutputFormat::SVG) | |
268 | + if (format == DmpWmsParameters::Format::SVG) | |
365 | 269 | { |
366 | - //string path = this->GetFilePath("mapPrint.pdf"); | |
367 | - cairo_surface_t *surface = cairo_svg_surface_create_for_stream(cairo_write_func_print,ab, | |
368 | - (int)m_width, | |
369 | - (int)m_height); | |
370 | - | |
371 | - //cairo_surface_set_fallback_resolution(surface,900,900); | |
372 | - clsCrSurf mClsSurfDC(surface,(int)m_width,(int)m_height,false); | |
373 | - cairo_set_antialias(mClsSurfDC.m_pCr,cairo_antialias_t::CAIRO_ANTIALIAS_BEST); | |
270 | + // string path = this->GetFilePath("mapPrint.pdf"); | |
271 | + cairo_surface_t *surface = cairo_svg_surface_create_for_stream(cairo_write_func_print, &responseData, | |
272 | + (int)m_width, | |
273 | + (int)m_height); | |
274 | + | |
275 | + // cairo_surface_set_fallback_resolution(surface,900,900); | |
276 | + clsCrSurf mClsSurfDC(surface, (int)m_width, (int)m_height, false); | |
277 | + cairo_set_antialias(mClsSurfDC.m_pCr, cairo_antialias_t::CAIRO_ANTIALIAS_BEST); | |
374 | 278 | DoSetBackGround(&mClsSurfDC, 0xffffffff); |
375 | 279 | |
376 | - for (size_t i = 0; i < vector_dmapPrintLayout.size(); i++) | |
280 | + for (size_t i = 0; i < vector_DmpPrintLayout.size(); i++) | |
377 | 281 | { |
378 | - shared_ptr<DmapPrintLayout> layout = vector_dmapPrintLayout.at(i); | |
379 | - layout->DrawData(&mClsSurfDC,PrintOutputFormat::SVG); | |
282 | + shared_ptr<DmpPrintLayout> layout = vector_DmpPrintLayout.at(i); | |
283 | + layout->DrawData(&mClsSurfDC, DmpWmsParameters::Format::SVG); | |
380 | 284 | } |
381 | 285 | } |
382 | - else if(isPicture == PrintOutputFormat::PDF) | |
286 | + else if (format == DmpWmsParameters::Format::PDF) | |
383 | 287 | { |
384 | - //string path = this->GetFilePath("mapPrint.pdf"); | |
385 | - cairo_surface_t *surface = cairo_pdf_surface_create_for_stream(cairo_write_func_print,ab, | |
386 | - (int)m_width, | |
387 | - (int)m_height); | |
388 | - | |
389 | - //cairo_surface_set_fallback_resolution(surface,900,900); | |
390 | - clsCrSurf mClsSurfDC(surface,(int)m_width,(int)m_height,false); | |
391 | - cairo_set_antialias(mClsSurfDC.m_pCr,cairo_antialias_t::CAIRO_ANTIALIAS_BEST); | |
288 | + // string path = this->GetFilePath("mapPrint.pdf"); | |
289 | + cairo_surface_t *surface = cairo_pdf_surface_create_for_stream(cairo_write_func_print, &responseData, | |
290 | + (int)m_width, | |
291 | + (int)m_height); | |
292 | + | |
293 | + // cairo_surface_set_fallback_resolution(surface,900,900); | |
294 | + clsCrSurf mClsSurfDC(surface, (int)m_width, (int)m_height, false); | |
295 | + cairo_set_antialias(mClsSurfDC.m_pCr, cairo_antialias_t::CAIRO_ANTIALIAS_BEST); | |
392 | 296 | DoSetBackGround(&mClsSurfDC, 0xffffffff); |
393 | 297 | |
394 | - for (size_t i = 0; i < vector_dmapPrintLayout.size(); i++) | |
298 | + for (size_t i = 0; i < vector_DmpPrintLayout.size(); i++) | |
395 | 299 | { |
396 | - shared_ptr<DmapPrintLayout> layout = vector_dmapPrintLayout.at(i); | |
397 | - layout->DrawData(&mClsSurfDC,PrintOutputFormat::PDF); | |
300 | + shared_ptr<DmpPrintLayout> layout = vector_DmpPrintLayout.at(i); | |
301 | + layout->DrawData(&mClsSurfDC, DmpWmsParameters::Format::PDF); | |
398 | 302 | } |
399 | 303 | } |
400 | 304 | else |
... | ... | @@ -403,32 +307,28 @@ namespace DmpWms |
403 | 307 | (int)m_width, |
404 | 308 | (int)m_height); |
405 | 309 | |
406 | - | |
407 | - | |
408 | - //cairo_surface_set_fallback_resolution(surface); | |
409 | - //double dpix, dpiy; | |
410 | - //cairo_surface_get_fallback_resolution(surface,&dpix, &dpiy); | |
411 | - //printf("%f,%f",dpix,dpiy); | |
310 | + // cairo_surface_set_fallback_resolution(surface); | |
311 | + // double dpix, dpiy; | |
312 | + // cairo_surface_get_fallback_resolution(surface,&dpix, &dpiy); | |
313 | + // printf("%f,%f",dpix,dpiy); | |
412 | 314 | |
413 | 315 | clsCrSurf mClsSurfDC(surface); |
414 | 316 | DoSetBackGround(&mClsSurfDC, 0xffffffff); |
415 | - | |
416 | 317 | |
417 | - for (size_t i = 0; i < vector_dmapPrintLayout.size(); i++) | |
318 | + for (size_t i = 0; i < vector_DmpPrintLayout.size(); i++) | |
418 | 319 | { |
419 | - shared_ptr<DmapPrintLayout> layout = vector_dmapPrintLayout.at(i); | |
420 | - layout->DrawData(&mClsSurfDC,PrintOutputFormat::PNG); | |
320 | + shared_ptr<DmpPrintLayout> layout = vector_DmpPrintLayout.at(i); | |
321 | + layout->DrawData(&mClsSurfDC, DmpWmsParameters::Format::PNG); | |
421 | 322 | } |
422 | 323 | |
423 | - cairo_surface_write_to_png_stream(surface, cairo_write_func_print, ab); | |
324 | + cairo_surface_write_to_png_stream(surface, cairo_write_func_print, &responseData); | |
424 | 325 | } |
425 | 326 | return true; |
426 | 327 | } |
427 | 328 | |
428 | - | |
429 | 329 | bool DmpMapPrint::InitTemplateValue(string templateValue) |
430 | 330 | { |
431 | - | |
331 | + | |
432 | 332 | if (templateValue == "A4竖" || templateValue == "A4-hoch") |
433 | 333 | { |
434 | 334 | m_height = 1122; |
... | ... | @@ -463,222 +363,81 @@ namespace DmpWms |
463 | 363 | } |
464 | 364 | |
465 | 365 | |
466 | - bool DmpMapPrint::Test(AppendBuffer *ab,map<string, shared_ptr<WMSServer>> &mapWmsServer,string servername) | |
467 | - { | |
468 | - //double scaleDenominator = 0; | |
469 | - | |
470 | - shared_ptr<MapParameter> pMapParameter(new MapParameter()); | |
471 | - | |
472 | - | |
473 | - shared_ptr<OperationalDmapLayer> dmapLayer(new OperationalDmapLayer()); | |
474 | - dmapLayer->serviceName = servername; | |
475 | 366 | |
476 | - map<string, shared_ptr<WMSServer>>::iterator iter = mapWmsServer.find(dmapLayer->serviceName); | |
477 | - if(iter !=mapWmsServer.end()) | |
478 | - { | |
479 | - dmapLayer->m_wmsServer = iter->second; | |
480 | - Rect *rect = dmapLayer->m_wmsServer->GetExtent(); | |
481 | - pMapParameter->InitParameter(rect->m_dLeft,rect->m_dRight,rect->m_dTop,rect->m_dBottom,693,1022); | |
482 | - double scaleDenominator = this->RecalculateScale(rect->m_dRight,rect->m_dLeft,rect->m_dTop,rect->m_dBottom,1022,693); | |
483 | - } | |
484 | - else | |
485 | - { | |
367 | + double DmpMapPrint::RecalculateScale(double right, double left, double top, double bottom, double width, double height) | |
368 | + { | |
369 | + double w = right - left; | |
370 | + double h = top - bottom; | |
371 | + double oneInchInLayoutUnits = 0.0254; | |
372 | + double resolution = 96; | |
373 | + if ((w > std::pow(10, 12)) || (w < std::pow(10, -12))) | |
374 | + return false; | |
375 | + if ((h > std::pow(10, 12)) || (h < std::pow(10, -12))) | |
486 | 376 | return false; |
487 | - } | |
488 | - | |
489 | - | |
490 | - //dmapLayer->serviceName = "土地利用现状"; | |
491 | - //dmapLayer->m_id = "土地利用现状"; | |
492 | - //dmapLayer->boxX1 = 683497; | |
493 | - //dmapLayer->boxX2 = 695357; | |
494 | - //dmapLayer->boxY1 = 2534922; | |
495 | - //dmapLayer->boxY2 = 2543053; | |
496 | - | |
497 | - Rect* rect = dmapLayer->m_wmsServer->GetExtent(); | |
498 | - | |
499 | - dmapLayer->boxX1 = rect->m_dLeft; | |
500 | - dmapLayer->boxX2 = rect->m_dRight; | |
501 | - dmapLayer->boxY1 = rect->m_dBottom; | |
502 | - dmapLayer->boxY2 = rect->m_dTop; | |
503 | - | |
504 | - shared_ptr<DmapPrintLayout> dmapLayout(new DmapPrintLayout()); | |
505 | - this->vector_dmapPrintLayout.push_back(dmapLayout); | |
506 | - | |
507 | - | |
508 | - dmapLayout->data.push_back(dmapLayer); | |
509 | - dmapLayout->localtion_x = 50; | |
510 | - dmapLayout->localtion_y = 70; | |
511 | - | |
512 | - dmapLayout->height = 1022; | |
513 | - dmapLayout->width = 693; | |
514 | - | |
515 | - this->m_height = 1122; | |
516 | - this->m_width = 793; | |
517 | - | |
518 | 377 | |
519 | - shared_ptr<OperationalGeom> geomLayer_scale(new OperationalGeom()); | |
520 | - geomLayer_scale->pMapParameter = pMapParameter; | |
521 | - geomLayer_scale->type = "scale"; | |
522 | - shared_ptr<DmapPrintLayout> dmapLayout_scale(new DmapPrintLayout()); | |
523 | - this->vector_dmapPrintLayout.push_back(dmapLayout_scale); | |
524 | - dmapLayout_scale->localtion_x = 150; | |
525 | - dmapLayout_scale->localtion_y = 1022+20; | |
526 | - dmapLayout_scale->data.push_back(geomLayer_scale); | |
378 | + long double R1 = width / w; | |
379 | + long double R2 = height / h; | |
380 | + double r = R1 < R2 ? R1 : R2; | |
381 | + if ((r > std::pow(10, 12)) || (r < std::pow(10, -12))) | |
382 | + return false; | |
527 | 383 | |
384 | + // m_dR = R1 < R2 ? R1 : R2; | |
385 | + double m_dR = r; | |
386 | + double m_dXdis = width / 2.0 - m_dR * (right + left) / 2.0; | |
387 | + double m_dYdis = height / 2.0 + m_dR * (top + bottom) / 2.0; | |
528 | 388 | |
529 | - shared_ptr<OperationalGeom> geomLayer_compass(new OperationalGeom()); | |
530 | - geomLayer_compass->pMapParameter = pMapParameter; | |
531 | - geomLayer_compass->type = "compass"; | |
532 | - shared_ptr<DmapPrintLayout> dmapLayout_compass(new DmapPrintLayout()); | |
533 | - this->vector_dmapPrintLayout.push_back(dmapLayout_compass); | |
534 | - dmapLayout_compass->localtion_x = 80; | |
535 | - dmapLayout_compass->localtion_y = 1022-10; | |
536 | - dmapLayout_compass->data.push_back(geomLayer_compass); | |
389 | + bool isWGS84 = left <= 180 && right < 180 && | |
390 | + left >= -180 && right >= -180 && | |
391 | + top < 90 && bottom < 90; | |
537 | 392 | |
538 | - | |
539 | - if(isPicture == DmpWmsParameters::Format::SVG) | |
393 | + double scaleDenominator = 0; | |
394 | + if (isWGS84) | |
540 | 395 | { |
541 | - //string path = this->GetFilePath("mapPrint.pdf"); | |
542 | - cairo_surface_t *surface = cairo_svg_surface_create_for_stream(cairo_write_func_print,ab, | |
543 | - (int)m_width, | |
544 | - (int)m_height); | |
545 | - | |
546 | - //cairo_surface_set_fallback_resolution(surface,900,900); | |
547 | - clsCrSurf mClsSurfDC(surface,(int)m_width,(int)m_height,false); | |
548 | - cairo_set_antialias(mClsSurfDC.m_pCr,cairo_antialias_t::CAIRO_ANTIALIAS_BEST); | |
549 | - DoSetBackGround(&mClsSurfDC, 0xffffffff); | |
550 | - | |
551 | - for (size_t i = 0; i < vector_dmapPrintLayout.size(); i++) | |
552 | - { | |
553 | - shared_ptr<DmapPrintLayout> layout = vector_dmapPrintLayout.at(i); | |
554 | - layout->DrawData(&mClsSurfDC,DmpWmsParameters::Format::SVG); | |
555 | - } | |
556 | - } | |
557 | - else if(isPicture == DmpWmsParameters::Format::PDF) | |
558 | - { | |
559 | - //string path = this->GetFilePath("mapPrint.pdf"); | |
560 | - cairo_surface_t *surface = cairo_pdf_surface_create_for_stream(cairo_write_func_print,ab, | |
561 | - (int)m_width, | |
562 | - (int)m_height); | |
563 | - | |
564 | - //cairo_surface_set_fallback_resolution(surface,900,900); | |
565 | - clsCrSurf mClsSurfDC(surface,(int)m_width,(int)m_height,false); | |
566 | - cairo_set_antialias(mClsSurfDC.m_pCr,cairo_antialias_t::CAIRO_ANTIALIAS_BEST); | |
567 | - DoSetBackGround(&mClsSurfDC, 0xffffffff); | |
568 | - | |
569 | - for (size_t i = 0; i < vector_dmapPrintLayout.size(); i++) | |
570 | - { | |
571 | - shared_ptr<DmapPrintLayout> layout = vector_dmapPrintLayout.at(i); | |
572 | - layout->DrawData(&mClsSurfDC,DmpWmsParameters::Format::PDF); | |
573 | - } | |
396 | + scaleDenominator = (resolution / oneInchInLayoutUnits) * (1 / r) * 111000; | |
397 | + // m_dR = r *(96 / 0.0254) *111000 ;//111000 为赤道1经度等于 111000米 | |
574 | 398 | } |
575 | 399 | else |
576 | 400 | { |
577 | - cairo_surface_t *surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, | |
578 | - (int)m_width, | |
579 | - (int)m_height); | |
580 | - | |
581 | - | |
582 | - | |
583 | - //cairo_surface_set_fallback_resolution(surface); | |
584 | - //double dpix, dpiy; | |
585 | - //cairo_surface_get_fallback_resolution(surface,&dpix, &dpiy); | |
586 | - //printf("%f,%f",dpix,dpiy); | |
587 | - | |
588 | - clsCrSurf mClsSurfDC(surface); | |
589 | - DoSetBackGround(&mClsSurfDC, 0xffffffff); | |
590 | - | |
591 | - | |
592 | - for (size_t i = 0; i < vector_dmapPrintLayout.size(); i++) | |
593 | - { | |
594 | - shared_ptr<DmapPrintLayout> layout = vector_dmapPrintLayout.at(i); | |
595 | - layout->DrawData(&mClsSurfDC, DmpWmsParameters::Format::PNG); | |
596 | - } | |
597 | - | |
598 | - cairo_surface_write_to_png_stream(surface, cairo_write_func_print, ab); | |
401 | + scaleDenominator = (resolution / oneInchInLayoutUnits) * 1 / r; | |
599 | 402 | } |
600 | 403 | |
601 | - | |
404 | + return scaleDenominator; | |
602 | 405 | } |
603 | 406 | |
604 | - | |
605 | -double DmpMapPrint::RecalculateScale(double right, double left, double top, double bottom, double width, double height ) | |
606 | -{ | |
607 | - double w = right - left; | |
608 | - double h = top - bottom; | |
609 | - double oneInchInLayoutUnits = 0.0254; | |
610 | - double resolution = 96; | |
611 | - if ((w > std::pow(10, 12)) || (w < std::pow(10, -12))) | |
612 | - return false; | |
613 | - if ((h > std::pow(10, 12)) || (h < std::pow(10, -12))) | |
614 | - return false; | |
615 | - | |
616 | - long double R1 = width / w; | |
617 | - long double R2 = height / h; | |
618 | - double r = R1 < R2 ? R1 : R2; | |
619 | - if ((r > std::pow(10, 12)) || (r < std::pow(10, -12))) | |
620 | - return false; | |
621 | - | |
622 | - //m_dR = R1 < R2 ? R1 : R2; | |
623 | - double m_dR = r; | |
624 | - double m_dXdis = width / 2.0 - m_dR * (right + left) / 2.0; | |
625 | - double m_dYdis = height / 2.0 + m_dR * (top + bottom) / 2.0; | |
626 | - | |
627 | - | |
628 | - | |
629 | - | |
630 | - bool isWGS84 = left <=180 && right <180 && | |
631 | - left >= -180 && right >=-180 && | |
632 | - top < 90 && bottom <90; | |
633 | - | |
634 | - double scaleDenominator = 0; | |
635 | - if(isWGS84) | |
636 | - { | |
637 | - scaleDenominator = (resolution / oneInchInLayoutUnits)*(1/r)*111000; | |
638 | - //m_dR = r *(96 / 0.0254) *111000 ;//111000 为赤道1经度等于 111000米 | |
639 | - } | |
640 | - else | |
641 | - { | |
642 | - scaleDenominator= (resolution / oneInchInLayoutUnits) * 1/r; | |
643 | - } | |
644 | - | |
645 | - return scaleDenominator; | |
646 | -} | |
647 | - | |
648 | 407 | string DmpMapPrint::GetFilePath(string path) |
649 | 408 | { |
650 | 409 | char sz[200] = {0}; |
651 | - if(GetCurrentFolderPath(sz, sizeof(sz)) > 0) | |
410 | + if (GetCurrentFolderPath(sz, sizeof(sz)) > 0) | |
652 | 411 | { |
653 | 412 | std::string s; |
654 | 413 | s = sz; |
655 | 414 | size_t t = s.rfind('/'); |
656 | 415 | sz[t] = 0; |
657 | - if(path[0]=='/') | |
416 | + if (path[0] == '/') | |
658 | 417 | { |
659 | 418 | return path; |
660 | 419 | } |
661 | - int i=0; | |
662 | - if(path[0]=='.') | |
420 | + int i = 0; | |
421 | + if (path[0] == '.') | |
663 | 422 | { |
664 | - if(path[1]=='.') | |
423 | + if (path[1] == '.') | |
665 | 424 | { |
666 | 425 | i++; |
667 | - s= sz; | |
426 | + s = sz; | |
668 | 427 | t = s.rfind('/'); |
669 | 428 | sz[t] = 0; |
670 | 429 | } |
671 | 430 | i++; |
672 | 431 | } |
673 | - if((sz[t]=='/' || sz[t]=='\\')&& (path[i]=='/' || path[i]=='\\')) | |
432 | + if ((sz[t] == '/' || sz[t] == '\\') && (path[i] == '/' || path[i] == '\\')) | |
674 | 433 | { |
675 | 434 | i++; |
676 | 435 | } |
677 | 436 | |
678 | - int j= t; | |
679 | - for(j=t;i<path.length(); i++,j++) | |
437 | + int j = t; | |
438 | + for (j = t; i < path.length(); i++, j++) | |
680 | 439 | { |
681 | - if(path[i]=='\\') | |
440 | + if (path[i] == '\\') | |
682 | 441 | { |
683 | 442 | sz[j] = '/'; |
684 | 443 | } |
... | ... | @@ -686,32 +445,29 @@ double DmpMapPrint::RecalculateScale(double right, double left, double top, doub |
686 | 445 | { |
687 | 446 | sz[j] = path[i]; |
688 | 447 | } |
689 | - | |
690 | 448 | } |
691 | - sz[j] =0; | |
692 | - //strcat(sz, path.c_str()); | |
449 | + sz[j] = 0; | |
450 | + // strcat(sz, path.c_str()); | |
693 | 451 | return sz; |
694 | 452 | } |
695 | - else return 0; | |
696 | - | |
453 | + else | |
454 | + return 0; | |
697 | 455 | } |
698 | 456 | |
699 | - int DmpMapPrint::GetCurrentFolderPath(char* processdir, size_t len) | |
457 | + int DmpMapPrint::GetCurrentFolderPath(char *processdir, size_t len) | |
700 | 458 | { |
701 | - char* path_end; | |
702 | - if (readlink("/proc/self/exe", processdir, len) <= 0) | |
703 | - return -1; | |
704 | - path_end = strrchr(processdir, '/'); | |
705 | - if (path_end == NULL) | |
706 | - return -1; | |
707 | - ++path_end; | |
708 | - //strcpy(processname, path_end); | |
709 | - *path_end = '\0'; | |
710 | - return (size_t)(path_end - processdir); | |
459 | + char *path_end; | |
460 | + if (readlink("/proc/self/exe", processdir, len) <= 0) | |
461 | + return -1; | |
462 | + path_end = strrchr(processdir, '/'); | |
463 | + if (path_end == NULL) | |
464 | + return -1; | |
465 | + ++path_end; | |
466 | + // strcpy(processname, path_end); | |
467 | + *path_end = '\0'; | |
468 | + return (size_t)(path_end - processdir); | |
711 | 469 | } |
712 | 470 | |
713 | - | |
714 | - | |
715 | 471 | bool DmpMapPrint::DoSetBackGround(clsCrSurf *pClsCS, int iColor) |
716 | 472 | { |
717 | 473 | cairo_surface_t *surface = pClsCS->m_pSurf; |
... | ... | @@ -721,9 +477,9 @@ double DmpMapPrint::RecalculateScale(double right, double left, double top, doub |
721 | 477 | //画一个矩形背景 |
722 | 478 | cairo_rectangle(cr, 0, 0, surf_w, surf_h); |
723 | 479 | double r, g, b, a; |
724 | - MyUtil::ToCairoColor(iColor, r, g, b, a); | |
725 | - cairo_set_source_rgb(cr, r, g, b); | |
480 | + //MyUtil::ToCairoColor(iColor, r, g, b, a); | |
481 | + cairo_set_source_rgb(cr, 255, 255, 255); | |
726 | 482 | cairo_fill(cr); |
727 | 483 | return true; |
728 | - }*/ | |
484 | + } | |
729 | 485 | } |
\ No newline at end of file | ... | ... |
... | ... | @@ -7,8 +7,8 @@ |
7 | 7 | * copyright: 广州城市信息研究所有限公司 |
8 | 8 | ***************************************************************************/ |
9 | 9 | |
10 | -#ifndef __dmpprint_h__ | |
11 | -#define __dmpprint_h__ | |
10 | +#ifndef __dmpmapprint_h__ | |
11 | +#define __dmpmapprint_h__ | |
12 | 12 | |
13 | 13 | #include <string> |
14 | 14 | #include <string.h> |
... | ... | @@ -16,14 +16,18 @@ |
16 | 16 | #include <map> |
17 | 17 | #include <math.h> |
18 | 18 | #include "dmpproject.h" |
19 | -#include "../dmpwmsrenderer.h" | |
20 | - | |
21 | 19 | #include "clsCrSurf.h" |
22 | 20 | #include "clsRect.h" |
23 | 21 | #include "clsUtil.h" |
22 | +#include <boost/property_tree/ptree.hpp> | |
23 | +#include <boost/property_tree/xml_parser.hpp> | |
24 | +#include <boost/typeof/typeof.hpp> | |
25 | +#include "dmpprintlayout.h" | |
26 | +#include "dmpprintparameter.h" | |
27 | +#include "../dmpwmsrenderer.h" | |
28 | +#include "../dmpwmsparameters.h" | |
24 | 29 | using namespace std; |
25 | 30 | using namespace DmapCore_30; |
26 | - | |
27 | 31 | namespace DmpWms |
28 | 32 | { |
29 | 33 | class DmpMapPrint |
... | ... | @@ -41,7 +45,7 @@ namespace DmpWms |
41 | 45 | int m_wkid; |
42 | 46 | int m_dpi; |
43 | 47 | double m_scale; |
44 | - int isPicture; | |
48 | + DmpWmsParameters::Format format; | |
45 | 49 | |
46 | 50 | private: |
47 | 51 | bool DoSetBackGround(clsCrSurf *pClsCS, int iColor); |
... | ... | @@ -50,29 +54,28 @@ namespace DmpWms |
50 | 54 | int GetCurrentFolderPath(char *processdir, size_t len); |
51 | 55 | bool InitTemplateValue(string templateValue); |
52 | 56 | bool ToPrint(std::string &responseData); |
53 | - | |
54 | 57 | public: |
55 | - DmpMapPrint(); | |
58 | + DmpMapPrint(DmpWmsParameters::Format outformat); | |
56 | 59 | |
57 | - bool getPrint(std::string &responseData, DmpProject* project, const char *xml, string servername); | |
58 | - bool getPrint(std::string &responseData, DmpProject* project, const char *printTemp, const char *bbox); | |
60 | + bool getPrint(std::string &responseData,const DmpProject* project,const string & xml, const string& servername); | |
61 | + bool getPrint(std::string &responseData,const DmpProject* project, const string& servername, const char *printTemp, const char *bbox); | |
59 | 62 | |
60 | 63 | bool getPrintLayout(std::string &responseData, |
61 | - DmpProject* project, | |
64 | + const DmpProject* project, | |
62 | 65 | const char *xml, |
63 | 66 | const char *bbox); |
64 | 67 | |
65 | 68 | bool getPrintTempFile(std::string &responseData, |
66 | - DmpProject* project, | |
69 | + const DmpProject* project, | |
67 | 70 | const char *tempName, |
68 | 71 | const char *bbox); |
69 | 72 | |
70 | - bool Test(std::string &responseData, DmpProject* project, string servername); | |
73 | + // bool Test(std::string &responseData, DmpProject* project, string servername); | |
71 | 74 | |
72 | - // vector<shared_ptr<DmapPrintLayout>> vector_dmapPrintLayout; | |
75 | + vector<shared_ptr<DmpPrintLayout>> vector_DmpPrintLayout; | |
73 | 76 | // vector<shared_ptr<OperationalLayer>> vector_operationalLayer; |
74 | 77 | |
75 | 78 | }; |
76 | 79 | } |
77 | 80 | |
78 | -#endif // __dmpprint_h__ | |
81 | +#endif // __dmpmapprint_h__ | ... | ... |
... | ... | @@ -7,11 +7,6 @@ |
7 | 7 | * copyright: 广州城市信息研究所有限公司 |
8 | 8 | ***************************************************************************/ |
9 | 9 | #include "dmpprintlayout.h" |
10 | -#include "dmpprintrect.h" | |
11 | -#include "dmpprintscale.h" | |
12 | -#include "dmpprinttext.h" | |
13 | -#include "dmpprintcompass.h" | |
14 | -#include "dmpprintwmsservice.h" | |
15 | 10 | namespace DmpWms |
16 | 11 | { |
17 | 12 | bool DmpPrintLayout::DrawData(clsCrSurf* pClsCS,DmpWmsParameters::Format format) |
... | ... | @@ -28,7 +23,7 @@ namespace DmpWms |
28 | 23 | |
29 | 24 | bool DmpPrintLayout::ReadXML(boost::property_tree::ptree &pt, shared_ptr<DmpPrintParameter> pPrintParameter,string& errorstr) |
30 | 25 | { |
31 | - try | |
26 | + /* try | |
32 | 27 | { |
33 | 28 | boost::property_tree::ptree ptbound = pt.get_child("bound"); |
34 | 29 | this->ReadXmlAttribute(ptbound, showbound_, "show"); |
... | ... | @@ -43,7 +38,7 @@ namespace DmpWms |
43 | 38 | catch(const std::exception& e) |
44 | 39 | { |
45 | 40 | |
46 | - } | |
41 | + }*/ | |
47 | 42 | |
48 | 43 | try |
49 | 44 | { | ... | ... |
... | ... | @@ -10,6 +10,11 @@ |
10 | 10 | #ifndef __dmpprintlayout_h__ |
11 | 11 | #define __dmpprintlayout_h__ |
12 | 12 | #include "dmpprintlayer.h" |
13 | +#include "dmpprintrect.h" | |
14 | +#include "dmpprintscale.h" | |
15 | +#include "dmpprinttext.h" | |
16 | +#include "dmpprintcompass.h" | |
17 | +#include "dmpprintwmsservice.h" | |
13 | 18 | #include <vector> |
14 | 19 | namespace DmpWms |
15 | 20 | { | ... | ... |
请
注册
或
登录
后发表评论