bool TeExportLayerToShapefile(TeLayer* layer, const string& baseName) { if (!layer) return false; string fbase = baseName; if (baseName.empty()) fbase = layer->name(); TeTheme* tempTheme = new TeTheme(); tempTheme->layer(layer); tempTheme->collectionTable(""); tempTheme->collectionAuxTable(""); tempTheme->setAttTables(layer->attrTables()); TeQuerierParams qPar(true, true); qPar.setParams(tempTheme); TeQuerier* tQuerier = new TeQuerier(qPar); bool res = TeExportQuerierToShapefile(tQuerier, baseName); delete tQuerier; delete tempTheme; return res ; }
void VoronoiWindow::themeComboBox_activated(const QString& themeName) { TeTheme* theme = getTheme(themeName.latin1()); if(theme == 0) return; // Updates the combo box with delimiters... TeLayer* layer = theme->layer(); boxComboBox->setCurrentText(layer->name().c_str()); // Lists attributes on the weightComboBox weightComboBox->clear(); //if (text=="") text=themeComboBox->currentText().latin1(); TeTable *attrTable = &layer->attrTables()[0]; TeAttributeList * attrList=&attrTable->attributeList(); for (std::vector<TeAttribute>::iterator i=attrList->begin(); i!=attrList->end();++i) { cout<<i->rep_.name_<<endl; weightComboBox->insertItem(i->rep_.name_); } }
bool TeExportShapefile(TeLayer* layer, const string& shpFileName, const string& tableName, const string& restriction) { if (!layer || shpFileName.empty()) return false; // check if asked table exist TeAttrTableVector& vTables = layer->attrTables(); TeAttrTableVector::iterator it = vTables.begin(); while (it != vTables.end()) { if (it->name() == tableName) break; ++it; } if (it == vTables.end()) return false; TeAttrTableVector askedTable; askedTable.push_back(*it); TeTheme* tempTheme = new TeTheme(); tempTheme->attributeRest(restriction); tempTheme->layer(layer); tempTheme->collectionTable(""); tempTheme->collectionAuxTable(""); tempTheme->setAttTables(askedTable); TeQuerierParams qPar(true, true); qPar.setParams(tempTheme); TeQuerier* tQuerier = new TeQuerier(qPar); bool res = TeExportQuerierToShapefile(tQuerier, shpFileName); delete tQuerier; delete tempTheme; return res ; }
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++; }