正在显示
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 | { | ... | ... |
请
注册
或
登录
后发表评论