提交 fc26cc3973c7f6004971fc6adbf98bfb85ec88e0

作者 qingxiongf
1 个父辈 9b022cef

编辑服务

@@ -50,6 +50,7 @@ DmpProject::~DmpProject() @@ -50,6 +50,7 @@ DmpProject::~DmpProject()
50 } 50 }
51 } 51 }
52 mapLayers_.clear(); 52 mapLayers_.clear();
  53 + vectorLayers_.clear();
53 } 54 }
54 55
55 bool DmpProject::Read(const std::string &data) 56 bool DmpProject::Read(const std::string &data)
@@ -100,6 +101,7 @@ bool DmpProject::Read(const std::string &data) @@ -100,6 +101,7 @@ bool DmpProject::Read(const std::string &data)
100 std::string name = mapLayer->name(); 101 std::string name = mapLayer->name();
101 boost::to_upper(name); 102 boost::to_upper(name);
102 mapLayers_[name] = mapLayer; 103 mapLayers_[name] = mapLayer;
  104 + vectorLayers_.push_back(mapLayer);
103 } 105 }
104 else 106 else
105 { 107 {
@@ -138,18 +140,17 @@ bool DmpProject::WritePtree(boost::property_tree::ptree& ptDoc) @@ -138,18 +140,17 @@ bool DmpProject::WritePtree(boost::property_tree::ptree& ptDoc)
138 ptDmap.add_child("projectCrs",ptProjectCrs); 140 ptDmap.add_child("projectCrs",ptProjectCrs);
139 141
140 boost::property_tree::ptree ptProjectlayers; 142 boost::property_tree::ptree ptProjectlayers;
141 -  
142 - std::map<std::string, DmpMapLayer *>::iterator iter = mapLayers_.begin();  
143 - for (; iter != mapLayers_.end(); ++iter) 143 +
  144 + for(int i =0; i< vectorLayers_.size(); i++)
144 { 145 {
145 - DmpMapLayer *mapLayer = iter->second; 146 + DmpMapLayer *mapLayer = vectorLayers_[i];
146 if (mapLayer && mapLayer->type() == DmpMapLayerType::VectorLayer) 147 if (mapLayer && mapLayer->type() == DmpMapLayerType::VectorLayer)
147 { 148 {
148 boost::property_tree::ptree ptlayer; 149 boost::property_tree::ptree ptlayer;
149 ptlayer.add("<xmlattr>.type", "1"); 150 ptlayer.add("<xmlattr>.type", "1");
150 - DmpVectorLayer *vectorMapLayer =(DmpVectorLayer *) mapLayer; 151 + DmpVectorLayer *vectorMapLayer = (DmpVectorLayer *)mapLayer;
151 vectorMapLayer->writeXml(ptlayer); 152 vectorMapLayer->writeXml(ptlayer);
152 - ptProjectlayers.add_child("maplayer",ptlayer); 153 + ptProjectlayers.add_child("maplayer", ptlayer);
153 } 154 }
154 } 155 }
155 156
@@ -189,6 +190,11 @@ std::map<std::string, DmpMapLayer*> DmpProject::mapLayers() const @@ -189,6 +190,11 @@ std::map<std::string, DmpMapLayer*> DmpProject::mapLayers() const
189 return mapLayers_; 190 return mapLayers_;
190 } 191 }
191 192
  193 +std::vector<DmpMapLayer*> DmpProject::vectorLayers() const
  194 +{
  195 + return vectorLayers_;
  196 +}
  197 +
192 DmpMapLayer *DmpProject::getLayer(const std::string &layerName) const 198 DmpMapLayer *DmpProject::getLayer(const std::string &layerName) const
193 { 199 {
194 if(layerName.empty()){ 200 if(layerName.empty()){
@@ -31,6 +31,7 @@ class CORE_EXPORT DmpProject @@ -31,6 +31,7 @@ class CORE_EXPORT DmpProject
31 std::string WriteJson(); 31 std::string WriteJson();
32 DmpCoordinateReferenceSystem crs() const; 32 DmpCoordinateReferenceSystem crs() const;
33 std::map<std::string, DmpMapLayer*> mapLayers() const; 33 std::map<std::string, DmpMapLayer*> mapLayers() const;
  34 + std::vector<DmpMapLayer*> vectorLayers() const;
34 DmpMapLayer* getLayer(const std::string &layerName) const; 35 DmpMapLayer* getLayer(const std::string &layerName) const;
35 DmpMapLayer* getLayer()const; 36 DmpMapLayer* getLayer()const;
36 private: 37 private:
@@ -40,6 +41,8 @@ class CORE_EXPORT DmpProject @@ -40,6 +41,8 @@ class CORE_EXPORT DmpProject
40 std::string file_; 41 std::string file_;
41 DmpCoordinateReferenceSystem crs_; 42 DmpCoordinateReferenceSystem crs_;
42 std::map<std::string, DmpMapLayer*> mapLayers_; 43 std::map<std::string, DmpMapLayer*> mapLayers_;
  44 + std::vector<DmpMapLayer*> vectorLayers_;
  45 +
43 }; 46 };
44 47
45 #endif //__dmpproject_h__ 48 #endif //__dmpproject_h__
@@ -62,9 +62,9 @@ bool DmpVectorLayer::readXml(const boost::property_tree::ptree &layerNode) @@ -62,9 +62,9 @@ bool DmpVectorLayer::readXml(const boost::property_tree::ptree &layerNode)
62 wkbType_ = DmpWkbTypes::Point; 62 wkbType_ = DmpWkbTypes::Point;
63 else if (boost::iequals(wkbTypeString_, "MULTIPOINT")) 63 else if (boost::iequals(wkbTypeString_, "MULTIPOINT"))
64 wkbType_ = DmpWkbTypes::MultiPoint; 64 wkbType_ = DmpWkbTypes::MultiPoint;
65 - else if (boost::iequals(wkbTypeString_, "LINESTRING")) 65 + else if (boost::iequals(wkbTypeString_, "LINESTRING") || boost::iequals(wkbTypeString_, "LINE") )
66 wkbType_ = DmpWkbTypes::LineString; 66 wkbType_ = DmpWkbTypes::LineString;
67 - else if (boost::iequals(wkbTypeString_, "MULTILINESTRING")) 67 + else if (boost::iequals(wkbTypeString_, "MULTILINESTRING")|| boost::iequals(wkbTypeString_, "MULTILINE") )
68 wkbType_ = DmpWkbTypes::MultiLineString; 68 wkbType_ = DmpWkbTypes::MultiLineString;
69 else if (boost::iequals(wkbTypeString_, "POLYGON")) 69 else if (boost::iequals(wkbTypeString_, "POLYGON"))
70 wkbType_ = DmpWkbTypes::Polygon; 70 wkbType_ = DmpWkbTypes::Polygon;
@@ -93,6 +93,13 @@ bool DmpVectorLayer::writeXml(boost::property_tree::ptree &layerNode) @@ -93,6 +93,13 @@ bool DmpVectorLayer::writeXml(boost::property_tree::ptree &layerNode)
93 layerNode.add("<xmlattr>.id", id_); 93 layerNode.add("<xmlattr>.id", id_);
94 layerNode.add("<xmlattr>.name", name_); 94 layerNode.add("<xmlattr>.name", name_);
95 layerNode.add("<xmlattr>.alias", title_); 95 layerNode.add("<xmlattr>.alias", title_);
  96 +
  97 + layerNode.add("<xmlattr>.schema",schema_ );
  98 + layerNode.add("<xmlattr>.geomfield",geom_ );
  99 + layerNode.add("<xmlattr>.featurecount",featurecount_ );
  100 + layerNode.add("<xmlattr>.geometry",wkbTypeString_ );
  101 + layerNode.add("<xmlattr>.srid",srid_ );
  102 +
96 103
97 boost::property_tree::ptree ptExtent; 104 boost::property_tree::ptree ptExtent;
98 ptExtent.add("xmin", extent_.xmin()); 105 ptExtent.add("xmin", extent_.xmin());
@@ -162,11 +169,14 @@ bool DmpVectorLayer::writejson(std::string &json) @@ -162,11 +169,14 @@ bool DmpVectorLayer::writejson(std::string &json)
162 sprintf(buff_minscale, "%.0f", this->minScale()); 169 sprintf(buff_minscale, "%.0f", this->minScale());
163 } 170 }
164 //Display scale setting type="1" geometry="Point" alwaysShow="true" maxScale="0" maxScale="50000"> 171 //Display scale setting type="1" geometry="Point" alwaysShow="true" maxScale="0" maxScale="50000">
  172 +
165 char resultbuff[1000]; 173 char resultbuff[1000];
166 string json_source = this->source(); 174 string json_source = this->source();
167 DmapCore_30::clsUtil::ToJSONString(json_source); 175 DmapCore_30::clsUtil::ToJSONString(json_source);
168 sprintf(resultbuff, 176 sprintf(resultbuff,
169 - R"({"workspace":"","type":"1","dbsource":"%s","data":"","schema":"%s","alias":"%s","name":"%s","id":"%s","filter":"%s","visible":"%s","tag":"","minScale":"%s","maxScale":"%s","geometry":"%s","alwaysShow":"%s")", 177 + R"({"workspace":"","type":"1","dbsource":"%s","data":"","schema":"%s",
  178 +"alias":"%s","name":"%s","id":"%s","filter":"%s","visible":"%s","tag":"","minScale":"%s",
  179 +"maxScale":"%s","geometry":"%s","alwaysShow":"%s","geomfield":"%s","srid":"%s","featurecount":"%ld")",
170 json_source.c_str(), 180 json_source.c_str(),
171 this->schema().c_str(), 181 this->schema().c_str(),
172 this->title().c_str(), 182 this->title().c_str(),
@@ -176,7 +186,11 @@ bool DmpVectorLayer::writejson(std::string &json) @@ -176,7 +186,11 @@ bool DmpVectorLayer::writejson(std::string &json)
176 "true", 186 "true",
177 buff_minscale, buff_maxscale, 187 buff_minscale, buff_maxscale,
178 shapeTypeString.c_str(), 188 shapeTypeString.c_str(),
179 - alwaysShow ? "true" : "false"); 189 + alwaysShow ? "true" : "false",
  190 + geom_.c_str(),
  191 + srid_.c_str(),
  192 + featurecount_
  193 + );
180 194
181 json.append(resultbuff); 195 json.append(resultbuff);
182 if (this->renderer_30_ != nullptr) 196 if (this->renderer_30_ != nullptr)
@@ -23,10 +23,9 @@ namespace DmapCore_30 @@ -23,10 +23,9 @@ namespace DmapCore_30
23 m_iN = 0; 23 m_iN = 0;
24 } 24 }
25 25
26 -  
27 - void DataCollection::InitDataCollection(PGresult *res, int shapeType, int imageWidth, int imageHeight,  
28 - int subset, double r,  
29 - double dScaleDenominator, double x_dis, double y_dis) 26 + void DataCollection::InitDataCollection(PGresult *res, int shapeType, int imageWidth, int imageHeight,
  27 + int subset, double r,
  28 + double dScaleDenominator, double x_dis, double y_dis)
30 { 29 {
31 //InitDataCollection(); 30 //InitDataCollection();
32 m_iN = 1; 31 m_iN = 1;
@@ -47,7 +46,7 @@ namespace DmapCore_30 @@ -47,7 +46,7 @@ namespace DmapCore_30
47 { 46 {
48 m_subset = subset + 2; 47 m_subset = subset + 2;
49 } 48 }
50 - 49 +
51 this->CollectFieldName(res); 50 this->CollectFieldName(res);
52 51
53 switch (shapeType) 52 switch (shapeType)
@@ -56,6 +55,7 @@ namespace DmapCore_30 @@ -56,6 +55,7 @@ namespace DmapCore_30
56 MallocForPoint(res); 55 MallocForPoint(res);
57 break; 56 break;
58 case GeometryType_MultiPoint: 57 case GeometryType_MultiPoint:
  58 + MallocForPoint(res);
59 break; 59 break;
60 case GeometryType_LineString: 60 case GeometryType_LineString:
61 MallocForLineStringGeom(res); 61 MallocForLineStringGeom(res);
@@ -70,14 +70,13 @@ namespace DmapCore_30 @@ -70,14 +70,13 @@ namespace DmapCore_30
70 MallocForPolygonForGeom(res); 70 MallocForPolygonForGeom(res);
71 break; 71 break;
72 default: 72 default:
73 - 73 +
74 break; 74 break;
75 } 75 }
76 //CollectAllField(res); 76 //CollectAllField(res);
77 } 77 }
78 78
79 -  
80 -/* 79 + /*
81 void DataCollection::InitDataCollection(Geometry *geom, double r, double dScaleDenominator, 80 void DataCollection::InitDataCollection(Geometry *geom, double r, double dScaleDenominator,
82 double x_dis, double y_dis) 81 double x_dis, double y_dis)
83 { 82 {
@@ -139,7 +138,6 @@ namespace DmapCore_30 @@ -139,7 +138,6 @@ namespace DmapCore_30
139 } 138 }
140 }*/ 139 }*/
141 140
142 -  
143 DataCollection::~DataCollection() 141 DataCollection::~DataCollection()
144 { 142 {
145 //cout<<"free begin;" <<endl; 143 //cout<<"free begin;" <<endl;
@@ -179,8 +177,6 @@ namespace DmapCore_30 @@ -179,8 +177,6 @@ namespace DmapCore_30
179 //cout<<"free end;" <<endl; 177 //cout<<"free end;" <<endl;
180 } 178 }
181 179
182 -  
183 -  
184 /* 180 /*
185 Malloc PGresult 181 Malloc PGresult
186 */ 182 */
@@ -264,6 +260,94 @@ namespace DmapCore_30 @@ -264,6 +260,94 @@ namespace DmapCore_30
264 return true; 260 return true;
265 } 261 }
266 262
  263 +
  264 + /*
  265 + Malloc PGresult
  266 + */
  267 + bool DataCollection::MallocForPointGeom(PGresult *res)
  268 + {
  269 + m_iStructType = clsStruct::Struct_Point;
  270 +
  271 + int n_fields = PQnfields(res);
  272 + map<int, PointClass *> map_Point;
  273 +
  274 + for (size_t i = 0; i < m_iPartCount; i++)
  275 + {
  276 + unsigned char *here = (unsigned char *)PQgetvalue(res, i, 0);
  277 + unsigned char hasZorSrsid = ((unsigned char *)(here + 4))[0] / 16;
  278 + unsigned char hasZ = hasZorSrsid / 8;
  279 + unsigned char hasSrsid = hasZorSrsid % 8;
  280 +
  281 + int not_big = here[0];
  282 + here++;
  283 + int shapetype = ((int *)here)[0];
  284 + here += 4;
  285 + if (hasSrsid)
  286 + here += 4;
  287 +
  288 + int size = ((int *)here)[0];
  289 +
  290 +
  291 + double x = ((double *)here)[0];
  292 + here += 8; // clsUtil::ReadDouble(here, not_big);
  293 + double y = ((double *)here)[0];
  294 + here += 8; // clsUtil::ReadDouble(here, not_big);
  295 + double x0 = 0, y0 = 0;
  296 + this->ToScale(x, y, x0, y0);
  297 +
  298 + int key = ((int)(x0 / m_subset)) * 10000 + ((int)(y0 / m_subset));
  299 + if (map_Point.find(key) == map_Point.end())
  300 + {
  301 + PointClass *pointClass = new PointClass();
  302 + pointClass->x = x0;
  303 + pointClass->y = y0;
  304 + /*clsStruct::POINT* pp0 = new clsStruct::POINT();
  305 + pp0->x = x0;
  306 + pp0->y = y0;*/
  307 + map_Point[key] = pointClass;
  308 + for (int i0 = 1; i0 < n_fields; i0++)
  309 + {
  310 + char *vc = PQgetvalue(res, i, i0);
  311 + pointClass->m_pdata.push_back(vc);
  312 + }
  313 + }
  314 + }
  315 +
  316 + clsStruct::POINT *pp = (clsStruct::POINT *)malloc(sizeof(clsStruct::POINT) * map_Point.size());
  317 + if (pp == NULL)
  318 + return false;
  319 + int index = 0;
  320 +
  321 + //创建预留空间
  322 + m_vAllField.resize(map_Point.size());
  323 + for (int i = 0; i < map_Point.size(); i++)
  324 + m_vAllField[i].resize(n_fields - 1); //这里是不包含shape 数据的
  325 + //开辟预留空间后, 可以直接赋值,不需要 pushback
  326 +
  327 + for (map<int, PointClass *>::iterator iter = map_Point.begin(); iter != map_Point.end(); iter++)
  328 + {
  329 + PointClass *p = iter->second;
  330 + pp[index].x = p->x;
  331 + pp[index].y = p->y;
  332 + for (int j = 0; j < n_fields - 1; j++) //这里从第二列开始
  333 + {
  334 + m_vAllField[index][j] = p->m_pdata.at(j);
  335 + }
  336 + p->m_pdata.clear();
  337 + delete p;
  338 + iter->second = NULL;
  339 + index++;
  340 + }
  341 +
  342 + this->m_iPartCount = map_Point.size();
  343 +
  344 + map_Point.clear();
  345 +
  346 + m_pData = pp;
  347 + return true;
  348 + }
  349 +
  350 +
267 bool DataCollection::MallocForLineStringGeom(PGresult *res) 351 bool DataCollection::MallocForLineStringGeom(PGresult *res)
268 { 352 {
269 m_iStructType = clsStruct::Struct_MLine; 353 m_iStructType = clsStruct::Struct_MLine;
@@ -293,7 +377,7 @@ namespace DmapCore_30 @@ -293,7 +377,7 @@ namespace DmapCore_30
293 //if (shapetype < 0) isLineZ = true; 377 //if (shapetype < 0) isLineZ = true;
294 if (geom_type == DCGeometryType::GeometryType_LineString) 378 if (geom_type == DCGeometryType::GeometryType_LineString)
295 { 379 {
296 - int nLine = 1;//clsUtil::ReadInt(here, not_big); 380 + int nLine = 1; //clsUtil::ReadInt(here, not_big);
297 clsStruct::LINE *pPath = (clsStruct::LINE *)malloc(sizeof(clsStruct::LINE) * nLine); 381 clsStruct::LINE *pPath = (clsStruct::LINE *)malloc(sizeof(clsStruct::LINE) * nLine);
298 if (pPath == 0) 382 if (pPath == 0)
299 continue; 383 continue;
@@ -472,8 +556,6 @@ namespace DmapCore_30 @@ -472,8 +556,6 @@ namespace DmapCore_30
472 return true; 556 return true;
473 } 557 }
474 558
475 -  
476 -  
477 bool DataCollection::PolygonIsLessThanOnePixel(unsigned char *here, int not_big1) 559 bool DataCollection::PolygonIsLessThanOnePixel(unsigned char *here, int not_big1)
478 { 560 {
479 double dpix = 1 / this->m_dR; 561 double dpix = 1 / this->m_dR;
@@ -1138,7 +1220,7 @@ namespace DmapCore_30 @@ -1138,7 +1220,7 @@ namespace DmapCore_30
1138 return true; 1220 return true;
1139 } 1221 }
1140 1222
1141 -/* 1223 + /*
1142 bool DataCollection::MallocForPoint(Point *p) 1224 bool DataCollection::MallocForPoint(Point *p)
1143 { 1225 {
1144 m_iStructType = clsStruct::Struct_Point; 1226 m_iStructType = clsStruct::Struct_Point;
@@ -1598,7 +1680,7 @@ namespace DmapCore_30 @@ -1598,7 +1680,7 @@ namespace DmapCore_30
1598 return point; 1680 return point;
1599 } 1681 }
1600 shared_ptr<PointClass> point(new PointClass()); 1682 shared_ptr<PointClass> point(new PointClass());
1601 - return point; 1683 + return point;
1602 } 1684 }
1603 1685
1604 shared_ptr<PolygonClass> DataCollection::GetDataLine(unsigned char *vc) 1686 shared_ptr<PolygonClass> DataCollection::GetDataLine(unsigned char *vc)
@@ -259,6 +259,7 @@ upper表示使用大端点,不使用小端点 @@ -259,6 +259,7 @@ upper表示使用大端点,不使用小端点
259 bool MallocForPolygon(PGresult *res); 259 bool MallocForPolygon(PGresult *res);
260 bool MallocForMultiPolygon(PGresult* res); 260 bool MallocForMultiPolygon(PGresult* res);
261 261
  262 + bool MallocForPointGeom(PGresult *res);
262 bool MallocForPolygonForGeom(PGresult *res); 263 bool MallocForPolygonForGeom(PGresult *res);
263 bool MallocForLineStringGeom(PGresult *res); 264 bool MallocForLineStringGeom(PGresult *res);
264 265
@@ -39,7 +39,7 @@ namespace DmapCore_30 @@ -39,7 +39,7 @@ namespace DmapCore_30
39 { 39 {
40 double r = data->m_dScaleDenominator; 40 double r = data->m_dScaleDenominator;
41 //double r = r__ / (3779.52755905); 41 //double r = r__ / (3779.52755905);
42 - if (r <m_dLower || (r > m_dUpper && m_dUpper< 100000000) || m_pRen == 0) 42 + if (r <m_dLower || (r > m_dUpper && m_dUpper< 10000000000) || m_pRen == 0)
43 return false; 43 return false;
44 return m_pRen->DrawData(pClsCS, data, pFlag); 44 return m_pRen->DrawData(pClsCS, data, pFlag);
45 } 45 }
@@ -13,184 +13,217 @@ @@ -13,184 +13,217 @@
13 #include <string> 13 #include <string>
14 #include <boost/asio.hpp> 14 #include <boost/asio.hpp>
15 15
16 -  
17 using boost::asio::ip::tcp; 16 using boost::asio::ip::tcp;
18 17
19 namespace mapserver 18 namespace mapserver
20 -{  
21 -  
22 -void DmpMapServerUtil::responseGml(shared_ptr<DmpPgsql> pPgsqlConn, std::string &responseData,const string& layerName,const std::string &srid)  
23 { 19 {
24 -  
25 -// rs->PrepareFieldhead(); //获得了结果集的字段类型  
26 - int shapeType = -1;  
27 -  
28 - double xg1, yg1, xg2, yg2;  
29 - int havegSet = 0;  
30 - int count = 0;  
31 - int pointCountTemp = 0;  
32 - char buff[5000] = {0};  
33 -  
34 - responseData.append("<?xml version=\"1.0\" encoding=\"utf-8\" ?><wfs:FeatureCollection ");  
35 - responseData.append("xmlns:gims=\"http://www.esri.com/esri\" xmlns:gml=\"http://www.opengis.net/gml\" xmlns:wfs=\"http://www.opengis.net/wfs\" xmlns:ogc=\"http://www.opengis.net/ogc\">");  
36 -  
37 -  
38 - //bool paff = parseString.affine;  
39 - try 20 +
  21 + void DmpMapServerUtil::responseGml(shared_ptr<DmpPgsql> pPgsqlConn, std::string &responseData, const string &layerName, const std::string &srid)
40 { 22 {
41 - int fieldsCount = pPgsqlConn->GetFieldCount();  
42 - for (; pPgsqlConn->next();) 23 +
  24 + // rs->PrepareFieldhead(); //获得了结果集的字段类型
  25 + int shapeType = -1;
  26 +
  27 + double xg1, yg1, xg2, yg2;
  28 + int havegSet = 0;
  29 + int count = 0;
  30 + int pointCountTemp = 0;
  31 + char buff[5000] = {0};
  32 +
  33 + responseData.append("<?xml version=\"1.0\" encoding=\"utf-8\" ?><wfs:FeatureCollection ");
  34 + responseData.append("xmlns:gims=\"http://www.esri.com/esri\" xmlns:gml=\"http://www.opengis.net/gml\" xmlns:wfs=\"http://www.opengis.net/wfs\" xmlns:ogc=\"http://www.opengis.net/ogc\">");
  35 +
  36 + //bool paff = parseString.affine;
  37 + try
43 { 38 {
44 - // css++;  
45 - //if(css!=24)continue;  
46 - //break;  
47 - //string geometry = "";  
48 - //string properties = "";  
49 - responseData.append("<gims:featureMember>");  
50 - sprintf(buff, "<gims:%s fid=\"%s.%d\">", layerName.c_str(), layerName.c_str(), count + 1);  
51 - responseData.append(buff);  
52 - //responseData.append("\r\n");  
53 -  
54 - //columns[md[ i ].getString(MetaData::ATTR_NAME)] = i;  
55 - for (int i = 0; i < fieldsCount; i++) 39 + int fieldsCount = pPgsqlConn->GetFieldCount();
  40 + for (; pPgsqlConn->next();)
56 { 41 {
57 - const char *sfieldName = pPgsqlConn->GetFieldName(i); //pPgsqlConn->field_name[i].c_str();  
58 - if (sfieldName == 0)  
59 - {  
60 - break;  
61 - }  
62 - if (strncmp(sfieldName, "RN_RN", 5) == 0)  
63 - continue;  
64 - std::string strFieldName = sfieldName;  
65 - //DmapDll::StringHelp::ToXMLString(strFieldName);  
66 -  
67 - if (strFieldName == "geometry_as_gml")  
68 - {  
69 - const char* value = pPgsqlConn->getString(i);  
70 - if(value)  
71 - responseData.append(value);  
72 - continue;  
73 - }  
74 - else 42 + // css++;
  43 + //if(css!=24)continue;
  44 + //break;
  45 + //string geometry = "";
  46 + //string properties = "";
  47 + responseData.append("<gims:featureMember>");
  48 + sprintf(buff, "<gims:%s fid=\"%s.%d\">", layerName.c_str(), layerName.c_str(), count + 1);
  49 + responseData.append(buff);
  50 + //responseData.append("\r\n");
  51 +
  52 + //columns[md[ i ].getString(MetaData::ATTR_NAME)] = i;
  53 + for (int i = 0; i < fieldsCount; i++)
75 { 54 {
76 - const char *v = pPgsqlConn->getString(i);  
77 - sprintf(buff, "<gims:%s>%s</gims:%s>", strFieldName.c_str(), v, strFieldName.c_str());  
78 - //properties += buff;  
79 - responseData.append(buff); 55 + const char *sfieldName = pPgsqlConn->GetFieldName(i); //pPgsqlConn->field_name[i].c_str();
  56 + if (sfieldName == 0)
  57 + {
  58 + break;
  59 + }
  60 + if (strncmp(sfieldName, "RN_RN", 5) == 0)
  61 + continue;
  62 + std::string strFieldName = sfieldName;
  63 + //DmapDll::StringHelp::ToXMLString(strFieldName);
  64 +
  65 + if (strFieldName == "geometry_as_gml")
  66 + {
  67 + const char *value = pPgsqlConn->getString(i);
  68 + if (value)
  69 + responseData.append(value);
  70 + continue;
  71 + }
  72 + else
  73 + {
  74 + const char *v = pPgsqlConn->getString(i);
  75 + sprintf(buff, "<gims:%s>%s</gims:%s>", strFieldName.c_str(), v, strFieldName.c_str());
  76 + //properties += buff;
  77 + responseData.append(buff);
  78 + }
80 } 79 }
81 -  
82 - }  
83 - //tickAA=GetTickCount(); 80 + //tickAA=GetTickCount();
84 81
85 - sprintf(buff, "</gims:%s>\r",layerName.c_str());  
86 - responseData.append(buff);  
87 - responseData.append("</gims:featureMember>"); 82 + sprintf(buff, "</gims:%s>\r", layerName.c_str());
  83 + responseData.append(buff);
  84 + responseData.append("</gims:featureMember>");
88 85
89 - count++;  
90 - //if(pointCount>25)break; 86 + count++;
  87 + //if(pointCount>25)break;
91 88
92 - if (pointCountTemp > 2000)  
93 - break;  
94 - //Sleep(5000);  
95 - // break; 89 + if (pointCountTemp > 2000)
  90 + break;
  91 + //Sleep(5000);
  92 + // break;
  93 + }
  94 + }
  95 + catch (...)
  96 + {
96 } 97 }
97 - }  
98 - catch (...)  
99 - {  
100 -  
101 - }  
102 -  
103 - //sprintf(buff, "numberMatched=\"%ld\" numberReturned=\"%ld\" ", count, count);  
104 - //responseData.append(insertBuf, sql, strlen(sql));  
105 98
106 - 99 + //sprintf(buff, "numberMatched=\"%ld\" numberReturned=\"%ld\" ", count, count);
  100 + //responseData.append(insertBuf, sql, strlen(sql));
107 101
108 - responseData.append("</wfs:FeatureCollection>"); 102 + responseData.append("</wfs:FeatureCollection>");
109 103
110 - return;  
111 -} 104 + return;
  105 + }
112 106
113 - //以GeoJson的形式返回  
114 -void DmpMapServerUtil::responseGeojson(shared_ptr<DmpPgsql> pPgsqlConn, std::string &responseData,const string& layerName,const string& srid)  
115 -{  
116 - double xg1, yg1, xg2, yg2;  
117 - int havegSet = 0;  
118 - int count = 0;  
119 - int pointCountTemp = 0;  
120 - std::string stringTime;  
121 - char buff[5000] = {0};  
122 -  
123 - responseData.append(R"({"type":"FeatureCollection","features":[)");  
124 - try 107 + //以GeoJson的形式返回
  108 + void DmpMapServerUtil::responseGeojson(shared_ptr<DmpPgsql> pPgsqlConn, std::string &responseData, const string &layerName, const string &srid)
125 { 109 {
126 - int fieldsCount = pPgsqlConn->GetFieldCount();  
127 - for (int featureIndex = 0; pPgsqlConn->next(); featureIndex++) 110 + double xg1, yg1, xg2, yg2;
  111 + int havegSet = 0;
  112 + int count = 0;
  113 + int pointCountTemp = 0;
  114 + std::string stringTime;
  115 + char buff[5000] = {0};
  116 +
  117 + responseData.append(R"({"type":"FeatureCollection","features":[)");
  118 + try
128 { 119 {
129 - if (featureIndex > 0)  
130 - responseData.append(",");  
131 -  
132 - responseData.append(R"({"type":"Feature")"); 120 + int fieldsCount = pPgsqlConn->GetFieldCount();
  121 + for (int featureIndex = 0; pPgsqlConn->next(); featureIndex++)
  122 + {
  123 + if (featureIndex > 0)
  124 + responseData.append(",");
133 125
134 - string geometry = "";  
135 - string properties = ""; 126 + responseData.append(R"({"type":"Feature")");
136 127
137 - for (int i = 0; i < fieldsCount; i++)  
138 - {  
139 - const char *sfieldName = pPgsqlConn->GetFieldName(i); //pPgsqlConn->field_name[i].c_str();  
140 - if (sfieldName == 0) 128 + string geometry = "";
  129 + string properties = "";
  130 +
  131 + for (int i = 0; i < fieldsCount; i++)
141 { 132 {
142 - break;  
143 - }  
144 - 133 + const char *sfieldName = pPgsqlConn->GetFieldName(i); //pPgsqlConn->field_name[i].c_str();
  134 + if (sfieldName == 0)
  135 + {
  136 + break;
  137 + }
145 138
146 - if (strncmp(sfieldName, "RN_RN", 5) == 0)  
147 - continue;  
148 - std::string strFieldName = sfieldName;  
149 - //XML转义  
150 - DmpMapServerUtil::toJsonString(strFieldName);  
151 - sfieldName = strFieldName.c_str(); 139 + if (strncmp(sfieldName, "RN_RN", 5) == 0)
  140 + continue;
  141 + std::string strFieldName = sfieldName;
  142 + //XML转义
  143 + DmpMapServerUtil::toJsonString(strFieldName);
  144 + sfieldName = strFieldName.c_str();
152 145
153 - if (strFieldName == "geometry_as_geojson")  
154 - {  
155 - geometry = pPgsqlConn->getString(i);  
156 - continue; 146 + if (strFieldName == "geometry_as_geojson")
  147 + {
  148 + geometry = pPgsqlConn->getString(i);
  149 + continue;
  150 + }
  151 + else
  152 + {
  153 + const char *v = pPgsqlConn->getString(i);
  154 + std::sprintf(buff, R"(,"%s":"%s")", sfieldName, v);
  155 + properties += buff;
  156 + }
157 } 157 }
158 - else 158 +
  159 + if (geometry != "")
159 { 160 {
160 - const char *v = pPgsqlConn->getString(i);  
161 - std::sprintf(buff, R"(,"%s":"%s")", sfieldName, v);  
162 - properties += buff; 161 + responseData.append(R"(,"geometry":)");
  162 + responseData.append(geometry.c_str());
163 } 163 }
164 - }  
165 164
166 - if (geometry != "")  
167 - {  
168 - responseData.append(R"(,"geometry":)");  
169 - responseData.append(geometry.c_str());  
170 - }  
171 -  
172 - if (properties != "")  
173 - {  
174 - responseData.append(R"(,"properties":)");  
175 - properties[0] = '{';  
176 - responseData.append(properties.c_str()); 165 + if (properties != "")
  166 + {
  167 + responseData.append(R"(,"properties":)");
  168 + properties[0] = '{';
  169 + responseData.append(properties.c_str());
  170 + responseData.append("}");
  171 + }
177 responseData.append("}"); 172 responseData.append("}");
  173 + count++;
178 } 174 }
179 - responseData.append("}");  
180 - count++;  
181 } 175 }
  176 + catch (...)
  177 + {
  178 + return;
  179 + }
  180 +
  181 + responseData.append("]}");
  182 +
  183 + return;
182 } 184 }
183 - catch (...) 185 +
  186 + void DmpMapServerUtil::toXmlString(std::string &s)
184 { 187 {
  188 + const char *str1 = s.c_str();
  189 + if (strstr(str1, "&"))
  190 + {
  191 + s = replace(s, "&", "&amp;");
  192 + str1 = s.c_str();
  193 + }
  194 + if (strstr(str1, "<"))
  195 + {
  196 + s = replace(s, "<", "&lt;");
  197 + str1 = s.c_str();
  198 + }
  199 + if (strstr(str1, ">"))
  200 + {
  201 + s = replace(s, ">", "&gt;");
  202 + str1 = s.c_str();
  203 + }
  204 + if (strstr(str1, "\""))
  205 + {
  206 + s = replace(s, "\"", "&quot;");
  207 + str1 = s.c_str();
  208 + }
  209 + if (strstr(str1, "\r"))
  210 + {
  211 + s = replace(s, "\r", "");
  212 + str1 = s.c_str();
  213 + }
  214 + if (strstr(str1, "\n"))
  215 + {
  216 + s = replace(s, "\n", "");
  217 + str1 = s.c_str();
  218 + }
  219 + if (strstr(str1, "'"))
  220 + {
  221 + s = replace(s, "'", "&apos;");
  222 + //str1=s.c_str();
  223 + }
185 return; 224 return;
186 } 225 }
187 226
188 - responseData.append("]}");  
189 -  
190 - return;  
191 -}  
192 -  
193 -  
194 void DmpMapServerUtil::toJsonString(std::string &s) 227 void DmpMapServerUtil::toJsonString(std::string &s)
195 { 228 {
196 const char *str1 = s.c_str(); 229 const char *str1 = s.c_str();
@@ -236,21 +269,19 @@ void DmpMapServerUtil::responseGeojson(shared_ptr<DmpPgsql> pPgsqlConn, std::str @@ -236,21 +269,19 @@ void DmpMapServerUtil::responseGeojson(shared_ptr<DmpPgsql> pPgsqlConn, std::str
236 return; 269 return;
237 } 270 }
238 271
239 - std::string DmpMapServerUtil::replace(std::string strsrc, std::string strfind, std::string strrep)  
240 - {  
241 - for(std::string::size_type pos(0); pos!=std::string::npos;pos+=strrep.length())  
242 - {  
243 - if((pos=strsrc.find(strfind,pos))!=std::string::npos)  
244 - strsrc.replace(pos,strfind.length(),strrep);  
245 - else  
246 - break;  
247 - }  
248 - return strsrc;  
249 - }  
250 -  
251 - 272 + std::string DmpMapServerUtil::replace(std::string strsrc, std::string strfind, std::string strrep)
  273 + {
  274 + for (std::string::size_type pos(0); pos != std::string::npos; pos += strrep.length())
  275 + {
  276 + if ((pos = strsrc.find(strfind, pos)) != std::string::npos)
  277 + strsrc.replace(pos, strfind.length(), strrep);
  278 + else
  279 + break;
  280 + }
  281 + return strsrc;
  282 + }
252 283
253 - std::vector<std::string> DmpMapServerUtil::stringSplit(const std::string &str, const std::string &pattern) 284 + std::vector<std::string> DmpMapServerUtil::stringSplit(const std::string &str, const std::string &pattern)
254 { 285 {
255 vector<std::string> stringList; 286 vector<std::string> stringList;
256 std::string subStr; 287 std::string subStr;
@@ -258,15 +289,15 @@ void DmpMapServerUtil::responseGeojson(shared_ptr<DmpPgsql> pPgsqlConn, std::str @@ -258,15 +289,15 @@ void DmpMapServerUtil::responseGeojson(shared_ptr<DmpPgsql> pPgsqlConn, std::str
258 size_t patternLen = pattern.length(); 289 size_t patternLen = pattern.length();
259 for (size_t i = 0; i < str.length(); i++) 290 for (size_t i = 0; i < str.length(); i++)
260 { 291 {
261 - if(pattern[0] == str[i]) 292 + if (pattern[0] == str[i])
262 { 293 {
263 tPattern = str.substr(i, patternLen); 294 tPattern = str.substr(i, patternLen);
264 - if(tPattern == pattern) 295 + if (tPattern == pattern)
265 { 296 {
266 - i += patternLen -1;  
267 - if(!subStr.empty()) 297 + i += patternLen - 1;
  298 + if (!subStr.empty())
268 { 299 {
269 - stringList.push_back(subStr); 300 + stringList.push_back(subStr);
270 subStr.clear(); 301 subStr.clear();
271 } 302 }
272 } 303 }
@@ -281,18 +312,16 @@ void DmpMapServerUtil::responseGeojson(shared_ptr<DmpPgsql> pPgsqlConn, std::str @@ -281,18 +312,16 @@ void DmpMapServerUtil::responseGeojson(shared_ptr<DmpPgsql> pPgsqlConn, std::str
281 } 312 }
282 } 313 }
283 314
284 - if(!subStr.empty()) 315 + if (!subStr.empty())
285 { 316 {
286 stringList.push_back(subStr); 317 stringList.push_back(subStr);
287 } 318 }
288 return stringList; 319 return stringList;
289 -  
290 } 320 }
291 321
292 -  
293 - int DmpMapServerUtil::HttpPost(const std::string& url, std::string& postData, std::string &reponse_data) 322 + int DmpMapServerUtil::HttpPost(const std::string &url, std::string &postData, std::string &reponse_data)
294 { 323 {
295 - string host, port,path; 324 + string host, port, path;
296 const std::string &http_ = "http://"; 325 const std::string &http_ = "http://";
297 const std::string &https_ = "https://"; 326 const std::string &https_ = "https://";
298 std::string temp_data = url; 327 std::string temp_data = url;
@@ -334,7 +363,6 @@ void DmpMapServerUtil::responseGeojson(shared_ptr<DmpPgsql> pPgsqlConn, std::str @@ -334,7 +363,6 @@ void DmpMapServerUtil::responseGeojson(shared_ptr<DmpPgsql> pPgsqlConn, std::str
334 host = host.substr(0, idx); 363 host = host.substr(0, idx);
335 } 364 }
336 365
337 -  
338 try 366 try
339 { 367 {
340 boost::asio::io_service io_service; 368 boost::asio::io_service io_service;
@@ -22,6 +22,7 @@ namespace mapserver @@ -22,6 +22,7 @@ namespace mapserver
22 public: 22 public:
23 static void responseGeojson(shared_ptr<DmpPgsql> pPgsqlConn, std::string &responseData,const string& layerName,const std::string &srid); 23 static void responseGeojson(shared_ptr<DmpPgsql> pPgsqlConn, std::string &responseData,const string& layerName,const std::string &srid);
24 static void responseGml(shared_ptr<DmpPgsql> pPgsqlConn, std::string &responseData,const string& layerName,const std::string &srid); 24 static void responseGml(shared_ptr<DmpPgsql> pPgsqlConn, std::string &responseData,const string& layerName,const std::string &srid);
  25 + static void toXmlString(std::string &s);
25 static void toJsonString(std::string &s); 26 static void toJsonString(std::string &s);
26 static std::string replace(std::string strsrc, std::string strfind, std::string strrep); 27 static std::string replace(std::string strsrc, std::string strfind, std::string strrep);
27 28
@@ -560,7 +560,7 @@ namespace mapserver @@ -560,7 +560,7 @@ namespace mapserver
560 // newPool->m_name = databaseName; 560 // newPool->m_name = databaseName;
561 // newPool->m_alias = alias; 561 // newPool->m_alias = alias;
562 // newPool->Connect(connStr.c_str()); 562 // newPool->Connect(connStr.c_str());
563 - // newPool->Connect("PostgreSQLConn=hostaddr=172.26.99.173 port=5433 dbname='postgres' user='postgres' password='chinadci'"); 563 + // newPool->Connect("PostgreSQLConn=hostaddr=172.26.99.173 port=5433 dbname='postgres' user='postgres' password='chinadci'");
564 // pgsqlPool_[guid] = newPool; 564 // pgsqlPool_[guid] = newPool;
565 return true; 565 return true;
566 } 566 }
@@ -52,20 +52,21 @@ namespace DmpMapping @@ -52,20 +52,21 @@ namespace DmpMapping
52 std::string projectData = project->WriteXml(); 52 std::string projectData = project->WriteXml();
53 if(!guid.empty() && !projectData.empty()) 53 if(!guid.empty() && !projectData.empty())
54 { 54 {
55 - 55 +
56 shared_ptr<DmpProject> project(new DmpProject()); 56 shared_ptr<DmpProject> project(new DmpProject());
57 if (!project->Read(projectData)) 57 if (!project->Read(projectData))
58 { 58 {
  59 + context.response()->writeJson("{\"status\":\"false\",\"message\":\"加载DMD符号化失败!\"}");
59 return false; 60 return false;
60 } 61 }
61 - vectorMappingProjects[guid] = project; 62 + vectorMappingProjects[guid] = project;
62 63
63 - int i = 0; 64 + // int i = 0;
64 double minx, miny, maxx, maxy; 65 double minx, miny, maxx, maxy;
65 - std::map<std::string, DmpMapLayer *> mapLayers = project->mapLayers();  
66 - for (std::map<std::string, DmpMapLayer *>::iterator iter = mapLayers.begin(); iter != mapLayers.end(); iter++) 66 + std::vector<DmpMapLayer *> vectorLayers = project->vectorLayers();
  67 + for (size_t i = 0; i < vectorLayers.size(); i++)
67 { 68 {
68 - DmpMapLayer *layer = iter->second; 69 + DmpMapLayer *layer = vectorLayers[i];
69 if (i == 0) 70 if (i == 0)
70 { 71 {
71 minx = layer->extent().xmin(); 72 minx = layer->extent().xmin();
@@ -93,16 +94,15 @@ namespace DmpMapping @@ -93,16 +94,15 @@ namespace DmpMapping
93 std::string json = buff; 94 std::string json = buff;
94 json.append(",\"maplayer\":["); 95 json.append(",\"maplayer\":[");
95 96
96 - i = 0;  
97 - for (std::map<std::string, DmpMapLayer *>::iterator iter = mapLayers.begin(); iter != mapLayers.end(); iter++) 97 +
  98 + for (int i=0; i<vectorLayers.size(); i++ )
98 { 99 {
99 - DmpVectorLayer *layer = (DmpVectorLayer*) iter->second; 100 + DmpVectorLayer *layer = (DmpVectorLayer*) vectorLayers[i];
100 if(i>0) 101 if(i>0)
101 { 102 {
102 json.append(","); 103 json.append(",");
103 } 104 }
104 layer->writejson(json); 105 layer->writejson(json);
105 - i++;  
106 } 106 }
107 107
108 json.append("]}"); 108 json.append("]}");
@@ -167,12 +167,11 @@ namespace DmpMapping @@ -167,12 +167,11 @@ namespace DmpMapping
167 } 167 }
168 vectorMappingProjects[guid] = project; 168 vectorMappingProjects[guid] = project;
169 169
170 - int i = 0;  
171 double minx, miny, maxx, maxy; 170 double minx, miny, maxx, maxy;
172 - std::map<std::string, DmpMapLayer *> mapLayers = project->mapLayers();  
173 - for (std::map<std::string, DmpMapLayer *>::iterator iter = mapLayers.begin(); iter != mapLayers.end(); iter++) 171 + std::vector<DmpMapLayer *> vectorLayers = project->vectorLayers();
  172 + for (size_t i = 0; i < vectorLayers.size(); i++)
174 { 173 {
175 - DmpMapLayer *layer = iter->second; 174 + DmpMapLayer *layer = vectorLayers[i];
176 if (i == 0) 175 if (i == 0)
177 { 176 {
178 minx = layer->extent().xmin(); 177 minx = layer->extent().xmin();
@@ -200,16 +199,14 @@ namespace DmpMapping @@ -200,16 +199,14 @@ namespace DmpMapping
200 std::string json = buff; 199 std::string json = buff;
201 json.append(",\"maplayer\":["); 200 json.append(",\"maplayer\":[");
202 201
203 - i = 0;  
204 - for (std::map<std::string, DmpMapLayer *>::iterator iter = mapLayers.begin(); iter != mapLayers.end(); iter++) 202 + for (int i=0; i<vectorLayers.size(); i++ )
205 { 203 {
206 - DmpVectorLayer *layer = (DmpVectorLayer*) iter->second; 204 + DmpVectorLayer *layer = (DmpVectorLayer*) vectorLayers[i];
207 if(i>0) 205 if(i>0)
208 { 206 {
209 json.append(","); 207 json.append(",");
210 } 208 }
211 layer->writejson(json); 209 layer->writejson(json);
212 - i++;  
213 } 210 }
214 211
215 json.append("]}"); 212 json.append("]}");
@@ -70,6 +70,19 @@ namespace DmpMapping @@ -70,6 +70,19 @@ namespace DmpMapping
70 else if (boost::iequals(request,"getimage")) { 70 else if (boost::iequals(request,"getimage")) {
71 getImage(context); 71 getImage(context);
72 } 72 }
  73 + else if(boost::iequals(request, "getmaplog")){
  74 + const std::string mapGuid = params.MapGuid();
  75 + if (vectorMappingProjects_.find(mapGuid) != vectorMappingProjects_.end())
  76 + {
  77 + shared_ptr<DmpProject> project = vectorMappingProjects_.find(mapGuid)->second;
  78 + const DmpWms::DmpWmsParameters wmsParams(context.request()->serverParameters());
  79 + DmpWms::writeGetMapLog(context, wmsParams, project.get());
  80 + }
  81 + else
  82 + {
  83 + context.response()->writeJson("{\"status\":\"false\",\"message\":\"未找到服务\"}");
  84 + }
  85 + }
73 else if (boost::iequals(request, "getmap")) 86 else if (boost::iequals(request, "getmap"))
74 { 87 {
75 const std::string mapGuid = params.MapGuid(); 88 const std::string mapGuid = params.MapGuid();
@@ -143,17 +143,16 @@ namespace DmpWfs @@ -143,17 +143,16 @@ namespace DmpWfs
143 pt.add_child("DCPType", pt_dcpType); 143 pt.add_child("DCPType", pt_dcpType);
144 } 144 }
145 145
146 - void addFeatureTypeList(boost::property_tree::ptree &pt,const DmpProject *project) 146 + void addFeatureTypeList(boost::property_tree::ptree &pt, const DmpProject *project)
147 { 147 {
148 boost::property_tree::ptree ptOperations; 148 boost::property_tree::ptree ptOperations;
149 - ptOperations.add("Query",""); 149 + ptOperations.add("Query", "");
150 pt.add_child("Operations", ptOperations); 150 pt.add_child("Operations", ptOperations);
151 151
152 - int i = 0;  
153 - std::map<std::string, DmpMapLayer *> mapLayers = project->mapLayers();  
154 - for (std::map<std::string, DmpMapLayer *>::iterator iter = mapLayers.begin(); iter != mapLayers.end(); iter++, i++) 152 + std::vector<DmpMapLayer *> vectorLayers = project->vectorLayers();
  153 + for (int i = 0; i < vectorLayers.size(); i++)
155 { 154 {
156 - DmpVectorLayer *layer = (DmpVectorLayer *)iter->second; 155 + DmpVectorLayer *layer = (DmpVectorLayer*) vectorLayers[i];
157 std::string source = layer->source(); 156 std::string source = layer->source();
158 shared_ptr<DmpPgsql> pPgsqlConn = DmpPgsqlSourcePools::get_instance()->GetPgsqlConn(layer->source()); 157 shared_ptr<DmpPgsql> pPgsqlConn = DmpPgsqlSourcePools::get_instance()->GetPgsqlConn(layer->source());
159 if (pPgsqlConn != nullptr) 158 if (pPgsqlConn != nullptr)
@@ -188,11 +187,11 @@ namespace DmpWfs @@ -188,11 +187,11 @@ namespace DmpWfs
188 187
189 boost::property_tree::ptree ptFields; 188 boost::property_tree::ptree ptFields;
190 char tablesql_buff[300]; 189 char tablesql_buff[300];
191 - sprintf(tablesql_buff, "select column_name,data_type from information_schema.columns where table_schema = '%s' and table_name = '%s'",  
192 - layer->schema().c_str(),  
193 - layer->name().c_str());  
194 - bool returnResult = pPgsqlConn->ExecWait(tablesql_buff);  
195 - for (;returnResult && pPgsqlConn->next();) 190 + sprintf(tablesql_buff, "select column_name,data_type from information_schema.columns where table_schema = '%s' and table_name = '%s'",
  191 + layer->schema().c_str(),
  192 + layer->name().c_str());
  193 + bool returnResult = pPgsqlConn->ExecWait(tablesql_buff);
  194 + for (; returnResult && pPgsqlConn->next();)
196 { 195 {
197 std::string fieldname = pPgsqlConn->getString(0); 196 std::string fieldname = pPgsqlConn->getString(0);
198 std::string typeString = pPgsqlConn->getString(1); 197 std::string typeString = pPgsqlConn->getString(1);
@@ -259,11 +258,9 @@ namespace DmpWfs @@ -259,11 +258,9 @@ namespace DmpWfs
259 ptFeatureType.add_child("Fields", ptFields); 258 ptFeatureType.add_child("Fields", ptFields);
260 pt.add_child("FeatureType", ptFeatureType); 259 pt.add_child("FeatureType", ptFeatureType);
261 } 260 }
262 -  
263 } 261 }
264 } 262 }
265 263
266 -  
267 void addFilterCapabilities(boost::property_tree::ptree &pt,const std::string &hrefUrl) 264 void addFilterCapabilities(boost::property_tree::ptree &pt,const std::string &hrefUrl)
268 { 265 {
269 boost::property_tree::ptree ptFilterCapabilities; 266 boost::property_tree::ptree ptFilterCapabilities;
@@ -52,6 +52,10 @@ namespace DmpWms @@ -52,6 +52,10 @@ namespace DmpWms
52 { 52 {
53 writeGetMap(context,params, project); 53 writeGetMap(context,params, project);
54 } 54 }
  55 + else if(boost::iequals(request, "getmaplog"))
  56 + {
  57 + writeGetMapLog(context,params, project);
  58 + }
55 else if(boost::iequals(request,"thumbnail") || boost::iequals(request,"getthumbnail")) 59 else if(boost::iequals(request,"thumbnail") || boost::iequals(request,"getthumbnail"))
56 { 60 {
57 writeThumbnail(context,params, project); 61 writeThumbnail(context,params, project);
@@ -156,11 +156,11 @@ namespace DmpWms @@ -156,11 +156,11 @@ namespace DmpWms
156 156
157 157
158 double minx,miny,maxx,maxy; 158 double minx,miny,maxx,maxy;
159 - int i =0;  
160 - std::map<std::string, DmpMapLayer*> mapLayers = project->mapLayers();  
161 - for (std::map<std::string, DmpMapLayer*>::iterator iter = mapLayers.begin();iter != mapLayers.end(); iter++) 159 +
  160 + std::vector<DmpMapLayer*> vectorLayers = project->vectorLayers();
  161 + for (int i=0; i<vectorLayers.size(); i++)
162 { 162 {
163 - DmpMapLayer* layer = iter->second; 163 + DmpMapLayer* layer = vectorLayers[i];
164 if(i ==0) 164 if(i ==0)
165 { 165 {
166 minx = layer->extent().xmin(); 166 minx = layer->extent().xmin();
@@ -175,9 +175,8 @@ namespace DmpWms @@ -175,9 +175,8 @@ namespace DmpWms
175 if(maxx < layer->extent().xmax()) maxx = layer->extent().xmax(); 175 if(maxx < layer->extent().xmax()) maxx = layer->extent().xmax();
176 if(maxy < layer->extent().ymax()) maxy = layer->extent().ymax(); 176 if(maxy < layer->extent().ymax()) maxy = layer->extent().ymax();
177 } 177 }
178 - i++;  
179 } 178 }
180 - 179 +
181 boost::property_tree::ptree ptGeographicBoundingbox; 180 boost::property_tree::ptree ptGeographicBoundingbox;
182 ptGeographicBoundingbox.add("westBoundLongitude", minx); 181 ptGeographicBoundingbox.add("westBoundLongitude", minx);
183 ptGeographicBoundingbox.add("eastBoundLongitude", maxx); 182 ptGeographicBoundingbox.add("eastBoundLongitude", maxx);
@@ -203,9 +202,9 @@ namespace DmpWms @@ -203,9 +202,9 @@ namespace DmpWms
203 } 202 }
204 ptProject.add_child("BoundingBox",ptBoundingbox); 203 ptProject.add_child("BoundingBox",ptBoundingbox);
205 204
206 - for (std::map<std::string, DmpMapLayer*>::iterator iter= mapLayers.begin();iter != mapLayers.end(); iter++) 205 + for (int i=0; i<vectorLayers.size(); i++)
207 { 206 {
208 - DmpMapLayer* layer = iter->second; 207 + DmpMapLayer* layer = vectorLayers[i];
209 addCapabilitiesLayer(ptProject, layer,srs); 208 addCapabilitiesLayer(ptProject, layer,srs);
210 } 209 }
211 pt.add_child("Layer", ptProject); 210 pt.add_child("Layer", ptProject);
@@ -22,7 +22,9 @@ namespace DmpWms @@ -22,7 +22,9 @@ namespace DmpWms
22 string exception = WmsGetMap(context,params, project,projectSettings); 22 string exception = WmsGetMap(context,params, project,projectSettings);
23 if(exception.length() >0) 23 if(exception.length() >0)
24 { 24 {
25 - 25 + context.response()->removeHeader("Content-Type");
  26 + context.response()->setHeader("Content-Type", "text/json");
  27 + context.response()->writeJson(exception);
26 } 28 }
27 } 29 }
28 30
@@ -32,7 +34,6 @@ namespace DmpWms @@ -32,7 +34,6 @@ namespace DmpWms
32 { 34 {
33 try 35 try
34 { 36 {
35 -  
36 double boxX1, boxY1, boxX2, boxY2; 37 double boxX1, boxY1, boxX2, boxY2;
37 std::string srs = params.Srs(); 38 std::string srs = params.Srs();
38 std::string recbox = params.BBox(); 39 std::string recbox = params.BBox();
@@ -70,6 +71,7 @@ namespace DmpWms @@ -70,6 +71,7 @@ namespace DmpWms
70 else 71 else
71 { 72 {
72 char strlayers[1000] = {0}; 73 char strlayers[1000] = {0};
  74 + boost::to_lower(layers);
73 strcpy(strlayers,(char *)layers.c_str()); 75 strcpy(strlayers,(char *)layers.c_str());
74 mapRenderer.AddWmsMapLayers(project, strlayers); 76 mapRenderer.AddWmsMapLayers(project, strlayers);
75 } 77 }
@@ -92,6 +94,76 @@ namespace DmpWms @@ -92,6 +94,76 @@ namespace DmpWms
92 } 94 }
93 } 95 }
94 96
  97 +
  98 + void writeGetMapLog(const DmpServerContext &context, const DmpWmsParameters& params,
  99 + const DmpProject* project, bool projectSettings)
  100 + {
  101 + try
  102 + {
  103 +
  104 + double boxX1, boxY1, boxX2, boxY2;
  105 + std::string srs = params.Srs();
  106 + std::string recbox = params.BBox();
  107 +
  108 + int width = params.Width();
  109 + int height = params.Height();
  110 + std::string layerDefs = params.layerDefs();
  111 + std::string regionDefs = params.regionDefs();
  112 + std::map<std::string, std::string> mapLayerDefs;
  113 + std::map<std::string, std::string> mapRegionDefs;
  114 + StrDefs2Map(mapLayerDefs,layerDefs);
  115 + StrDefs2Map(mapRegionDefs,regionDefs);
  116 +
  117 + stringstream stream;
  118 + stream << "<getmaplog>";
  119 +
  120 + if (boost::iequals(srs, "CRS:84")|| boost::iequals(srs, "EPSG:4326"))
  121 + {
  122 + sscanf(recbox.c_str(), "%lf,%lf,%lf,%lf", &boxY1, &boxX1, &boxY2, &boxX2);
  123 + }
  124 + else
  125 + {
  126 + sscanf(recbox.c_str(), "%lf,%lf,%lf,%lf", &boxX1, &boxY1, &boxX2, &boxY2);
  127 + }
  128 +
  129 +
  130 + //stbstb:应该检查大量地方的 width和height不为零 ,char* regionDefs
  131 + if (width <= 0 || height <= 0) return ;// "width和height 参数错误";
  132 + if (width > 8000 || height > 6000) return ;// "参数错误,图片大小 宽不能大于8000像素 高大于6000像素";
  133 +
  134 + DmpWms::DmpWmsRenderer mapRenderer(height, width);
  135 +
  136 + std::string layers = params.Layers();
  137 + if (layers =="")
  138 + {
  139 + mapRenderer.AddWmsMapLayers(project);
  140 + }
  141 + else
  142 + {
  143 + char strlayers[1000] = {0};
  144 + boost::to_lower(layers);
  145 + strcpy(strlayers,(char *)layers.c_str());
  146 + mapRenderer.AddWmsMapLayers(project, strlayers);
  147 + }
  148 +
  149 +
  150 + shared_ptr<Rect> rect (new Rect(boxY2, boxX2, boxY1, boxX1));
  151 + mapRenderer.SetExtent(rect);
  152 + mapRenderer.GetMapLog(stream, &mapLayerDefs,&mapRegionDefs);
  153 + stream << "</getmaplog>";
  154 + string responseData = stream.str();
  155 +
  156 + context.response()->removeHeader("Content-Type");
  157 + context.response()->setHeader("Content-Type", "text/xml");
  158 + context.response()->write(responseData);
  159 + }
  160 + catch (const std::exception &e)
  161 + {
  162 + std::cerr << " GetMap " << e.what() << '\n';
  163 + //return e.what();
  164 + }
  165 + }
  166 +
95 void writeThumbnail(const DmpServerContext &context,const DmpWmsParameters& params, 167 void writeThumbnail(const DmpServerContext &context,const DmpWmsParameters& params,
96 const DmpProject* project,bool projectSettings) 168 const DmpProject* project,bool projectSettings)
97 { 169 {
@@ -24,6 +24,9 @@ namespace DmpWms @@ -24,6 +24,9 @@ namespace DmpWms
24 void writeGetMap(const DmpServerContext &context,const DmpWmsParameters& params, 24 void writeGetMap(const DmpServerContext &context,const DmpWmsParameters& params,
25 const DmpProject* project, 25 const DmpProject* project,
26 bool projectSettings = false ); 26 bool projectSettings = false );
  27 + void writeGetMapLog(const DmpServerContext &context,const DmpWmsParameters& params,
  28 + const DmpProject* project,
  29 + bool projectSettings = false );
27 std::string WmsGetMap(const DmpServerContext &context,const DmpWmsParameters& params, 30 std::string WmsGetMap(const DmpServerContext &context,const DmpWmsParameters& params,
28 const DmpProject* project, 31 const DmpProject* project,
29 bool projectSettings = false ); 32 bool projectSettings = false );
@@ -9,6 +9,8 @@ @@ -9,6 +9,8 @@
9 #include <boost/property_tree/ptree.hpp> 9 #include <boost/property_tree/ptree.hpp>
10 #include <boost/property_tree/xml_parser.hpp> 10 #include <boost/property_tree/xml_parser.hpp>
11 #include <boost/typeof/typeof.hpp> 11 #include <boost/typeof/typeof.hpp>
  12 +#include <boost/algorithm/algorithm.hpp>
  13 +#include <boost/algorithm/string/case_conv.hpp>
12 #include "dmpwmsrenderer.h" 14 #include "dmpwmsrenderer.h"
13 #include "dmpmapserverutil.h" 15 #include "dmpmapserverutil.h"
14 #include <sstream> 16 #include <sstream>
@@ -45,7 +47,6 @@ namespace DmpWms @@ -45,7 +47,6 @@ namespace DmpWms
45 pRasterBufferObj = rb; 47 pRasterBufferObj = rb;
46 48
47 oneInchInLayoutUnits = 0.0254; 49 oneInchInLayoutUnits = 0.0254;
48 -  
49 m_dHeight = height; 50 m_dHeight = height;
50 m_dWidth = width; 51 m_dWidth = width;
51 m_vLayers = {}; 52 m_vLayers = {};
@@ -628,11 +629,10 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ @@ -628,11 +629,10 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\
628 629
629 bool DmpWmsRenderer::AddWmsMapLayers(const DmpProject *project) //插入型加入 630 bool DmpWmsRenderer::AddWmsMapLayers(const DmpProject *project) //插入型加入
630 { 631 {
631 - std::map<std::string, DmpMapLayer *> mapLayers = project->mapLayers();  
632 - for (std::map<std::string, DmpMapLayer *>::iterator iter = mapLayers.begin();  
633 - iter != mapLayers.end(); iter++) 632 + std::vector<DmpMapLayer *> vectorLayers = project->vectorLayers();
  633 + for (int i =0;i< vectorLayers.size(); i++)
634 { 634 {
635 - this->AddMapLayer(-1, (DmpVectorLayer *)iter->second); 635 + this->AddMapLayer(-1, (DmpVectorLayer*)vectorLayers[i]);
636 } 636 }
637 return true; 637 return true;
638 } 638 }
@@ -669,13 +669,17 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ @@ -669,13 +669,17 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\
669 i++; 669 i++;
670 } 670 }
671 671
672 - std::map<std::string, DmpMapLayer *> mapLayers = project->mapLayers();  
673 - for (std::map<std::string, DmpMapLayer *>::iterator iter = mapLayers.begin();  
674 - iter != mapLayers.end(); iter++) 672 +
  673 +
  674 + std::vector<DmpMapLayer *> vectorLayers = project->vectorLayers();
  675 + for (std::vector<DmpMapLayer *>::iterator iter = vectorLayers.begin();
  676 + iter != vectorLayers.end(); iter++)
675 { 677 {
676 - if (set_layer.find(iter->first) != set_layer.end()) 678 + std::string lowname = (*iter)->name();
  679 + boost::to_lower(lowname);
  680 + if (set_layer.find(lowname) != set_layer.end())
677 { 681 {
678 - this->AddMapLayer(-1, (DmpVectorLayer *)iter->second); 682 + this->AddMapLayer(-1, (DmpVectorLayer *)(*iter));
679 } 683 }
680 } 684 }
681 685
@@ -848,7 +852,8 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ @@ -848,7 +852,8 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\
848 } 852 }
849 return true; 853 return true;
850 } 854 }
851 - /* 855 +
  856 +/*
852 bool DmpWmsRenderer::DrawData(DataCollection *data, Renderer *renderer, clsCrSurf *pClsCS) 857 bool DmpWmsRenderer::DrawData(DataCollection *data, Renderer *renderer, clsCrSurf *pClsCS)
853 { 858 {
854 859
@@ -915,6 +920,226 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ @@ -915,6 +920,226 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\
915 } 920 }
916 921
917 //在DC上绘制时是否使用一个临时的 image_surface, 然后拷上去,这样具体的细节处理就没有区别了 922 //在DC上绘制时是否使用一个临时的 image_surface, 然后拷上去,这样具体的细节处理就没有区别了
  923 + bool DmpWmsRenderer::GetMapLog(std::stringstream &outputStream, map<string, string> *map_layerDefs,
  924 + map<string, string> *map_regionDefs,
  925 + shared_ptr<Rect> pRect, double r__, double x_dis__, double y_dis__)
  926 + {
  927 + char buff[500];
  928 + sprintf(buff, "<log>layer count =%ld</log>", m_vLayers.size());
  929 + outputStream << buff;
  930 +
  931 + bool has_regionDefs = false;
  932 + string strRegionColDefs = "";
  933 + string strRegionLayerNameDefs = "";
  934 +
  935 + if (map_regionDefs)
  936 + {
  937 + map<string, string>::iterator iter_regionDef = map_regionDefs->begin();
  938 + if (iter_regionDef != map_regionDefs->end())
  939 + {
  940 + strRegionColDefs = iter_regionDef->second.c_str();
  941 + strRegionLayerNameDefs = iter_regionDef->first.c_str();
  942 + has_regionDefs = true;
  943 + }
  944 + }
  945 +
  946 + for (int i = 0; i < (int)(m_vLayers.size()); i++)
  947 + {
  948 + DmpVectorLayer *layer = m_vLayers[i];
  949 + sprintf(buff, "<log>draw layer %s</log>", layer->name().c_str());
  950 + outputStream << buff;
  951 +
  952 + double r1 = layer->minScale(); // *
  953 + double r2 = layer->maxScale(); // *
  954 +
  955 + shared_ptr<Rect> pExtent;
  956 + if (pRect == NULL)
  957 + pExtent = m_pExtent;
  958 + else
  959 + pExtent = pRect;
  960 +
  961 + sprintf(buff,"<log>显示范围 %f,%f,%f,%f </log>",
  962 + pExtent->m_dLeft, pExtent->m_dBottom, pExtent->m_dTop, pExtent->m_dRight);
  963 + outputStream << buff;
  964 +
  965 + sprintf(buff,"<log>数据范围 %f,%f,%f,%f </log>",
  966 + layer->extent().xmin(), layer->extent().ymin(), layer->extent().xmax(), layer->extent().ymax() );
  967 + outputStream << buff;
  968 +
  969 + double x_dis, y_dis;
  970 + if (r__ == -1)
  971 + {
  972 + x_dis = m_dXdis;
  973 + y_dis = m_dYdis;
  974 + }
  975 + else
  976 + {
  977 + x_dis = x_dis__;
  978 + y_dis = y_dis__;
  979 + }
  980 +
  981 + if ((this->m_dScaleDenominator > r1 || this->m_dScaleDenominator < r2 || layer->GetRenderer30() == nullptr))
  982 + {
  983 + sprintf(buff,"<log>draw not Denominator</log>");
  984 + outputStream << buff;
  985 + continue;
  986 + }
  987 +
  988 + const char *strLayerDef = nullptr;
  989 + bool has_layerDef = false;
  990 + if (map_layerDefs)
  991 + {
  992 + map<string, string>::iterator iter_layerDef = map_layerDefs->find(layer->name());
  993 + if (iter_layerDef != map_layerDefs->end())
  994 + {
  995 + has_layerDef = true;
  996 + strLayerDef = iter_layerDef->second.c_str();
  997 + }
  998 + }
  999 +
  1000 + //绘图操作从始至终不传到 maplayer 那一层
  1001 +
  1002 + /*if (layer->featurecount() <= 0)
  1003 + {
  1004 + string sql0 = GetCountSQL(ml.get());
  1005 + const char *ss0__ = "";
  1006 + const char **pmsg0 = &ss0__;
  1007 + shared_ptr<DmpPgsql> pWorkspace = DataSourcePools::get_instance()->GetWorkspace(layer->source());
  1008 + if (pWorkspace == nullptr)
  1009 + break;
  1010 + //CWorkspacePoolZero2 Zero(pWorkspacePool, pWorkspace);
  1011 + shared_ptr<Recordsets> recss0 = pWorkspace->ExecuteBinary(sql0, "", pmsg0);
  1012 + if (recss0 != NULL)
  1013 + {
  1014 + int dataCount = PQntuples(recss0->m_pPGresult);
  1015 +
  1016 + sprintf(buff, "<log>read dataCount</log>");
  1017 + outputStream << buff;
  1018 + sprintf(buff, "<log>dataCount=%d</log>", layer->featurecount());
  1019 + outputStream << buff;
  1020 + }
  1021 + else
  1022 + {
  1023 + sprintf(buff, "<log>read dataCount fail</log>");
  1024 + outputStream << buff;
  1025 + return false;
  1026 + }
  1027 + }
  1028 + else
  1029 + {
  1030 + sprintf(buff,"<log>dataCount=%d</log>", layer->featurecount()));
  1031 + outputStream << buff;
  1032 + }
  1033 +*/
  1034 +
  1035 +
  1036 + sprintf(buff,"<log>load data from dababase</log>");
  1037 + outputStream << buff;
  1038 +
  1039 + string sql = "";
  1040 + shared_ptr<DmpVectorThinLayer> pVectorThinLayer = nullptr;
  1041 +
  1042 + shared_ptr<DataCollection> data(new DataCollection());
  1043 +
  1044 + if (!has_regionDefs)
  1045 + {
  1046 + sql = GetDrawSQL(layer, pExtent.get(), strLayerDef);
  1047 + }
  1048 + else
  1049 + {
  1050 + sql = GetRegionQuerySQL(layer, pExtent.get(), format("%d", layer->crs().srid()), strRegionLayerNameDefs, strRegionColDefs, strLayerDef);
  1051 + }
  1052 +
  1053 + pVectorThinLayer = layer->GetCurrentScaleTable(1 / this->m_dR);
  1054 +
  1055 + string sqlLog = sql;
  1056 + DmpMapServerUtil::toXmlString(sqlLog);
  1057 +
  1058 + sprintf(buff,"<log>sql = %s</log>", sqlLog.c_str());
  1059 + outputStream << buff;
  1060 +
  1061 + if (sql == "")
  1062 + continue;
  1063 +
  1064 + string tableName = layer->name();
  1065 +
  1066 + if (pVectorThinLayer != nullptr)
  1067 + {
  1068 + tableName = pVectorThinLayer->tableName();
  1069 + }
  1070 +
  1071 + if (tableName.length() > 32)
  1072 + {
  1073 + tableName = tableName.substr(32);
  1074 + }
  1075 +
  1076 + const char *ss__ = "";
  1077 + const char **pmsg = &ss__;
  1078 + try
  1079 + {
  1080 +
  1081 + shared_ptr<DmpPgsql> pPgsqlConn = nullptr;
  1082 + if (pVectorThinLayer == nullptr)
  1083 + {
  1084 + pPgsqlConn = DmpPgsqlSourcePools::get_instance()->GetPgsqlConn(layer->source());
  1085 + }
  1086 + else
  1087 + {
  1088 + pPgsqlConn = DmpPgsqlSourcePools::get_instance()->GetDefaultPgsqlConn();
  1089 + }
  1090 +
  1091 + if (pPgsqlConn == nullptr)
  1092 + {
  1093 + sprintf(buff,"<log>pWorkspace is null</log>");
  1094 + outputStream << buff;
  1095 + break;
  1096 + }
  1097 +
  1098 + if (pPgsqlConn->ExecWaitBinary(sql))
  1099 + {
  1100 + sprintf(buff,"<log>从原始图层获取数据</log>");
  1101 + outputStream << buff;
  1102 + if( pPgsqlConn->GetRowCount())
  1103 + continue;
  1104 +
  1105 + sprintf(buff,"<log>draw success</log>");
  1106 + outputStream << buff;
  1107 + }
  1108 + else if (pVectorThinLayer != nullptr)
  1109 + {
  1110 + /*shared_ptr<DmpPgsql> pPgsqlConn1 = DmpPgsqlSourcePools::get_instance()->GetPgsqlConn(layer->source());
  1111 + sprintf(buff,"<log>从抽稀图层获取数据%s</log>", pMapLayerThinning->m_tableName.c_str());
  1112 + if (pPgsqlConn1 == nullptr)
  1113 + break;
  1114 + if (pPgsqlConn1->ExecWaitBinary(sql))
  1115 + {
  1116 + PGresult *res = pPgsqlConn1->m_pConn->m_pPGresult;
  1117 + if (PQntuples(res) == 0)
  1118 + continue;
  1119 + //data->InitDataCollection(res, shapeType, this->m_dWidth, this->m_dHeight, (int)ml->subset, m_dR, m_dScaleDenominator, x_dis, y_dis);
  1120 + sprintf(buff,"<log>draw success</log>");
  1121 + outputStream << buff;
  1122 + }
  1123 + else
  1124 + {
  1125 + sprintf(buff,"<log>获取数据失败,找不到图层</log>");
  1126 + //DrawText2("获取数据失败,找不到图层" ,pClsSurfThis,10,10);
  1127 + }*/
  1128 + }
  1129 + }
  1130 + catch (const std::exception &e)
  1131 + {
  1132 + sprintf(buff,"DrawSimpleData");
  1133 + std::cerr << "#DrawSimpleData " << e.what() << '\n';
  1134 + }
  1135 + }
  1136 +
  1137 + sprintf(buff,"<log>return</log>");
  1138 +
  1139 + return true;
  1140 + }
  1141 +
  1142 + //在DC上绘制时是否使用一个临时的 image_surface, 然后拷上去,这样具体的细节处理就没有区别了
918 bool DmpWmsRenderer::GetMap(map<string, string> *map_layerDefs, map<string, string> *map_regionDefs, clsCrSurf *pClsCS, bool isThumbnail, 1143 bool DmpWmsRenderer::GetMap(map<string, string> *map_layerDefs, map<string, string> *map_regionDefs, clsCrSurf *pClsCS, bool isThumbnail,
919 shared_ptr<Rect> pRect, double r__, double x_dis__, double y_dis__) 1144 shared_ptr<Rect> pRect, double r__, double x_dis__, double y_dis__)
920 { 1145 {
@@ -1072,17 +1297,7 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ @@ -1072,17 +1297,7 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\
1072 1297
1073 allDataCount += PQntuples(res); 1298 allDataCount += PQntuples(res);
1074 this->DrawSimpleData(data.get(), layer->GetRenderer30().get(), pClsSurfThis); 1299 this->DrawSimpleData(data.get(), layer->GetRenderer30().get(), pClsSurfThis);
1075 - // DrawText(StringHelp::fmt("data %.0fm",(endTime_data - startTime).count()/1000000.0)  
1076 - // ,pClsSurfThis,10,50);  
1077 -  
1078 - /*  
1079 - DrawText(tableName ,pClsSurfThis,10,100);  
1080 -  
1081 - char ptext[100] = {0};  
1082 - sprintf(ptext, "count = %d",allDataCount);  
1083 - DrawText2(ptext ,pClsSurfThis,10,140);  
1084 -  
1085 - */ 1300 +
1086 } 1301 }
1087 else if (pVectorThinLayer != nullptr) 1302 else if (pVectorThinLayer != nullptr)
1088 { 1303 {
注册登录 后发表评论