正在显示
11 个修改的文件
包含
137 行增加
和
16 行删除
... | ... | @@ -78,9 +78,11 @@ namespace DmapCore_30 |
78 | 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 | 86 | return true; |
85 | 87 | } |
86 | 88 | //clsXML::XMLParse(NULL, f, &m_pRen); | ... | ... |
... | ... | @@ -91,14 +91,14 @@ namespace DmapCore_30 |
91 | 91 | { |
92 | 92 | char buff[300] = {0}; |
93 | 93 | boost::property_tree::ptree ptRenderer; |
94 | - ptRenderer.add("lookupfield",m_sField); | |
94 | + ptRenderer.add("<xmlattr>.lookupfield",m_sField); | |
95 | 95 | |
96 | 96 | int length = (int)m_vComponents.size(); |
97 | 97 | for (int i = 0; i < length; i++) |
98 | 98 | { |
99 | 99 | boost::property_tree::ptree ptNode; |
100 | 100 | ValueMapRendererComponent* vmrc = m_vComponents[i]; |
101 | - ptNode.add("value",vmrc->GetValue()); | |
101 | + ptNode.add("<xmlattr>.value",vmrc->GetValue()); | |
102 | 102 | if(vmrc->m_pSymbol) |
103 | 103 | { |
104 | 104 | vmrc->m_pSymbol->ParsePtree(ptNode); |
... | ... | @@ -112,6 +112,7 @@ namespace DmapCore_30 |
112 | 112 | this->m_pDefaultSymbol->ParsePtree(ptNode); |
113 | 113 | ptRenderer.add_child("OTHER",ptNode); |
114 | 114 | } |
115 | + pt.add_child("VALUEMAPRENDERER",ptRenderer); | |
115 | 116 | return true; |
116 | 117 | } |
117 | 118 | ... | ... |
... | ... | @@ -455,4 +455,85 @@ namespace mapserver |
455 | 455 | } |
456 | 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 | } |
\ No newline at end of file | ... | ... |
... | ... | @@ -29,6 +29,13 @@ namespace mapserver |
29 | 29 | static std::vector<std::string> stringSplit(const std::string &str, const std::string &pattern); |
30 | 30 | |
31 | 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 | ... | ... |
... | ... | @@ -12,6 +12,7 @@ |
12 | 12 | #include "dmpserverproject.h" |
13 | 13 | #include "dmpvectorlayer.h" |
14 | 14 | #include "dmpserverproject.h" |
15 | +#include "dmpmapserverutil.h" | |
15 | 16 | |
16 | 17 | namespace DmpWfs |
17 | 18 | { |
... | ... | @@ -35,7 +36,7 @@ namespace DmpWfs |
35 | 36 | { |
36 | 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 | 40 | // hrefUrl = "http://172.26.40.51:8821/?mapService=test"; |
40 | 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 | 64 | rootname = "WFS_Capabilities"; |
64 | 65 | xmlRoot.add("<xmlattr>.xmlns:xsi","http://www.w3.org/2001/XMLSchema-instance"); |
65 | 66 | xmlRoot.add("<xmlattr>.xmlns","http://www.opengis.net/wfs"); |
67 | + xmlRoot.add("<xmlattr>.ogc","http://www.ogc.net/wfs"); | |
66 | 68 | xmlRoot.add("<xmlattr>.xmlns:sld","http://www.opengis.net/sld"); |
67 | 69 | xmlRoot.add("<xmlattr>.xsi:schemaLocation","http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.0.0/WFS-capabilities.xsd"); |
68 | 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 | 10 | #include "dmpserverresponse.h" |
11 | 11 | #include "dmpserverrequest.h" |
12 | 12 | #include "dmpserverproject.h" |
13 | +#include "dmpmapserverutil.h" | |
13 | 14 | namespace DmpWms |
14 | 15 | { |
15 | 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 | 593 | { |
594 | 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 | 596 | double start = clock(); |
603 | 597 | double cost, cost2; |
604 | 598 | |
605 | 599 | string sql = this->GetFeatureInfoSQL(layer, x0, y0, dis, feature_count); //sql语句中使用 ::box |
606 | 600 | if (sql == "") |
607 | 601 | continue; |
608 | - printf("%s\r\n",sql.c_str()); | |
602 | + //printf("%s\r\n",sql.c_str()); | |
609 | 603 | string layerName = layer->name(); |
610 | 604 | try |
611 | 605 | { |
... | ... | @@ -614,9 +608,16 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
614 | 608 | break; |
615 | 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 | 623 | catch (const std::exception &e) | ... | ... |
请
注册
或
登录
后发表评论