void TeSPRFile::writeAttributeInfo( TeAttributeList& attList, const string& objCategory, const string& indexName ) { fprintf (file_, "%s %s \n", "CATEGORY_OBJ", objCategory.c_str() ); fprintf (file_, "%s%c%s%c%s%c%s \n", "T_KEY", separator_, "TEXT", separator_, "32", separator_, "0"); TeAttributeList::iterator it = attList.begin(); for ( ;it != attList.end();++it ) { string name = (*it).rep_.name_; if ( TeConvertToUpperCase(name) == TeConvertToUpperCase(indexName) ) continue; // skip the index name switch ((*it).rep_.type_) { case TeSTRING: this->writeTextParameterInfo(name, (*it).rep_.numChar_); break; case TeREAL: this->writeRealParameterInfo(name); break; case TeINT: this->writeIntParameterInfo(name); break; case TeCHARACTER: this->writeTextParameterInfo(name,1); break; case TeDATETIME: this->writeTextParameterInfo(name,25); default: break; } } }
void attributeListToCoverageDimensions(const TeAttributeList& attributes, std::vector<TeCoverageDimension>& dimensions) { dimensions.clear(); unsigned int count = 0; for (TeAttributeList::const_iterator it = attributes.begin(); it != attributes.end(); it++) { TeDataType dimensionType = (it->rep_.type_ == TeINT) ? TeINTEGER : TeDOUBLE; dimensions.push_back(TeCoverageDimension(count, it->rep_.name_, dimensionType)); count++; } }
DBFHandle TeCreateDBFFile (const string& dbfFilename, TeAttributeList& attList) { DBFHandle hDBF = DBFCreate( dbfFilename.c_str() ); if( hDBF == 0 ) return 0; int i =0; TeAttributeList::iterator it=attList.begin(); while ( it != attList.end() ) { TeAttribute at = (*it); string atName = at.rep_.name_; if (atName.size() > 10) { int extra = (int)(atName.size() - 10)/2; int middle = (int)(atName.size()/2); string str = atName.substr(0,middle-extra-1); str += atName.substr(middle+extra); atName = str; } if (at.rep_.type_ == TeSTRING ) { if (DBFAddField( hDBF, atName.c_str(), FTString, at.rep_.numChar_, 0 ) == -1 ) return 0; } else if (at.rep_.type_ == TeINT) { if (DBFAddField( hDBF, atName.c_str(), FTInteger, 32, 0 ) == -1 ) return 0; } else if (at.rep_.type_ == TeREAL) { if (DBFAddField( hDBF, atName.c_str(), FTDouble, 40, 15 ) == -1 ) return 0; } // OBS: shapelib doesn´t deal with xBase field type for Date // we are transforming it to string else if (at.rep_.type_ == TeDATETIME) { if (DBFAddField( hDBF, atName.c_str(), FTDate, 8, 0 ) == -1 ) return 0; } ++i; ++it; } return hDBF; }
bool TeOGRDriver::createAttributeTable(TeTable &table) { if(ogrLayer_ == 0) return false; TeAttributeList::iterator it; TeAttributeList list = table.attributeList(); for(it = list.begin(); it != list.end(); ++it) { OGRFieldDefn oField = Convert2OGR(*it); if((*it).rep_.type_ == TeSTRING) oField.SetWidth((*it).rep_.numChar_); if(ogrLayer_->CreateField(&oField) != OGRERR_NONE) return false; } return true; }
bool updateDB301To302(TeDatabase* db, string& errorMessage) { TeDatabasePortal* portal = db->getPortal(); if(!portal) return false; // ----- valid attribute table TeAttrTableVector attrTableVec; if(db->getAttrTables(attrTableVec)) { for(unsigned int i=0; i<attrTableVec.size(); ++i) { TeTable fromTable = attrTableVec[i]; bool flag = false; if(fromTable.tableType()==TeAttrMedia) continue; //verify if there is another table with the same name for(unsigned int j=0; j<i; ++j) { if(TeConvertToUpperCase(attrTableVec[j].name())==TeConvertToUpperCase(fromTable.name())) { flag = true; break; } } if(flag) continue; if(db->validTable(fromTable)) //fromTable was modified { TeAttributeList newAttrList = fromTable.attributeList(); TeAttributeList oldAttrList = attrTableVec[i].attributeList(); TeAttributeList::iterator newAttIt = newAttrList.begin(); TeAttributeList::iterator oldAttIt = oldAttrList.begin(); bool change = false; while(newAttIt!=newAttrList.end()) { if(((*oldAttIt).rep_.name_) != ((*newAttIt).rep_.name_)) { TeAttributeRep rep = (*newAttIt).rep_; if(db->alterTable(fromTable.name(), rep, (*oldAttIt).rep_.name_)) change = true; } ++newAttIt; ++oldAttIt; } if(change) { // update te_layer_table string upd = " UPDATE te_layer_table "; upd += " SET unique_id = '"+ fromTable.uniqueName() +"'"; upd += ", attr_link = '"+ fromTable.linkName() +"'"; upd += " WHERE attr_table = '"+ fromTable.name() +"'"; if(!db->execute (upd)) { delete portal; errorMessage = "Error updating te_layer_table!\n"; errorMessage += db->errorMessage(); return false; } } }//if }//for portal->freeResult(); } // ----- te_grouping table string sel = " SELECT theme_id, grouping_attr, grouping_attr_type FROM te_grouping "; if(!portal->query(sel)) { delete portal; return false; } while(portal->fetchRow()) { string themeId, gAttr; themeId = portal->getData(0); gAttr = portal->getData(1); int gTypr = portal->getInt(2); if(((gAttr.empty()) || (gAttr=="NONE")) && (gTypr==0)) { string del = " DELETE FROM te_grouping WHERE theme_id = "+ themeId; db->execute(del); } } // ----- te_grouping table delete portal; return true; }
void VoronoiWindow::okPushButton_clicked() { std::string layerName = layerNameLineEdit->text().utf8(); if(layerName.empty()) { QMessageBox::information(this, tr("Information"), tr("Please, define a name to result Layer.")); voronoiTabWidget->setCurrentPage(0); layerNameLineEdit->setFocus(); return; } std::string layerLinesName; if(generateLinesCheckBox->isChecked()) { layerLinesName = layerLinesLineEdit->text().ascii(); if(layerLinesName.empty()) { QMessageBox::information(this, tr("Information"), tr("Please, define a name to Layer of Lines.")); voronoiTabWidget->setCurrentPage(1); layerLinesLineEdit->setFocus(); return; } } if(!isLayerNameValid(layerName)) { voronoiTabWidget->setCurrentPage(0); layerNameLineEdit->setFocus(); return; } if(!isLayerNameValid(layerLinesName)) { voronoiTabWidget->setCurrentPage(1); layerLinesLineEdit->setFocus(); return; } if(layerName == layerLinesName) { QMessageBox::information(this, tr("Information"), tr("Please, define names differents to Layer result and Layer of Lines.")); return; } TeDatabase* db = plugin_params_->getCurrentDatabasePtr(); TeTheme* theme = getTheme(themeComboBox->currentText().latin1()); if(theme == 0) { QMessageBox::critical(this, tr("Error"), tr("Error getting the input Theme.")); return; } TePrecision::instance().setPrecision(TeGetPrecision(theme->layer()->projection())); TeTheme *themeDelimiter = getTheme(boxComboBox->currentText().latin1()); if(themeDelimiter == 0) { QMessageBox::critical(this, tr("Error"), tr("Error getting the delimiter Layer.")); return; } // Verifies is the box chosen is valid TeBox b = themeDelimiter->layer()->box(); TeProjection* projFrom = themeDelimiter->layer()->projection(); TeProjection* projTo = theme->layer()->projection(); if(!((*projFrom) == (*projTo))) // need remap? b = TeRemapBox(b, projFrom, projTo); TeBox& inputBox = theme->layer()->box(); if(!TeIntersects(b, inputBox)) { QMessageBox::information(this, tr("Information"), tr("The box chosen do not intercepts the input Theme. Please, try another.")); voronoiTabWidget->setCurrentPage(1); boxComboBox->setFocus(); return; } //preparing to read the layer bool loadAllAttributes=false; if (diagramType==MWVoronoi) loadAllAttributes = true; bool loadGeometries = true; TeQuerierParams querierParams(loadGeometries, loadAllAttributes); querierParams.setParams(theme->layer()); TeQuerier querier(querierParams); querier.loadInstances(); //finding weight's attribute TeAttributeList attrList = querier.getAttrList(); int weightAttrN=0; if (diagramType==MWVoronoi) { for (std::vector<TeAttribute>::iterator i=attrList.begin(); i!=attrList.end();++i) { if (weightComboBox->currentText()==i->rep_.name_) { break; } weightAttrN++; } } int n=querier.numElemInstances(); if(n==0) { QMessageBox::critical(this, tr("Error"), tr("Error getting the points of input Theme.")); return; } TeWaitCursor wait; // Converts x,y to a float array in order to pass to VoronoiDiagramGenerator class float* x = new float[n]; float* y = new float[n]; //pointers for weighted voronoi float* w; int numPoints; w= new float[n]; numPoints = 0; TeSTInstance sti; string peso; //TePoint pointBefore(0,0); while(querier.fetchInstance(sti)) { // for each point // Stores on float array if(sti.hasPoints()) { TePointSet pointSet; //reading geometry sti.getGeometry(pointSet); x[numPoints] = pointSet[0].location().x(); y[numPoints] = pointSet[0].location().y(); //reading weight if (diagramType==MWVoronoi) { stringstream ss; sti.getPropertyValue(peso,weightAttrN); ss<<peso; ss>>w[numPoints]; } numPoints++; }
bool TeSQLite::createTable(const string& table, TeAttributeList &attr) { errorMessage_ = ""; bool first = true; TeAttributeList::iterator it = attr.begin(); string createTable ="CREATE TABLE " + table +" ("; string type; string pkeys; while(it != attr.end()) { switch ((*it).rep_.type_) { case TeSTRING: type = "TEXT"; break; case TeREAL: type = "REAL"; break; case TeINT: case TeUNSIGNEDINT: type = "INTEGER"; break; case TeBLOB: //type = "OID"; type = "BLOB"; break; case TeDATETIME: type = "NUMERIC"; break; case TeCHARACTER: type = "TEXT"; break; case TeBOOLEAN: type = "NUMERIC"; break; case TePOINTTYPE: case TePOINTSETTYPE: if(!first) createTable += ", "; else first = false; createTable += " x REAL DEFAULT 0.0,"; createTable += " y REAL DEFAULT 0.0 "; ++it; continue; case TeLINE2DTYPE: case TeLINESETTYPE: if(!first) createTable += ", "; else first = false; createTable += "lower_x REAL not null ,"; createTable += "lower_y REAL not null ,"; createTable += "upper_x REAL not null ,"; createTable += "upper_y REAL not null ,"; createTable += "spatial_data BLOB not null "; ++it; continue; case TePOLYGONTYPE: case TePOLYGONSETTYPE: if(!first) createTable += ", "; else first = false; createTable += "lower_x REAL not null ,"; createTable += "lower_y REAL not null ,"; createTable += "upper_x REAL not null ,"; createTable += "upper_y REAL not null ,"; createTable += "spatial_data BLOB not null "; ++it; continue; case TeCELLTYPE: case TeCELLSETTYPE: if(!first) createTable += ", "; else first = false; createTable += "lower_x REAL not null ,"; createTable += "lower_y REAL not null ,"; createTable += "upper_x REAL not null ,"; createTable += "upper_y REAL not null ,"; createTable += " col_number INTEGER NOT NULL,"; createTable += " row_number INTEGER NOT NULL "; ++it; continue; case TeRASTERTYPE: if(!first) createTable += ", "; else first = false; createTable += "lower_x REAL not null ,"; createTable += "lower_y REAL not null ,"; createTable += "upper_x REAL not null ,"; createTable += "upper_y REAL not null ,"; createTable += "band_id integer unsigned not null, "; createTable += "resolution_factor integer unsigned , "; createTable += "subband integer unsigned,"; createTable += "spatial_data BLOB NOT NULL, "; createTable += "block_size integer unsigned not null "; ++it; continue; case TeNODETYPE: case TeNODESETTYPE: if(!first) createTable += ", "; else first = false; createTable += " x REAL DEFAULT 0.0,"; createTable += " y REAL DEFAULT 0.0 "; ++it; continue; case TeTEXTTYPE: case TeTEXTSETTYPE: default: type += "TEXT"; break; } if(!((*it).rep_.defaultValue_.empty())) type += " DEFAULT '" + (*it).rep_.defaultValue_ + "' "; if(!((*it).rep_.null_)) type += " NOT NULL "; if(!first) createTable += ", "; else first = false; createTable += (*it).rep_.name_ + " "; createTable += type; // check if column is part of primary key if((*it).rep_.isPrimaryKey_ && (*it).rep_.type_ != TeBLOB ) { if(!pkeys.empty()) pkeys += ", "; pkeys += (*it).rep_.name_; } ++it; } if(!pkeys.empty()) { string pk = ", PRIMARY KEY("; pk += pkeys; pk += ")"; createTable += pk; } createTable += ");"; return execute(createTable); }