banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#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

 

Pied de page des forums

Powered by FluxBB