正在显示
5 个修改的文件
包含
287 行增加
和
7 行删除
@@ -24,8 +24,35 @@ SET(DMAP_CORE_SRCS | @@ -24,8 +24,35 @@ SET(DMAP_CORE_SRCS | ||
24 | dmptilematrixset.cpp | 24 | dmptilematrixset.cpp |
25 | dmpvectordataprovider.cpp | 25 | dmpvectordataprovider.cpp |
26 | dmpvectorlayer.cpp | 26 | dmpvectorlayer.cpp |
27 | + dmpvectorthinlayer.cpp | ||
27 | dmpvectorlayerrenderer.cpp | 28 | dmpvectorlayerrenderer.cpp |
28 | dmpxmlutils.cpp | 29 | dmpxmlutils.cpp |
30 | + | ||
31 | + renderer/clsMalloc.cpp | ||
32 | + renderer/clsStruct.cpp | ||
33 | + renderer/clsJson.cpp | ||
34 | + renderer/clsXML.cpp | ||
35 | + renderer/clsUtil.cpp | ||
36 | + renderer/clsRect.cpp | ||
37 | + renderer/AppendBuffer.cpp | ||
38 | + renderer/clsCrSurf.cpp | ||
39 | + renderer/legendParamater.cpp | ||
40 | + renderer/DataCollection.cpp | ||
41 | + | ||
42 | + renderer/SimpleLineSymbol.cpp | ||
43 | + renderer/SimpleMarkerSymbol.cpp | ||
44 | + renderer/TrueTypeMarkerSymbol.cpp | ||
45 | + renderer/TextSymbol.cpp | ||
46 | + renderer/SimplePolygonSymbol.cpp | ||
47 | + | ||
48 | + # renderer/ScaleDependentRenderer.cpp | ||
49 | + # renderer/RangeLabelRenderer.cpp | ||
50 | + renderer/SimpleLabelRenderer.cpp | ||
51 | + renderer/SimpleRenderer.cpp | ||
52 | + renderer/Renderer.cpp | ||
53 | + renderer/ValueMapRendererComponent.cpp | ||
54 | + renderer/ValueMapRenderer.cpp | ||
55 | + renderer/GroupRenderer.cpp | ||
29 | ) | 56 | ) |
30 | 57 | ||
31 | SET(DMAP_CORE_HDRS | 58 | SET(DMAP_CORE_HDRS |
@@ -48,8 +75,36 @@ SET(DMAP_CORE_HDRS | @@ -48,8 +75,36 @@ SET(DMAP_CORE_HDRS | ||
48 | dmptilematrixset.h | 75 | dmptilematrixset.h |
49 | dmpvectordataprovider.h | 76 | dmpvectordataprovider.h |
50 | dmpvectorlayer.h | 77 | dmpvectorlayer.h |
78 | + dmpvectorthinlayer.h | ||
51 | dmpvectorlayerrenderer.h | 79 | dmpvectorlayerrenderer.h |
52 | dmpxmlutils.h | 80 | dmpxmlutils.h |
81 | + | ||
82 | + renderer/clsMalloc.h | ||
83 | + renderer/clsStruct.h | ||
84 | + renderer/clsJson.h | ||
85 | + renderer/clsXML.h | ||
86 | + renderer/clsUtil.h | ||
87 | + renderer/clsRect.h | ||
88 | + renderer/AppendBuffer.h | ||
89 | + renderer/clsCrSurf.h | ||
90 | + renderer/legendParamater.h | ||
91 | + renderer/DataCollection.h | ||
92 | + | ||
93 | + renderer/SimpleLineSymbol.h | ||
94 | + renderer/SimpleMarkerSymbol.h | ||
95 | + renderer/TrueTypeMarkerSymbol.h | ||
96 | + renderer/TextSymbol.h | ||
97 | + renderer/SimplePolygonSymbol.h | ||
98 | + #renderer/RangMapRenderer.h | ||
99 | + #renderer/RangeMapRenderer.h | ||
100 | + #renderer/ScaleDependentRenderer.h | ||
101 | + #renderer/RangeLabelRenderer.h | ||
102 | + renderer/SimpleLabelRenderer.h | ||
103 | + renderer/SimpleRenderer.h | ||
104 | + renderer/Renderer.h | ||
105 | + renderer/ValueMapRendererComponent.h | ||
106 | + renderer/ValueMapRenderer.h | ||
107 | + renderer/GroupRenderer.h | ||
53 | ) | 108 | ) |
54 | 109 | ||
55 | INCLUDE_DIRECTORIES( | 110 | INCLUDE_DIRECTORIES( |
@@ -7,8 +7,10 @@ | @@ -7,8 +7,10 @@ | ||
7 | * copyright: 广州城市信息研究所有限公司 | 7 | * copyright: 广州城市信息研究所有限公司 |
8 | ***************************************************************************/ | 8 | ***************************************************************************/ |
9 | #include "dmpvectorlayer.h" | 9 | #include "dmpvectorlayer.h" |
10 | +#include "dmpxmlutils.h" | ||
10 | #include "dmpvectorlayerrenderer.h" | 11 | #include "dmpvectorlayerrenderer.h" |
11 | #include "dmpproviderregistry.h" | 12 | #include "dmpproviderregistry.h" |
13 | +#include "libpq-fe.h" | ||
12 | 14 | ||
13 | DmpVectorLayer::DmpVectorLayer(const std::string &path, | 15 | DmpVectorLayer::DmpVectorLayer(const std::string &path, |
14 | const std::string &baseName, | 16 | const std::string &baseName, |
@@ -37,7 +39,34 @@ DmpMapLayerRenderer *DmpVectorLayer::createMapRenderer(DmpRenderContext &rendere | @@ -37,7 +39,34 @@ DmpMapLayerRenderer *DmpVectorLayer::createMapRenderer(DmpRenderContext &rendere | ||
37 | 39 | ||
38 | bool DmpVectorLayer::readXml(const boost::property_tree::ptree &layerNode) | 40 | bool DmpVectorLayer::readXml(const boost::property_tree::ptree &layerNode) |
39 | { | 41 | { |
40 | - return false; | 42 | + //id="gzxxd_aabe200b_5b63_4b82_8546_af1fc99e4ec6" name="gzxxd" alias="中学" type="1" |
43 | + // geometry="Point" alwaysShow="true" maxScale="0" maxScale="50000" | ||
44 | + id_ = layerNode.get<std::string>("<xmlattr>.id"); | ||
45 | + name_ = layerNode.get<std::string>("<xmlattr>.name"); | ||
46 | + title_ = layerNode.get<std::string>("<xmlattr>.alias"); | ||
47 | + boost::property_tree::ptree pExtent = layerNode.get_child("extent"); | ||
48 | + extent_ = DmpXmlUtils::readRectangle(pExtent); | ||
49 | + dataSource_ = layerNode.get<std::string>("datasource"); | ||
50 | + | ||
51 | + setDataProvider("postgres"); | ||
52 | + | ||
53 | + // boost::property_tree::ptree pResourceMetadata = layerNode.get_child("resourcemetadata"); | ||
54 | + // schema_ = layerNode.get<std::string>("schema"); | ||
55 | + // geom_ = layerNode.get<std::string>("geom"); | ||
56 | + // featurecount_ = layerNode.get<unsigned int>("featurecount"); | ||
57 | + | ||
58 | + boost::property_tree::ptree pRenderer = layerNode.get_child("renderer"); | ||
59 | + auto pIter = pRenderer.begin(); | ||
60 | + if(pIter == pRenderer.end())return false; | ||
61 | + DmapCore_30::Renderer* renderer_30 = nullptr; | ||
62 | + DmapCore_30::clsXML::XMLParse(pIter->first, pIter->second, &renderer_30); | ||
63 | + renderer_30_ = shared_ptr<DmapCore_30::Renderer>(renderer_30); | ||
64 | + | ||
65 | + // geom_ = "geom"; | ||
66 | + // schema_ = "public"; | ||
67 | + // wkbType_ = DmpWkbTypes::MultiLineString; | ||
68 | + | ||
69 | + return true; | ||
41 | } | 70 | } |
42 | 71 | ||
43 | bool DmpVectorLayer::writeXml(boost::property_tree::ptree &layerNode) | 72 | bool DmpVectorLayer::writeXml(boost::property_tree::ptree &layerNode) |
@@ -47,12 +76,11 @@ bool DmpVectorLayer::writeXml(boost::property_tree::ptree &layerNode) | @@ -47,12 +76,11 @@ bool DmpVectorLayer::writeXml(boost::property_tree::ptree &layerNode) | ||
47 | 76 | ||
48 | void DmpVectorLayer::setRenderer(DmpFeatureRenderer *renderer) | 77 | void DmpVectorLayer::setRenderer(DmpFeatureRenderer *renderer) |
49 | { | 78 | { |
50 | - | 79 | + |
51 | } | 80 | } |
52 | 81 | ||
53 | void DmpVectorLayer::setDataSource(const std::string &dataSource, const std::string &baseName, const std::string &provider, bool loadDefaultStyleFlag) | 82 | void DmpVectorLayer::setDataSource(const std::string &dataSource, const std::string &baseName, const std::string &provider, bool loadDefaultStyleFlag) |
54 | { | 83 | { |
55 | - | ||
56 | DmpWkbTypes::GeometryType geomType = GeometryType(); | 84 | DmpWkbTypes::GeometryType geomType = GeometryType(); |
57 | } | 85 | } |
58 | 86 | ||
@@ -63,21 +91,100 @@ DmpWkbTypes::GeometryType DmpVectorLayer::GeometryType() const | @@ -63,21 +91,100 @@ DmpWkbTypes::GeometryType DmpVectorLayer::GeometryType() const | ||
63 | 91 | ||
64 | bool DmpVectorLayer::setDataProvider(std::string const &provider) | 92 | bool DmpVectorLayer::setDataProvider(std::string const &provider) |
65 | { | 93 | { |
94 | + //临时测试使用 | ||
95 | + PGconn* pPGconn = PQconnectdb(dataSource_.c_str()); | ||
96 | + ConnStatusType t = PQstatus(pPGconn); | ||
97 | + if (t != CONNECTION_OK) | ||
98 | + return false; | ||
99 | + int re = PQsetClientEncoding(pPGconn, "UTF-8"); | ||
100 | + | ||
101 | + std::string sql = "select t.f_geometry_column, t.type ,f_table_schema,t.srid from public.geometry_columns t where lower( t.f_table_name) = lower('" + name_ + "');"; | ||
102 | + PGresult* pPGresult= PQexec(pPGconn, sql.c_str()); | ||
103 | + char *sz = PQerrorMessage(pPGconn); | ||
104 | + if(sz != nullptr && strcmp(sz,"") !=0) | ||
105 | + { | ||
106 | + PQfinish(pPGconn); return false; | ||
107 | + } | ||
108 | + | ||
109 | + int rowCount = PQntuples(pPGresult); | ||
110 | + if(rowCount<1) | ||
111 | + { | ||
112 | + PQfinish(pPGconn); return false; | ||
113 | + } | ||
114 | + | ||
115 | + geom_ = PQgetvalue(pPGresult, 0, 0); | ||
116 | + const char* geomtype = PQgetvalue(pPGresult, 0, 1); | ||
117 | + schema_ = PQgetvalue(pPGresult, 0, 2); | ||
118 | + //std::string srid = PQgetvalue(pPGresult, 0, 3); | ||
119 | + | ||
120 | + if (!geomtype) | ||
121 | + return false; | ||
122 | + if (!strcmp(geomtype, "POINT")) wkbType_ = DmpWkbTypes::Point; | ||
123 | + else if (!strcmp(geomtype, "MULTIPOINT")) wkbType_ = DmpWkbTypes::MultiPoint; | ||
124 | + else if (!strcmp(geomtype, "LINESTRING")) wkbType_ = DmpWkbTypes::LineString; | ||
125 | + else if (!strcmp(geomtype, "MULTILINESTRING"))wkbType_ = DmpWkbTypes::MultiLineString; | ||
126 | + else if (!strcmp(geomtype, "POLYGON")) wkbType_ = DmpWkbTypes::Polygon; | ||
127 | + else if (!strcmp(geomtype, "MULTIPOLYGON")) wkbType_ = DmpWkbTypes::MultiPolygon; | ||
128 | + else if (!strcmp(geomtype, "GEOMETRY")) wkbType_ = DmpWkbTypes::Unknown; | ||
129 | + PQclear(pPGresult); pPGresult = NULL; | ||
130 | + PQfinish(pPGconn); | ||
131 | + | ||
132 | + return true; | ||
133 | + | ||
134 | + | ||
66 | providerKey_ = provider; | 135 | providerKey_ = provider; |
67 | delete dataProvider_; | 136 | delete dataProvider_; |
68 | 137 | ||
69 | - dataProvider_ = dynamic_cast<DmpVectorDataProvider *>(DmpProviderRegistry::Instance()->CreateProvider(provider, dataSource_)); | 138 | + dataProvider_ = dynamic_cast<DmpVectorDataProvider *>(DmpProviderRegistry::Instance(provider)->CreateProvider(provider, dataSource_)); |
70 | if (!dataProvider_) | 139 | if (!dataProvider_) |
71 | { | 140 | { |
72 | isValid_ = false; | 141 | isValid_ = false; |
73 | return false; | 142 | return false; |
74 | } | 143 | } |
75 | - isValid_ = dataProvider_->IsValid(); | 144 | + isValid_ = dataProvider_->IsValid() |
145 | + ; | ||
76 | if (!isValid_) | 146 | if (!isValid_) |
77 | { | 147 | { |
78 | return false; | 148 | return false; |
79 | } | 149 | } |
80 | wkbType_ = dataProvider_->WkbType(); | 150 | wkbType_ = dataProvider_->WkbType(); |
81 | - | ||
82 | return true; | 151 | return true; |
83 | -} | ||
152 | +} | ||
153 | + | ||
154 | + shared_ptr<DmpVectorThinLayer> DmpVectorLayer::GetCurrentScaleTable(double dx) | ||
155 | + { | ||
156 | + | ||
157 | +/* | ||
158 | + int outTime = 600; | ||
159 | + if(this->dataCount >500000 && this->m_pDataset->m_MapLayerThinning.size() ==0) | ||
160 | + { | ||
161 | + outTime = 20; | ||
162 | + } | ||
163 | + | ||
164 | + clsLockClass lock(_wlock); | ||
165 | + time_t now = time(0); | ||
166 | + //shared_ptr<WMSServer> wmsServer = this->m_mapWmsServer[servicename]; | ||
167 | + if(now - this->m_pDataset->m_loadMapLayerThinning > outTime) | ||
168 | + { | ||
169 | + this->m_pDataset->m_loadMapLayerThinning = now; | ||
170 | + shared_ptr<Workspace> pWorkspaceDef = DataSourcePools::get_instance()->GetDefaultWorkspace(); | ||
171 | + | ||
172 | + this->m_pDataset->InitMapLayerThinning(pWorkspaceDef.get(),this->m_layerName, this->m_dbSource); | ||
173 | + } | ||
174 | + else | ||
175 | + { | ||
176 | + this->m_pDataset->m_loadMapLayerThinning = now; | ||
177 | + } | ||
178 | +*/ | ||
179 | + | ||
180 | + for(int i =0; i< this->thinLayers_.size(); i++) | ||
181 | + { | ||
182 | + shared_ptr<DmpVectorThinLayer> mapLayerThinning = this->thinLayers_[i]; | ||
183 | + | ||
184 | + if(mapLayerThinning->IsCurrentLayer(dx)) | ||
185 | + { | ||
186 | + return mapLayerThinning; | ||
187 | + } | ||
188 | + } | ||
189 | + return nullptr; | ||
190 | + } |
@@ -15,6 +15,9 @@ | @@ -15,6 +15,9 @@ | ||
15 | #include "dmpmaplayer.h" | 15 | #include "dmpmaplayer.h" |
16 | #include "dmpwkbtypes.h" | 16 | #include "dmpwkbtypes.h" |
17 | #include "dmpvectordataprovider.h" | 17 | #include "dmpvectordataprovider.h" |
18 | +#include "dmpvectorthinlayer.h" | ||
19 | +#include "Renderer.h" | ||
20 | +#include <vector> | ||
18 | 21 | ||
19 | class DmpFeatureRenderer; | 22 | class DmpFeatureRenderer; |
20 | 23 | ||
@@ -47,10 +50,29 @@ class CORE_EXPORT DmpVectorLayer : public DmpMapLayer | @@ -47,10 +50,29 @@ class CORE_EXPORT DmpVectorLayer : public DmpMapLayer | ||
47 | void setDataSource(const std::string &dataSource, const std::string &baseName, const std::string &provider, bool loadDefaultStyleFlag); | 50 | void setDataSource(const std::string &dataSource, const std::string &baseName, const std::string &provider, bool loadDefaultStyleFlag); |
48 | DmpWkbTypes::GeometryType GeometryType() const; | 51 | DmpWkbTypes::GeometryType GeometryType() const; |
49 | bool setDataProvider(std::string const &provider); | 52 | bool setDataProvider(std::string const &provider); |
53 | + | ||
54 | + | ||
55 | + shared_ptr<DmapCore_30::Renderer> GetRenderer30() { return renderer_30_; } | ||
56 | + vector<shared_ptr<DmpVectorThinLayer>> thinLayers() const { return thinLayers_; } | ||
57 | + shared_ptr<DmpVectorThinLayer> GetCurrentScaleTable(double dx); | ||
58 | + | ||
59 | + std::string schema() { return schema_;} | ||
60 | + std::string geom() { return geom_;} | ||
61 | + std::string wherestr() { return wherestr_;} | ||
62 | + size_t featurecount(){return featurecount_;} | ||
50 | private: | 63 | private: |
51 | bool readExtentFromXml_; | 64 | bool readExtentFromXml_; |
52 | DmpWkbTypes::Type wkbType_ = DmpWkbTypes::Unknown; | 65 | DmpWkbTypes::Type wkbType_ = DmpWkbTypes::Unknown; |
53 | DmpFeatureRenderer *renderer_ = nullptr; | 66 | DmpFeatureRenderer *renderer_ = nullptr; |
54 | DmpVectorDataProvider *dataProvider_ = nullptr; | 67 | DmpVectorDataProvider *dataProvider_ = nullptr; |
68 | + | ||
69 | + std::string schema_; | ||
70 | + std::string geom_; | ||
71 | + size_t featurecount_; | ||
72 | + | ||
73 | + std::string wherestr_; | ||
74 | + shared_ptr<DmapCore_30::Renderer> renderer_30_ = nullptr; | ||
75 | + vector<shared_ptr<DmpVectorThinLayer>> thinLayers_; | ||
76 | + | ||
55 | }; | 77 | }; |
56 | #endif //__dmpvectorlayer_h__ | 78 | #endif //__dmpvectorlayer_h__ |
src/core/dmpvectorthinlayer.cpp
0 → 100644
1 | +/************************************************************************** | ||
2 | +* file: dmpvectorthinlayer.cpp | ||
3 | + | ||
4 | +* Author: qingxiongf | ||
5 | +* Date: 2021-12-13 10:05:35 | ||
6 | +* Email: qingxiongf@chinadci.com | ||
7 | +* copyright: 广州城市信息研究所有限公司 | ||
8 | +***************************************************************************/ | ||
9 | +#include "dmpvectorthinlayer.h" | ||
10 | + | ||
11 | +DmpVectorThinLayer::DmpVectorThinLayer(/* args */) | ||
12 | +{ | ||
13 | + | ||
14 | +} | ||
15 | + | ||
16 | +DmpVectorThinLayer::~DmpVectorThinLayer() | ||
17 | +{ | ||
18 | + | ||
19 | +} | ||
20 | + | ||
21 | + bool DmpVectorThinLayer::IsCurrentLayer(double d) | ||
22 | +{ | ||
23 | + if(d > m_ddis) | ||
24 | + { | ||
25 | + return true; | ||
26 | + } | ||
27 | + return false; | ||
28 | +} | ||
29 | + | ||
30 | +bool DmpVectorThinLayer::Init(double minX, double minY, double maxX, double maxY, int dxCount, int dyCount,std::string tableName) | ||
31 | +{ | ||
32 | + m_ddis = std::max( (maxX - minX)/ dxCount, (maxY - minY)/ dyCount); | ||
33 | + m_tableName = tableName; | ||
34 | + return true; | ||
35 | +} | ||
36 | + | ||
37 | +bool DmpVectorThinLayer::Init(double dis,std::string tableName) | ||
38 | +{ | ||
39 | + m_ddis =dis; | ||
40 | + m_tableName = tableName; | ||
41 | + return true; | ||
42 | +} | ||
43 | + | ||
44 | +double DmpVectorThinLayer::GeDisPix() | ||
45 | +{ | ||
46 | + return this->m_ddis; | ||
47 | +} |
src/core/dmpvectorthinlayer.h
0 → 100644
1 | +/************************************************************************** | ||
2 | +* file: dmpvectorthinlayer.h | ||
3 | + | ||
4 | +* Author: qingxiongf | ||
5 | +* Date: 2021-12-13 10:05:42 | ||
6 | +* Email: qingxiongf@chinadci.com | ||
7 | +* copyright: 广州城市信息研究所有限公司 | ||
8 | +***************************************************************************/ | ||
9 | + | ||
10 | +#ifndef __dmpvectorthinlayer_h__ | ||
11 | +#define __dmpvectorthinlayer_h__ | ||
12 | + | ||
13 | +#include "dmap_core.h" | ||
14 | +#include <string> | ||
15 | + | ||
16 | +class CORE_EXPORT DmpVectorThinLayer | ||
17 | +{ | ||
18 | + public: | ||
19 | + DmpVectorThinLayer(/* args */); | ||
20 | + | ||
21 | + ~DmpVectorThinLayer(); | ||
22 | + | ||
23 | + bool IsCurrentLayer(double d); | ||
24 | + | ||
25 | + bool Init(double minX, double minY, | ||
26 | + double maxX, double maxY, | ||
27 | + int dxCount, int dyCount, | ||
28 | + std::string tableName); | ||
29 | + | ||
30 | + bool Init(double minX, | ||
31 | + std::string tableName); | ||
32 | + | ||
33 | + double GeDisPix(); | ||
34 | + | ||
35 | + std::string tableName()const { return m_tableName;} | ||
36 | + | ||
37 | + private: | ||
38 | + int m_indexLevel; | ||
39 | + int m_dataCount; | ||
40 | + double m_dxCount; | ||
41 | + double m_dyCount; | ||
42 | + double m_dR; | ||
43 | + double m_dScaleDenominator; | ||
44 | + double m_ddis; | ||
45 | + std::string m_tableName; | ||
46 | + std::string polygon_area = "geodmap_area"; | ||
47 | +}; | ||
48 | + | ||
49 | +#endif // __dmpvectorthinlayer_h__ |
请
注册
或
登录
后发表评论