Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

GeoRezo est partenaire de l'évènement DécryptaGéo 2017, le rendez-vous indépendant des professionnels de l'information géographique.

Rendez-vous les 24 et 25 janvier 2017 à l'ENSG, cité Descartes, Noisy-Champs.

Retrouvez le programme de l'évènement et le formulaire d'inscription sur le site de DécryptaGéo

#1 lun. 09 janvier 2017 16:06

Lea67
Membre
Date d'inscription: 29 mars 2016
Messages: 5

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 (lun. 09 janvier 2017 16:17)

Hors ligne

 

#2 mar. 10 janvier 2017 14:18

Nicolas Granier
Membre
Date d'inscription: 19 avril 2007
Messages: 244

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

Partagez  |