LayerModel *LayerManager::create(QStandardItem *parentLayer, const QString &type, LayerManager *lm, const QString& layername, const QString& description, const IOOptions &options) { if ( parentLayer == 0) parentLayer = lm->layerTree()->invisibleRootItem(); if ( parentLayer){ auto iter = _createLayers.find(type); if ( iter != _createLayers.end()){ auto createFunc = (*iter).second; LayerModel *layer = createFunc(lm, parentLayer,layername, description, options); layer->nodeId(lm->nextId()); layer->fillData(); qint32 lowernodeid = options.contains("lowernodeid") ? options["lowernodid"].toInt() : iUNDEF; addLayer(parentLayer, layer, lm,lowernodeid); return layer; } } return 0; }
LayerModel *LayerManager::create(QStandardItem *parentLayer, const ICoverage &cov, LayerManager *lm, const IOOptions &options) { if (cov->coordinateSystem()->isUnknown() && lm->rootLayer()->screenCsy().isValid()){ QString mes = QString("coordinate system 'unknown' not compatible with coordinate system of the layerview"); kernel()->issues()->log(mes, IssueObject::itWarning); return 0; } if (parentLayer == 0) parentLayer = lm->layerTree()->invisibleRootItem(); QString type = TypeHelper::type2name(cov->ilwisType()); if (options.contains("createtype")) { type = options["createtype"].toString(); } auto iter = _createLayers.find(type); if ( iter != _createLayers.end()){ auto createFunc = (*iter).second; QString layername = options.contains("layername") ? options["layername"].toString(): cov->name(); LayerModel *layer = createFunc(lm, parentLayer,layername, cov->description(),options); if (!lm->rootLayer()->screenCsy().isValid()) {// first real layer sets the csy lm->rootLayer()->screenCsy(cov->coordinateSystem()); lm->rootLayer()->coverageEnvelope(cov->envelope()); if (cov->ilwisType() == itRASTER) { IRasterCoverage rc = cov.as<RasterCoverage>(); if (rc->georeference()->grfType<UndeterminedGeoReference>()) { Envelope envUndetermned(Coordinate(0, 0), Coordinate(rc->size().xsize(), rc->size().ysize())); // none.grf bounds lm->rootLayer()->coverageEnvelope(envUndetermned); } } lm->setLayerListName(layername); } else { // adjust rootlayer envelop to fit all layers Coordinate crd1_trans; Coordinate crd2_trans; Envelope envelop = cov->envelope(); if (!cov->coordinateSystem()->isEqual(lm->rootLayer()->screenCsy().ptr())) { Coordinate crn1 = envelop.min_corner(); Coordinate crn2 = envelop.max_corner(); crd1_trans = lm->rootLayer()->screenCsy()->coord2coord(cov->coordinateSystem(), crn1); crd2_trans = lm->rootLayer()->screenCsy()->coord2coord(cov->coordinateSystem(), crn2); } else { crd1_trans = envelop.min_corner(); crd2_trans = envelop.max_corner(); } Envelope orgenv = lm->rootLayer()->coverageEnvelope(); if (!(orgenv.contains(crd1_trans) && orgenv.contains(crd2_trans))) { orgenv += crd1_trans; orgenv += crd2_trans; lm->rootLayer()->coverageEnvelope(orgenv); if (cov->ilwisType() == itRASTER) { // TODO: check georef none ? } } } qint32 lowernodeid = options.contains("lowernodeid") ? options["lowernodeid"].toInt() : iUNDEF; layer->nodeId(lm->nextId()); layer->fillData(); addLayer(parentLayer, layer, lm, lowernodeid); lm->lastAddedCoverageLayer(layer); return layer; } return 0; }