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