提交 4e460711731cc294c86a5ed65c563f2183173f90
Merge branch 'master' of http://gitlab.ctune.cn/DMapServer/DMapServer4.1
正在显示
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__ |
请
注册
或
登录
后发表评论