dmpvectorlayer.cpp 2.3 KB
/**************************************************************************
* file:              dmpvectorlayer.cpp

* Author:            wanzhongping
* Date:              2021-07-05 16:37:23
* Email:             zhongpingw@chinadci.com
* copyright:         广州城市信息研究所有限公司
***************************************************************************/
#include "dmpvectorlayer.h"
#include "dmpvectorlayerrenderer.h"
#include "dmpproviderregistry.h"

DmpVectorLayer::DmpVectorLayer(const std::string &path,
                               const std::string &baseName,
                               const std::string &providerKey,
                               const DmpVectorLayer::LayerOptions &options)
  : DmpMapLayer(DmpMapLayerType::VectorLayer, baseName, path)
  , readExtentFromXml_(options.readExtentFromXml)
{
  wkbType_ = options.fallbackWkbType;
  setProviderType(providerKey);

  if (!path.empty() && !providerKey.empty())
  {
    setDataSource(path, baseName, providerKey, options.loadDefaultStyle );
  }
}

DmpVectorLayer::~DmpVectorLayer()
{
}

DmpMapLayerRenderer *DmpVectorLayer::createMapRenderer(DmpRenderContext &rendererContext)
{
  return new DmpVectorLayerRenderer(this, rendererContext);
}

bool DmpVectorLayer::readXml(const boost::property_tree::ptree &layerNode)
{
  return false;
}

bool DmpVectorLayer::writeXml(boost::property_tree::ptree &layerNode)
{
  return false;
}

void DmpVectorLayer::setRenderer(DmpFeatureRenderer *renderer)
{
  
}

void DmpVectorLayer::setDataSource(const std::string &dataSource, const std::string &baseName, const std::string &provider, bool loadDefaultStyleFlag)
{
 
  DmpWkbTypes::GeometryType geomType = GeometryType();
}

DmpWkbTypes::GeometryType DmpVectorLayer::GeometryType() const
{
  return DmpWkbTypes::GeometryType(wkbType_);
}

bool DmpVectorLayer::setDataProvider(std::string const &provider)
{
  providerKey_ = provider;
  delete dataProvider_;
  
  dataProvider_ = dynamic_cast<DmpVectorDataProvider *>(DmpProviderRegistry::Instance()->CreateProvider(provider, dataSource_));
  if (!dataProvider_)
  {
    isValid_ = false;
    return false;
  }
  isValid_ = dataProvider_->IsValid();
  if (!isValid_)
  {
    return false;
  }
  wkbType_ = dataProvider_->WkbType();

  return true;
}