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 />

pour une position donnée, vous devez déterminer les 10 points les plus proches dans une couche de points, dans<br />

l’objectif d’utiliser ces points pour calculer une valeur interpolée. Sans index spatial, la seule méthode pour <strong>QGIS</strong><br />

de trouver ces 10 points est de calculer la distance entre tous les points de la couche et l’endroit indiqué et<br />

de comparer ces distances entre-elles. Cela peut prendre beaucoup de temps spécialement si vous devez répeter<br />

l’opération sur plusieurs emplacements. Si index spatial existe pour la couche, l’opération est bien plus efficace.<br />

Vous pouvez vous représenter une couche sans index spatial comme un annuaire dans lequel les numéros de<br />

téléphone ne sont pas ordonnés ou indexés. Le seul moyen de trouver le numéro de téléphone d’une personne est<br />

de lire l’annuaire en commençant du début jusqu’à ce que vous le trouviez.<br />

Les index spatiaux ne sont pas créés par défaut pour une couche vecteur mais vous pouvez le faire facilement de<br />

cette manière :<br />

1. créez l’index spatial — le code qui suit créé un index vide<br />

index = QgsSpatialIndex()<br />

2. ajouter les entités à l’index – l’index utilise des objets QgsFeature et les ajoute dans sa structure de<br />

données interne. Vous pouvez créer les objets manuellement ou utiliser ceux qui sont issus de la méthode<br />

nextFeature() du fournisseur de données :<br />

index.insertFeature(feat)<br />

3. Une fois que l’index est rempli avec des valeurs, vous pouvez lancer vos requêtes :<br />

# returns array of feature IDs of five nearest features<br />

nearest = index.nearestNeighbor(QgsPoint(25.4, 12.7), 5)<br />

# returns array of IDs of features which intersect the rectangle<br />

intersect = index.intersects(QgsRectangle(22.5, 15.3, 23.1, 17.2))<br />

4.5 Ecrire dans des couches vecteur<br />

Vous pouvez générer des fichiers de couche vecteur en utilisant la classe QgsVectorFileWriter. Elle gère<br />

tous les formats vecteurs gérés par <strong>QGIS</strong> (fichier Shape, GeoJSON, KML, etc.).<br />

Il y a deux façons d’exporter une couche vectorielle :<br />

– A partir d’une instance de la classe QgsVectorLayer<br />

error = QgsVectorFileWriter.writeAsVectorFormat(layer, "my_shapes.shp", "CP1250", None, "ESRI Sh<br />

if error == QgsVectorFileWriter.NoError:<br />

print "success!"<br />

error = QgsVectorFileWriter.writeAsVectorFormat(layer, "my_json.json", "utf-8", None, "GeoJSON")<br />

if error == QgsVectorFileWriter.NoError:<br />

print "success again!"<br />

Le troisième paramètre indique l’encodage du texte en sortie. Seuls certains pilotes ont besoin de ce<br />

paramètre pour fonctionner correctement, les fichiers Shape sont dans ce cas. Néanmoins, vous ne devriez<br />

pas rencontrer de problèmes tant que vous n’utilisez pas un jeu de caractères international. Le quatrième<br />

paramètre que nous avons laissé à None peut indiquer un SCR de destination, si une instance valide de<br />

QgsCoordinateReferenceSystem est utilisée, la couche est transformée dans ce SCR.<br />

Consultez les formats gérés par OGR pour trouver les noms de pilote valides. Vous ne devez indiquer cette valeur<br />

dans la colonne “Code”. Vous pouvez indiquer optionnellement d’exporter uniquement les entités sélectionnées<br />

ou utiliser des options de création spécifiques à chaque pilote ou encore indiquer au pilote de ne pas créer<br />

d’attributs. Consultez la documentation pour la syntaxe complète.<br />

– Directement depuis les entités<br />

4.5. Ecrire dans des couches vecteur 17

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

Saved successfully!

Ooh no, something went wrong!