正在显示
11 个修改的文件
包含
137 行增加
和
16 行删除
| @@ -78,9 +78,11 @@ namespace DmapCore_30 | @@ -78,9 +78,11 @@ namespace DmapCore_30 | ||
| 78 | return false; | 78 | return false; |
| 79 | } | 79 | } |
| 80 | } | 80 | } |
| 81 | - | ||
| 82 | 81 | ||
| 83 | - this->m_simpleRenderer = m_pRen->m_simpleRenderer; | 82 | + if (m_pRen != NULL) |
| 83 | + { | ||
| 84 | + this->m_simpleRenderer = m_pRen->m_simpleRenderer; | ||
| 85 | + } | ||
| 84 | return true; | 86 | return true; |
| 85 | } | 87 | } |
| 86 | //clsXML::XMLParse(NULL, f, &m_pRen); | 88 | //clsXML::XMLParse(NULL, f, &m_pRen); |
| @@ -91,14 +91,14 @@ namespace DmapCore_30 | @@ -91,14 +91,14 @@ namespace DmapCore_30 | ||
| 91 | { | 91 | { |
| 92 | char buff[300] = {0}; | 92 | char buff[300] = {0}; |
| 93 | boost::property_tree::ptree ptRenderer; | 93 | boost::property_tree::ptree ptRenderer; |
| 94 | - ptRenderer.add("lookupfield",m_sField); | 94 | + ptRenderer.add("<xmlattr>.lookupfield",m_sField); |
| 95 | 95 | ||
| 96 | int length = (int)m_vComponents.size(); | 96 | int length = (int)m_vComponents.size(); |
| 97 | for (int i = 0; i < length; i++) | 97 | for (int i = 0; i < length; i++) |
| 98 | { | 98 | { |
| 99 | boost::property_tree::ptree ptNode; | 99 | boost::property_tree::ptree ptNode; |
| 100 | ValueMapRendererComponent* vmrc = m_vComponents[i]; | 100 | ValueMapRendererComponent* vmrc = m_vComponents[i]; |
| 101 | - ptNode.add("value",vmrc->GetValue()); | 101 | + ptNode.add("<xmlattr>.value",vmrc->GetValue()); |
| 102 | if(vmrc->m_pSymbol) | 102 | if(vmrc->m_pSymbol) |
| 103 | { | 103 | { |
| 104 | vmrc->m_pSymbol->ParsePtree(ptNode); | 104 | vmrc->m_pSymbol->ParsePtree(ptNode); |
| @@ -112,6 +112,7 @@ namespace DmapCore_30 | @@ -112,6 +112,7 @@ namespace DmapCore_30 | ||
| 112 | this->m_pDefaultSymbol->ParsePtree(ptNode); | 112 | this->m_pDefaultSymbol->ParsePtree(ptNode); |
| 113 | ptRenderer.add_child("OTHER",ptNode); | 113 | ptRenderer.add_child("OTHER",ptNode); |
| 114 | } | 114 | } |
| 115 | + pt.add_child("VALUEMAPRENDERER",ptRenderer); | ||
| 115 | return true; | 116 | return true; |
| 116 | } | 117 | } |
| 117 | 118 |
| @@ -455,4 +455,85 @@ namespace mapserver | @@ -455,4 +455,85 @@ namespace mapserver | ||
| 455 | } | 455 | } |
| 456 | return 0; | 456 | return 0; |
| 457 | } | 457 | } |
| 458 | + | ||
| 459 | + unsigned char DmpMapServerUtil::char_to_hex(unsigned char x) | ||
| 460 | + { | ||
| 461 | + return (unsigned char)(x > 9 ? x + 55 : x + 48); | ||
| 462 | + } | ||
| 463 | + | ||
| 464 | + int DmpMapServerUtil::is_alpha_number_char(unsigned char c) | ||
| 465 | + { | ||
| 466 | + if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9')) | ||
| 467 | + return 1; | ||
| 468 | + return 0; | ||
| 469 | + } | ||
| 470 | + | ||
| 471 | + std::string DmpMapServerUtil::urlEncode(char* src, int length) | ||
| 472 | + { | ||
| 473 | + char buff[1024]; | ||
| 474 | + urlEncode((unsigned char *)src, length, (unsigned char *)buff, 1000); | ||
| 475 | + return buff; | ||
| 476 | + } | ||
| 477 | + | ||
| 478 | + // url编码实现 | ||
| 479 | + | ||
| 480 | + void DmpMapServerUtil::urlEncode(unsigned char *src, int src_len, unsigned char *dest, int dest_len) | ||
| 481 | + { | ||
| 482 | + unsigned char ch; | ||
| 483 | + int len = 0; | ||
| 484 | + | ||
| 485 | + while (len < (dest_len - 4) && *src) | ||
| 486 | + { | ||
| 487 | + ch = (unsigned char)*src; | ||
| 488 | + if (*src == ' ') | ||
| 489 | + { | ||
| 490 | + *dest++ = '+'; | ||
| 491 | + } | ||
| 492 | + else if (is_alpha_number_char(ch) || strchr("=!~*'()", ch)) | ||
| 493 | + { | ||
| 494 | + *dest++ = *src; | ||
| 495 | + } | ||
| 496 | + else | ||
| 497 | + { | ||
| 498 | + *dest++ = '%'; | ||
| 499 | + *dest++ = char_to_hex((unsigned char)(ch >> 4)); | ||
| 500 | + *dest++ = char_to_hex((unsigned char)(ch % 16)); | ||
| 501 | + } | ||
| 502 | + ++src; | ||
| 503 | + ++len; | ||
| 504 | + } | ||
| 505 | + *dest = 0; | ||
| 506 | + return; | ||
| 507 | + } | ||
| 508 | + | ||
| 509 | + //解url编码实现 | ||
| 510 | + | ||
| 511 | + unsigned char * DmpMapServerUtil::urlDecode(unsigned char *encd, unsigned char *decd) | ||
| 512 | + { | ||
| 513 | + int j, i; | ||
| 514 | + char *cd = (char *)encd; | ||
| 515 | + char p[2]; | ||
| 516 | + unsigned int num; | ||
| 517 | + j = 0; | ||
| 518 | + | ||
| 519 | + for (i = 0; i < strlen(cd); i++) | ||
| 520 | + { | ||
| 521 | + memset(p, '/0', 2); | ||
| 522 | + if (cd[i] != '%') | ||
| 523 | + { | ||
| 524 | + decd[j++] = cd[i]; | ||
| 525 | + continue; | ||
| 526 | + } | ||
| 527 | + | ||
| 528 | + p[0] = cd[++i]; | ||
| 529 | + p[1] = cd[++i]; | ||
| 530 | + | ||
| 531 | + p[0] = p[0] - 48 - ((p[0] >= 'A') ? 7 : 0) - ((p[0] >= 'a') ? 32 : 0); | ||
| 532 | + p[1] = p[1] - 48 - ((p[1] >= 'A') ? 7 : 0) - ((p[1] >= 'a') ? 32 : 0); | ||
| 533 | + decd[j++] = (unsigned char)(p[0] * 16 + p[1]); | ||
| 534 | + } | ||
| 535 | + decd[j] = '/0'; | ||
| 536 | + | ||
| 537 | + return decd; | ||
| 538 | + } | ||
| 458 | } | 539 | } |
| @@ -29,6 +29,13 @@ namespace mapserver | @@ -29,6 +29,13 @@ namespace mapserver | ||
| 29 | static std::vector<std::string> stringSplit(const std::string &str, const std::string &pattern); | 29 | static std::vector<std::string> stringSplit(const std::string &str, const std::string &pattern); |
| 30 | 30 | ||
| 31 | static int HttpPost(const std::string& url, std::string& postData, std::string& responseData ); | 31 | static int HttpPost(const std::string& url, std::string& postData, std::string& responseData ); |
| 32 | + | ||
| 33 | + static unsigned char char_to_hex(unsigned char x); | ||
| 34 | + static int is_alpha_number_char(unsigned char c); | ||
| 35 | + static std::string urlEncode(char* src, int length); | ||
| 36 | + static void urlEncode(unsigned char *src, int src_len, unsigned char *dest, int dest_len); | ||
| 37 | + static unsigned char *urlDecode(unsigned char *encd, unsigned char *decd); | ||
| 38 | + | ||
| 32 | }; | 39 | }; |
| 33 | } | 40 | } |
| 34 | 41 |
| @@ -50,6 +50,7 @@ namespace DmpMapping | @@ -50,6 +50,7 @@ namespace DmpMapping | ||
| 50 | 50 | ||
| 51 | DmpProject* project = (DmpProject*)context.serverProject()->project(); | 51 | DmpProject* project = (DmpProject*)context.serverProject()->project(); |
| 52 | std::string projectData = project->WriteXml(); | 52 | std::string projectData = project->WriteXml(); |
| 53 | + // printf("%s\r\n",projectData.c_str()); | ||
| 53 | if(!guid.empty() && !projectData.empty()) | 54 | if(!guid.empty() && !projectData.empty()) |
| 54 | { | 55 | { |
| 55 | 56 |
| @@ -90,7 +90,7 @@ namespace DmpMapping | @@ -90,7 +90,7 @@ namespace DmpMapping | ||
| 90 | if (mapFont.find(buff) != mapFont.end()) | 90 | if (mapFont.find(buff) != mapFont.end()) |
| 91 | { | 91 | { |
| 92 | boost::property_tree::ptree ptNode; | 92 | boost::property_tree::ptree ptNode; |
| 93 | - ptNode.put("", buff); | 93 | + ptNode.put("", mapFont[buff]); |
| 94 | ptRoot.push_back(std::make_pair("", ptNode)); | 94 | ptRoot.push_back(std::make_pair("", ptNode)); |
| 95 | } | 95 | } |
| 96 | } | 96 | } |
| @@ -12,6 +12,7 @@ | @@ -12,6 +12,7 @@ | ||
| 12 | #include "dmpserverproject.h" | 12 | #include "dmpserverproject.h" |
| 13 | #include "dmpvectorlayer.h" | 13 | #include "dmpvectorlayer.h" |
| 14 | #include "dmpserverproject.h" | 14 | #include "dmpserverproject.h" |
| 15 | +#include "dmpmapserverutil.h" | ||
| 15 | 16 | ||
| 16 | namespace DmpWfs | 17 | namespace DmpWfs |
| 17 | { | 18 | { |
| @@ -35,7 +36,7 @@ namespace DmpWfs | @@ -35,7 +36,7 @@ namespace DmpWfs | ||
| 35 | { | 36 | { |
| 36 | sprintf(char_hrefUrl, "http://%s:%s%s", domain.c_str(),port.c_str(), context.request()->path().c_str()); | 37 | sprintf(char_hrefUrl, "http://%s:%s%s", domain.c_str(),port.c_str(), context.request()->path().c_str()); |
| 37 | } | 38 | } |
| 38 | - hrefUrl = char_hrefUrl; | 39 | + hrefUrl = DmpMapServerUtil::urlEncode(char_hrefUrl,1024); |
| 39 | // hrefUrl = "http://172.26.40.51:8821/?mapService=test"; | 40 | // hrefUrl = "http://172.26.40.51:8821/?mapService=test"; |
| 40 | std::shared_ptr<boost::property_tree::ptree> doc = getCapabilities(project, name,title, version,hrefUrl, projectSettings); | 41 | std::shared_ptr<boost::property_tree::ptree> doc = getCapabilities(project, name,title, version,hrefUrl, projectSettings); |
| 41 | 42 | ||
| @@ -63,6 +64,7 @@ namespace DmpWfs | @@ -63,6 +64,7 @@ namespace DmpWfs | ||
| 63 | rootname = "WFS_Capabilities"; | 64 | rootname = "WFS_Capabilities"; |
| 64 | xmlRoot.add("<xmlattr>.xmlns:xsi","http://www.w3.org/2001/XMLSchema-instance"); | 65 | xmlRoot.add("<xmlattr>.xmlns:xsi","http://www.w3.org/2001/XMLSchema-instance"); |
| 65 | xmlRoot.add("<xmlattr>.xmlns","http://www.opengis.net/wfs"); | 66 | xmlRoot.add("<xmlattr>.xmlns","http://www.opengis.net/wfs"); |
| 67 | + xmlRoot.add("<xmlattr>.ogc","http://www.ogc.net/wfs"); | ||
| 66 | xmlRoot.add("<xmlattr>.xmlns:sld","http://www.opengis.net/sld"); | 68 | xmlRoot.add("<xmlattr>.xmlns:sld","http://www.opengis.net/sld"); |
| 67 | xmlRoot.add("<xmlattr>.xsi:schemaLocation","http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.0.0/WFS-capabilities.xsd"); | 69 | xmlRoot.add("<xmlattr>.xsi:schemaLocation","http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.0.0/WFS-capabilities.xsd"); |
| 68 | xmlRoot.add("<xmlattr>.version", version); | 70 | xmlRoot.add("<xmlattr>.version", version); |
| 1 | +/************************************************************************** | ||
| 2 | +* file: dmpprint.cpp | ||
| 3 | + | ||
| 4 | +* Author: qingxiongf | ||
| 5 | +* Date: 2022-01-20 18:50:40 | ||
| 6 | +* Email: qingxiongf@chinadci.com | ||
| 7 | +* copyright: 广州城市信息研究所有限公司 | ||
| 8 | +***************************************************************************/ | ||
| 9 | +#include "dmpprint.h" |
src/server/services/mapserver/wms/dmpprint.h
0 → 100644
| 1 | +/************************************************************************** | ||
| 2 | +* file: dmpprint.h | ||
| 3 | + | ||
| 4 | +* Author: qingxiongf | ||
| 5 | +* Date: 2022-01-20 18:50:30 | ||
| 6 | +* Email: qingxiongf@chinadci.com | ||
| 7 | +* copyright: 广州城市信息研究所有限公司 | ||
| 8 | +***************************************************************************/ | ||
| 9 | + | ||
| 10 | +#ifndef __dmpprint_h__ | ||
| 11 | +#define __dmpprint_h__ | ||
| 12 | + | ||
| 13 | + | ||
| 14 | + | ||
| 15 | + | ||
| 16 | +#endif // __dmpprint_h__ |
| @@ -10,6 +10,7 @@ | @@ -10,6 +10,7 @@ | ||
| 10 | #include "dmpserverresponse.h" | 10 | #include "dmpserverresponse.h" |
| 11 | #include "dmpserverrequest.h" | 11 | #include "dmpserverrequest.h" |
| 12 | #include "dmpserverproject.h" | 12 | #include "dmpserverproject.h" |
| 13 | +#include "dmpmapserverutil.h" | ||
| 13 | namespace DmpWms | 14 | namespace DmpWms |
| 14 | { | 15 | { |
| 15 | void writeGetCapabilities( const DmpServerContext &context, const DmpWmsParameters& params, | 16 | void writeGetCapabilities( const DmpServerContext &context, const DmpWmsParameters& params, |
| @@ -593,19 +593,13 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ | @@ -593,19 +593,13 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ | ||
| 593 | { | 593 | { |
| 594 | DmpVectorLayer *layer = (DmpVectorLayer *)m_vLayers[i]; | 594 | DmpVectorLayer *layer = (DmpVectorLayer *)m_vLayers[i]; |
| 595 | 595 | ||
| 596 | - //double r1 = layer->m_dUpperScale; // * | ||
| 597 | - //double r2 = layer->m_dLowerScale; // * | ||
| 598 | - | ||
| 599 | - ///if ((this->m_dScaleDenominator > r1 || this->m_dScaleDenominator < r2 || ml->m_pRenderer == 0)) | ||
| 600 | - // continue; | ||
| 601 | - | ||
| 602 | double start = clock(); | 596 | double start = clock(); |
| 603 | double cost, cost2; | 597 | double cost, cost2; |
| 604 | 598 | ||
| 605 | string sql = this->GetFeatureInfoSQL(layer, x0, y0, dis, feature_count); //sql语句中使用 ::box | 599 | string sql = this->GetFeatureInfoSQL(layer, x0, y0, dis, feature_count); //sql语句中使用 ::box |
| 606 | if (sql == "") | 600 | if (sql == "") |
| 607 | continue; | 601 | continue; |
| 608 | - printf("%s\r\n",sql.c_str()); | 602 | + //printf("%s\r\n",sql.c_str()); |
| 609 | string layerName = layer->name(); | 603 | string layerName = layer->name(); |
| 610 | try | 604 | try |
| 611 | { | 605 | { |
| @@ -614,9 +608,16 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ | @@ -614,9 +608,16 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ | ||
| 614 | break; | 608 | break; |
| 615 | if (pPgsqlConn->ExecWaitBinary(sql)) | 609 | if (pPgsqlConn->ExecWaitBinary(sql)) |
| 616 | { | 610 | { |
| 617 | - string srid = std::__cxx11::to_string(layer->crs().srid()); | ||
| 618 | - mapserver::DmpMapServerUtil::responseGeojson(pPgsqlConn, responseData, layerName, srid); | ||
| 619 | - return true; | 611 | + if(pPgsqlConn->GetRowCount()>0 || i==0) |
| 612 | + { | ||
| 613 | + string srid = std::__cxx11::to_string(layer->crs().srid()); | ||
| 614 | + mapserver::DmpMapServerUtil::responseGeojson(pPgsqlConn, responseData, layerName, srid); | ||
| 615 | + return true; | ||
| 616 | + } | ||
| 617 | + else | ||
| 618 | + { | ||
| 619 | + continue; | ||
| 620 | + } | ||
| 620 | } | 621 | } |
| 621 | } | 622 | } |
| 622 | catch (const std::exception &e) | 623 | catch (const std::exception &e) |
请
注册
或
登录
后发表评论