void QgsServerProjectParser::addLayerProjectSettings( QDomElement& layerElem, QDomDocument& doc, QgsMapLayer* currentLayer ) const { if ( !currentLayer ) { return; } // Layer tree name QDomElement treeNameElem = doc.createElement( "TreeName" ); QDomText treeNameText = doc.createTextNode( currentLayer->name() ); treeNameElem.appendChild( treeNameText ); layerElem.appendChild( treeNameElem ); if ( currentLayer->type() == QgsMapLayer::VectorLayer ) { QgsVectorLayer* vLayer = static_cast<QgsVectorLayer*>( currentLayer ); const QSet<QString>& excludedAttributes = vLayer->excludeAttributesWMS(); int displayFieldIdx = vLayer->fieldNameIndex( vLayer->displayField() ); QString displayField = displayFieldIdx < 0 ? "maptip" : vLayer->displayField(); //attributes QDomElement attributesElem = doc.createElement( "Attributes" ); const QgsFields& layerFields = vLayer->pendingFields(); for ( int idx = 0; idx < layerFields.count(); ++idx ) { const QgsField& field = layerFields[idx]; if ( excludedAttributes.contains( field.name() ) ) { continue; } // field alias in case of displayField if ( idx == displayFieldIdx ) { displayField = vLayer->attributeDisplayName( idx ); } QDomElement attributeElem = doc.createElement( "Attribute" ); attributeElem.setAttribute( "name", field.name() ); attributeElem.setAttribute( "type", QVariant::typeToName( field.type() ) ); attributeElem.setAttribute( "typeName", field.typeName() ); QString alias = vLayer->attributeAlias( idx ); if ( !alias.isEmpty() ) { attributeElem.setAttribute( "alias", alias ); } //edit type to text attributeElem.setAttribute( "editType", vLayer->editFormConfig()->widgetType( idx ) ); attributeElem.setAttribute( "comment", field.comment() ); attributeElem.setAttribute( "length", field.length() ); attributeElem.setAttribute( "precision", field.precision() ); attributesElem.appendChild( attributeElem ); } //displayfield layerElem.setAttribute( "displayField", displayField ); //geometry type layerElem.setAttribute( "geometryType", QGis::featureType( vLayer->wkbType() ) ); layerElem.appendChild( attributesElem ); } }
QString QgsMapTip::fetchFeature( QgsMapLayer *layer, QgsPoint &mapPosition, QgsMapCanvas *mpMapCanvas ) { QgsVectorLayer *vlayer = qobject_cast<QgsVectorLayer *>( layer ); if ( !vlayer ) return ""; // Get the setting for the search radius from user preferences, if it exists QSettings settings; double identifyValue = settings.value( "/Map/identifyRadius", QGis::DEFAULT_IDENTIFY_RADIUS ).toDouble(); // create the search rectangle double searchRadius = mpMapCanvas->extent().width() * ( identifyValue / 100.0 ); QgsRectangle r; r.setXMinimum( mapPosition.x() - searchRadius ); r.setYMinimum( mapPosition.y() - searchRadius ); r.setXMaximum( mapPosition.x() + searchRadius ); r.setYMaximum( mapPosition.y() + searchRadius ); r = mpMapCanvas->mapSettings().mapToLayerCoordinates( layer, r ); QgsFeature feature; if ( !vlayer->getFeatures( QgsFeatureRequest().setFilterRect( r ).setFlags( QgsFeatureRequest::ExactIntersect ) ).nextFeature( feature ) ) return ""; int idx = vlayer->fieldNameIndex( vlayer->displayField() ); if ( idx < 0 ) return QgsExpression::replaceExpressionText( vlayer->displayField(), &feature, vlayer ); else return feature.attribute( idx ).toString(); }
void QgsServerProjectParser::addLayerProjectSettings( QDomElement& layerElem, QDomDocument& doc, QgsMapLayer* currentLayer ) const { if ( !currentLayer ) { return; } if ( currentLayer->type() == QgsMapLayer::VectorLayer ) { QgsVectorLayer* vLayer = static_cast<QgsVectorLayer*>( currentLayer ); const QSet<QString>& excludedAttributes = vLayer->excludeAttributesWMS(); QString displayField = vLayer->displayField(); //attributes QDomElement attributesElem = doc.createElement( "Attributes" ); const QgsFields& layerFields = vLayer->pendingFields(); for ( int idx = 0; idx < layerFields.count(); ++idx ) { const QgsField& field = layerFields[idx]; if ( excludedAttributes.contains( field.name() ) ) { continue; } // field alias in case of displayField if ( field.name() == displayField ) { displayField = vLayer->attributeDisplayName( idx ); } QDomElement attributeElem = doc.createElement( "Attribute" ); attributeElem.setAttribute( "name", field.name() ); attributeElem.setAttribute( "type", QVariant::typeToName( field.type() ) ); attributeElem.setAttribute( "typeName", field.typeName() ); QString alias = vLayer->attributeAlias( idx ); if ( !alias.isEmpty() ) { attributeElem.setAttribute( "alias", alias ); } //edit type to text attributeElem.setAttribute( "editType", vLayer->editorWidgetV2( idx ) ); attributeElem.setAttribute( "comment", field.comment() ); attributeElem.setAttribute( "length", field.length() ); attributeElem.setAttribute( "precision", field.precision() ); attributesElem.appendChild( attributeElem ); } //displayfield layerElem.setAttribute( "displayField", displayField ); layerElem.appendChild( attributesElem ); } }