提交 9400bedcf268ebee057b2febdcc1bd020b159ea7

作者 qingxiongf
1 个父辈 36db4485

layer

... ... @@ -24,8 +24,35 @@ SET(DMAP_CORE_SRCS
24 24 dmptilematrixset.cpp
25 25 dmpvectordataprovider.cpp
26 26 dmpvectorlayer.cpp
  27 + dmpvectorthinlayer.cpp
27 28 dmpvectorlayerrenderer.cpp
28 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 58 SET(DMAP_CORE_HDRS
... ... @@ -48,8 +75,36 @@ SET(DMAP_CORE_HDRS
48 75 dmptilematrixset.h
49 76 dmpvectordataprovider.h
50 77 dmpvectorlayer.h
  78 + dmpvectorthinlayer.h
51 79 dmpvectorlayerrenderer.h
52 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 110 INCLUDE_DIRECTORIES(
... ...
... ... @@ -7,8 +7,10 @@
7 7 * copyright: 广州城市信息研究所有限公司
8 8 ***************************************************************************/
9 9 #include "dmpvectorlayer.h"
  10 +#include "dmpxmlutils.h"
10 11 #include "dmpvectorlayerrenderer.h"
11 12 #include "dmpproviderregistry.h"
  13 +#include "libpq-fe.h"
12 14
13 15 DmpVectorLayer::DmpVectorLayer(const std::string &path,
14 16 const std::string &baseName,
... ... @@ -37,7 +39,34 @@ DmpMapLayerRenderer *DmpVectorLayer::createMapRenderer(DmpRenderContext &rendere
37 39
38 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 72 bool DmpVectorLayer::writeXml(boost::property_tree::ptree &layerNode)
... ... @@ -47,12 +76,11 @@ bool DmpVectorLayer::writeXml(boost::property_tree::ptree &layerNode)
47 76
48 77 void DmpVectorLayer::setRenderer(DmpFeatureRenderer *renderer)
49 78 {
50   -
  79 +
51 80 }
52 81
53 82 void DmpVectorLayer::setDataSource(const std::string &dataSource, const std::string &baseName, const std::string &provider, bool loadDefaultStyleFlag)
54 83 {
55   -
56 84 DmpWkbTypes::GeometryType geomType = GeometryType();
57 85 }
58 86
... ... @@ -63,21 +91,100 @@ DmpWkbTypes::GeometryType DmpVectorLayer::GeometryType() const
63 91
64 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 135 providerKey_ = provider;
67 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 139 if (!dataProvider_)
71 140 {
72 141 isValid_ = false;
73 142 return false;
74 143 }
75   - isValid_ = dataProvider_->IsValid();
  144 + isValid_ = dataProvider_->IsValid()
  145 + ;
76 146 if (!isValid_)
77 147 {
78 148 return false;
79 149 }
80 150 wkbType_ = dataProvider_->WkbType();
81   -
82 151 return true;
83   -}
\ No newline at end of file
  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 + }
\ No newline at end of file
... ...
... ... @@ -15,6 +15,9 @@
15 15 #include "dmpmaplayer.h"
16 16 #include "dmpwkbtypes.h"
17 17 #include "dmpvectordataprovider.h"
  18 +#include "dmpvectorthinlayer.h"
  19 +#include "Renderer.h"
  20 +#include <vector>
18 21
19 22 class DmpFeatureRenderer;
20 23
... ... @@ -47,10 +50,29 @@ class CORE_EXPORT DmpVectorLayer : public DmpMapLayer
47 50 void setDataSource(const std::string &dataSource, const std::string &baseName, const std::string &provider, bool loadDefaultStyleFlag);
48 51 DmpWkbTypes::GeometryType GeometryType() const;
49 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 63 private:
51 64 bool readExtentFromXml_;
52 65 DmpWkbTypes::Type wkbType_ = DmpWkbTypes::Unknown;
53 66 DmpFeatureRenderer *renderer_ = nullptr;
54 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 78 #endif //__dmpvectorlayer_h__
... ...
  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 +}
\ No newline at end of file
... ...
  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__
... ...
注册登录 后发表评论