Correction - Exercice 2 : Manipulation des attributs d'une couche ================================================================= L'exercice peut être réalisé de plusieurs manières. On se concentre, dans les 4 blocs de code qui suivent, sur la manière de filtrer les entités. Le code complet est fourni en bas de la page. En effet il est soit possible d'itérer sur l'ensemble des entités de la couche et de vérifier que le champ ``type`` de chaque entité est bien, soit ``major``, soit ``major and military`` : .. code-block:: python :emphasize-lines: 2 for ft in layer.getFeatures(): if ft['type'] in ('major', 'major and military'): geom_point = ft.geometry().asPoint() csv_writer.writerow( [ft['name'], ft['iata_code'], geom_point.x(), geom_point.y()]) .. code-block:: python :emphasize-lines: 2 for ft in layer.getFeatures(): if ft['type'] == 'major' or ft['type'] == 'major and military': geom_point = ft.geometry().asPoint() csv_writer.writerow( [ft['name'], ft['iata_code'], geom_point.x(), geom_point.y()]) Au regard des valeurs prises par le champ ``type`` il est également possible de vérifier que la chaine de caractère du champ ``type`` commence bien par ``major`` en utilisant la méthode ``startswith`` : .. code-block:: python :emphasize-lines: 2 for ft in layer.getFeatures(): if ft['type'].startswith('major'): geom_point = ft.geometry().asPoint() csv_writer.writerow( [ft['name'], ft['iata_code'], geom_point.x(), geom_point.y()]) Enfin, il est également possible d'utiliser une *expression* QGIS. Depuis QGIS 3 il est désormais possible de passer directement la chaine de caractère qui correspond à l'expression souhaitée en argument de la méthode ``getFeatures`` : .. code-block:: python :emphasize-lines: 1 for ft in layer.getFeatures("\"type\" LIKE 'major%'"): geom_point = ft.geometry().asPoint() csv_writer.writerow( [ft['name'], ft['iata_code'], geom_point.x(), geom_point.y()]) .. raw:: html