Pages: 1
- Sujet précédent - Concaténation de chaines sur plusieurs lignes et une seule colonne - Sujet suivant
#1 Mon 09 January 2017 16:06
- Lea67
- Juste Inscrit !
- Date d'inscription: 29 Mar 2016
- Messages: 9
Concaténation de chaines sur plusieurs lignes et une seule colonne
Bonjour à tous,
Je souhaite créer un outil sous ArcGIS qui permette de comparer les chemins de mes polylignes à travers un fichier de point.
Pour ce faire, j'effectue une jointure spatiale des points sur les polylignes (ONE TO MANY).
A chaque point, j'ai donc une ou plusieurs copies en fonction du nombre de lignes qui passent par ce point.
Je créée un nouveau champ dans lequel je souhaite ajouter une chaîne de caractère qui se compose des différents ID de points (dans l'ordre croissant ou décroissant) en fonction de l'ID de la polyligne.
Je pourrai ensuite repérer plus facilement les doublons en joignant cette couche (en ONE TO ONE cette fois-ci) à la couche des polylignes.
Exemple :
FID TARGET ID JOIN FID
1 36 22
2 37 22
3 38 22
4 38 23
5 36 23
Il faudrait obtenir pour le nouveau champ :
Pour les FID 1,2 et 3 : 36 - 37 - 38
Et pour les FID 4 et 5 : 36 - 38
Seulement voilà, quelle méthode pour faire ce type de manipulation? Comme récupérer les informations d'autres lignes suivant une même condition? (ici JOIN_FID identique à celui de la ligne concernée).
Merci pour votre aide,
Et bonne année 2017 !
Dernière modification par Lea67 (Mon 09 January 2017 16:17)
Hors ligne
#2 Tue 10 January 2017 14:18
- Nicolas Granier
- Participant assidu
- Date d'inscription: 19 Apr 2007
- Messages: 271
Re: Concaténation de chaines sur plusieurs lignes et une seule colonne
Bonjour,
Code:
import arcpy shp=arcpy.UpdateCursor("le_shp") for ligne in shp : listPT=[] idLigne =ligne.getValue("JOIN_FID") shp2=arcpy.SearchCursor("le_shp","\"JOIN_FID\" = %s" %(idLigne)) for ligneEnCours in shp2 : listPT.append(ligneEnCours.getValue("TARGET_FID")) del shp2 listPT.sort() ligne.setValue("LIST_PT",str(listPT)) shp.updateRow(ligne) del(shp)
Voici un petit code python qui peut être exécuté depuis la console python d'Arcgis.
Il faut au préalable rajouter une colonne "LIST_PT" pour la liste des points de chaque ligne en type chaine en taille maximale. (en shp, vous serez bridé à 250 caractères)
Il vous faudra aussi remplacer le terme "le shp" par le nom de votre shape.
Quand j'aurais plus de temps je rajouterai quelques commentaires sur le code.
Sur le principe j'ai compris votre problématique mais la façon de jouer avec les jointures spatiales dans Arcgis est très dangereuse.
Pour limiter les risques d'erreur lors de la jointure spatiale, il vous faudrait travailler en géodatabase (c'est peu être le cas) et définir une tolérance adaptée à vos travaux.
A+
Nicolas GRANIER
Hors ligne
Pages: 1
- Sujet précédent - Concaténation de chaines sur plusieurs lignes et une seule colonne - Sujet suivant