03.08.2016 Views

QGIS-2.6-PyQGISDeveloperCookbook-fr

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Py<strong>QGIS</strong> developer cookbook, Version <strong>2.6</strong><br />

# define fields for feature attributes. A list of QgsField objects is needed<br />

fields = [QgsField("first", QVariant.Int),<br />

QgsField("second", QVariant.String)]<br />

# create an instance of vector file writer, which will create the vector file.<br />

# Arguments:<br />

# 1. path to new file (will fail if exists already)<br />

# 2. encoding of the attributes<br />

# 3. field map<br />

# 4. geometry type - <strong>fr</strong>om WKBTYPE enum<br />

# 5. layer’s spatial reference (instance of<br />

# QgsCoordinateReferenceSystem) - optional<br />

# 6. driver name for the output file<br />

writer = QgsVectorFileWriter("my_shapes.shp", "CP1250", fields, QGis.WKBPoint, None, "ESRI Shape<br />

if writer.hasError() != QgsVectorFileWriter.NoError:<br />

print "Error when creating shapefile: ", writer.hasError()<br />

# add a feature<br />

fet = QgsFeature()<br />

fet.setGeometry(QgsGeometry.<strong>fr</strong>omPoint(QgsPoint(10,10)))<br />

fet.setAttributes([1, "text"])<br />

writer.addFeature(fet)<br />

# delete the writer to flush features to disk (optional)<br />

del writer<br />

4.6 Fournisseur de données en mémoire<br />

Le fournisseur de données en mémoire est utilisable principalement par des extensions ou des applications tierces.<br />

Il ne stocke pas de données sur disque ce qui permet aux développeurs de l’utiliser comme support rapide pour<br />

des couches temporaires.<br />

Le fournisseur gère les champs en chaînes de caractères, en entiers et en réels.<br />

Le fournisseur de données en mémoire gère également l’indexation spatiale qui est activée en appelant la fonction<br />

createSpatialIndex() du fournisseur. Une fois l’index spatial créé, vous pourrez itérer sur les entités<br />

d’emplacements donnés plus rapidement (car il n’est plus nécessaire de traverser toutes les entités mais uniquement<br />

celles qui se trouvent dans le rectangle).<br />

Un fournisseur de données en mémoire est créé en indiquant ’memory" dans la chaîne de fournisseur du constructeur<br />

d’un objet QgsVectorLayer.<br />

Le constructeur utilise également une URI qui définit le type de géométrie de la couche parmi : "Point",<br />

"LineString", "Polygon", "MultiPoint", "MultiLineString", ou "MultiPolygon".<br />

L’URI peut également indiquer un système de coordonnée de référence, des champs et l’indexation. La syntaxe<br />

est la suivante :<br />

crs=définition Spécifie le système de coordonnée de référence, où définition peut être sous n’importe laquelle<br />

des formes acceptées par QgsCoordinateReferenceSystem.createFromString()<br />

index=yes Spécifie que le fournisseur utilisera un index spatial<br />

field=nom :type(longueur,précision) Spécifie un attribut de la couche. L’attribut dispose d’un nom et optionnellement<br />

d’un type (integer, double ou string), d’une longueur et d’une précision. Il peut y avoir plusieurs<br />

définitions de champs.<br />

L’exemple suivant montre une URI intégrant toutes ces options<br />

"Point?crs=epsg:4326&field=id:integer&field=name:string(20)&index=yes"<br />

L’exemple suivant illustre la création et le remplissage d’un fournisseur de données en mémoire<br />

18 Chapitre 4. Utilisation de couches vectorielles

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!