ITable FlatTable::copyTable(const QString &nm) { QString url; if ( nm.indexOf(ANONYMOUS_PREFIX) == 0){ url = INTERNAL_CATALOG + "/" + Identity::newAnonymousName(); }else if ( nm.indexOf("://") != -1){ url = nm; }else if ( nm != "" && nm != sUNDEF) url = INTERNAL_CATALOG + "/" + (nm != sUNDEF ? name() : nm); IFlatTable tbl; if (initLoad()){ if ( url != "") tbl.prepare(url); else tbl.prepare(); for(int i=0; i < columnCount(); ++i){ tbl->addColumn(columndefinition(i)); } int i = 0; for(auto record : _datagrid){ tbl->record(i++, record); } } return tbl; }
bool MapCalc::execute(ExecutionContext *ctx, SymbolTable& symTable) { if (_prepState == sNOTPREPARED) if((_prepState = prepare(ctx, symTable)) != sPREPARED) return false; PixelIterator iterOut(_outputRaster); PixelIterator iterEnd = end(iterOut); while(iterOut != iterEnd) { double v = calc(); *iterOut = v; ++iterOut; for(auto& item : _inputRasters){ ++(item.second); } updateTranquilizer(iterOut.linearPosition(), 1000); } if ( _outputRaster->datadef().domain()->ilwisType() == itNUMERICDOMAIN){ double rmin = rUNDEF, rmax= rUNDEF; bool isInt = true; for(double v : _outputRaster ){ rmin = Ilwis::min(rmin, v); rmax = Ilwis::max(rmax, v); if ( v != rUNDEF){ isInt &= std::abs((qint64)v - v) <EPS8; } } NumericRange *range = new NumericRange(rmin,rmax, isInt ? 1 : 0); _outputRaster->datadefRef().range(range); }else { IFlatTable tbl; tbl.prepare(); tbl->addColumn(_outputRaster->primaryKey(),_outputRaster->datadef().domain()); int rec = 0; ItemRangeIterator iter(_outputRaster->datadef().range<>().data()); while (iter.isValid()) { SPDomainItem item = (*iter); tbl->setCell(0,rec++,item->raw()); ++iter; } _outputRaster->setAttributes(tbl); } QVariant value; value.setValue<IRasterCoverage>(_outputRaster); logOperation(_outputRaster, _expression); ctx->setOutput(symTable,value,_outputRaster->name(), itRASTER,_outputRaster->resource() ); return true; }