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