void QgsOverlayAnalyzer::combineFieldLists( QgsFieldMap& fieldListA, QgsFieldMap fieldListB ) { QList<QString> names; QMap<int, QgsField>::const_iterator j = fieldListA.constBegin(); while ( j != fieldListA.constEnd() ) { names.append( j.value().name() ); ++j; } QMap<int, QgsField>::const_iterator i = fieldListB.constBegin(); int count = 0; int fcount = fieldListA.size(); QgsField field; while ( i != fieldListB.constEnd() ) { field = i.value(); while ( names.contains( field.name() ) ) { QString name = field.name(); name.append( "_" ).append( QString( count ) ); field = QgsField( name, field.type() ); ++count; } fieldListA.insert( fcount, field ); count = 0; ++fcount; ++i; } }
void MainWindow::addLayer() { QString myLayerPath = "../data"; QString myLayerBaseName = "test"; QString myProviderName = "ogr"; QgsVectorLayer * mypLayer = new QgsVectorLayer(myLayerPath, myLayerBaseName, myProviderName); if (mypLayer->isValid()) { qDebug("Layer is valid"); } else { qDebug("Layer is NOT valid"); return; } //set up a renderer for the layer QgsSingleSymbolRenderer *mypRenderer = new QgsSingleSymbolRenderer(mypLayer->geometryType()); QList<QgsMapCanvasLayer> myLayerSet; mypLayer->setRenderer(mypRenderer); // //set up labelling for the layer // //get the label instance associated with the layer QgsLabel * mypLabel; mypLabel = mypLayer->label(); //and the label attributes associated with the label QgsLabelAttributes * mypLabelAttributes; mypLabelAttributes = mypLabel->layerAttributes(); //note in QGIS 1.4 and up you should use mypLabel->labelAttributes rather //get the field list associated with the layer //we'll print the names out to console for diagnostic purposes QgsFieldMap myFields = mypLayer->dataProvider()->fields(); for (unsigned int i = 0; i < myFields.size(); i++ ) { qDebug("Field Name: " + QString(myFields[i].name()).toLocal8Bit() ); } //just use the last field's name in the fields list as the label field! qDebug("set label field to " + QString(myFields[myFields.size()-1].name()).toLocal8Bit()); mypLabel->setLabelField( QgsLabel::Text, myFields.size()-1); //set the colour of the label text mypLabelAttributes->setColor(Qt::black); //create a 'halo' effect around each label so it //can still be read on dark backgrounds mypLabelAttributes->setBufferEnabled(true); mypLabelAttributes->setBufferColor(Qt::yellow); int myType = QgsLabelAttributes::PointUnits; mypLabelAttributes->setBufferSize(1,myType); /* * Here are a bunch of other things you can set based on values on a database field * the second parameter in each case would be the field name from which the * attribute can be retrieved. mypLabel->setLabelField( QgsLabel::Family, "fontFamily" ); mypLabel->setLabelField( QgsLabel::Bold, "fontIsBold" ); mypLabel->setLabelField( QgsLabel::Italic, "fontIsItalic" ); mypLabel->setLabelField( QgsLabel::Underline, "fontIsUnderlined" ); mypLabel->setLabelField( QgsLabel::Size, "fontSize" ); mypLabel->setLabelField( QgsLabel::BufferSize,"fontBufferSize" ); mypLabel->setLabelField( QgsLabel::XCoordinate, "labelX" ); mypLabel->setLabelField( QgsLabel::YCoordinate, "labelY"); mypLabel->setLabelField( QgsLabel::XOffset, "labelXOffset"); mypLabel->setLabelField( QgsLabel::YOffset, "labelYOffset"); mypLabel->setLabelField( QgsLabel::Alignment, "labelAlignment" ); mypLabel->setLabelField( QgsLabel::Angle, "labelAngle"); */ //lastly we enable labelling! mypLayer->enableLabels(true); // Add the Vector Layer to the Layer Registry QgsMapLayerRegistry::instance()->addMapLayer(mypLayer, TRUE); // Add the Layer to the Layer Set myLayerSet.append(QgsMapCanvasLayer( mypLayer ) ); // set teh canvas to the extent of our layer mpMapCanvas->setExtent(mypLayer->extent()); // Set the Map Canvas Layer Set mpMapCanvas->setLayerSet(myLayerSet); }