Pages: 1
- Sujet précédent - Transformer une chaine (point origine + différentiel) en coordonnées - Sujet suivant
#1 Fri 12 May 2017 15:41
- Nicolas Lieutenant
- Juste Inscrit !
- Date d'inscription: 4 Apr 2011
- Messages: 9
Transformer une chaine (point origine + différentiel) en coordonnées
Bonjour,
Débutant sur FME je me lance dans quelques exercices d'apprentissage.
Je dispose d'une colonne X formatée de la sorte "5183292,56,53", où la première valeur est une coordonnée, et les suivantes sont le différentiel par rapport au précédent point.
L'idée est donc de transformer cette chaine en 3 entités :
X1 = 5183292
X2 = 5183292 + 56 soit 5183348
X3 = 5183348 + 53 soit 5183401
Comment vous y prendriez-vous, sachant que la colonne X peut contenir de 2 à n valeurs.
Merci d'avance.
Hors ligne
#2 Fri 12 May 2017 15:57
- LASGOUZES
- Participant assidu
- Date d'inscription: 6 Mar 2006
- Messages: 169
Re: Transformer une chaine (point origine + différentiel) en coordonnées
Je pense:
- à la mise en place d'un attributeSplitter en utilisant "," comme séparateur afin de constituer une liste
- puis un ListSummer sur la liste et le champ correspondant.
Cdt.
Hors ligne
#3 Fri 12 May 2017 16:09
- Nicolas Lieutenant
- Juste Inscrit !
- Date d'inscription: 4 Apr 2011
- Messages: 9
Re: Transformer une chaine (point origine + différentiel) en coordonnées
J'ai effectivement utilisé un attributeSplitter sur "," pour obtenir une liste, et c'est cette liste que je souhaite transformer en autant de lignes (est-ce possible ?). Si j'utilise un ListSummer, j'obtiens un nouvel attribut qui contient la somme, soit 5183401, mais ce n'est pas une nouvelle entité en tant que tel, plutôt une nouvelle colonne dans l'entité traitée.
Edit : par contre avec ListExploder j'obtiens bien mes 3 lignes. Reste à sommer l'attribut avec celui de l'element_index précédent, c'est possible ça ?
Dernière modification par Nicolas Lieutenant (Fri 12 May 2017 16:27)
Hors ligne
#4 Fri 12 May 2017 17:14
- pierreb
- Participant actif
- Lieu: La Rochelle
- Date d'inscription: 3 Oct 2011
- Messages: 73
Re: Transformer une chaine (point origine + différentiel) en coordonnées
Cela devrait être jouable avec l'attributeCreator, dans les options avancé : on peut récupérer la valeur d'un attribut sur l'entité précédente / suivante.
Par contre, il faudra veiller à ce que les additions se fassent uniquement par ligne et pas sur l'ensemble du fichier (on ajoute un attribut 0 ou 1 si l'index est supérieur à 0 et on s'en sert dans l'attributecreator, au lieu de mettre en dur 1 entité avant).
Un exemple sur le blog de safe : https://blog.safe.com/2017/05/attribute … ngth-pipe/
Hors ligne
#5 Fri 12 May 2017 17:47
- Nicolas Lieutenant
- Juste Inscrit !
- Date d'inscription: 4 Apr 2011
- Messages: 9
Re: Transformer une chaine (point origine + différentiel) en coordonnées
Bien vu ! Avec l'exemple j'arrive à sommer ce nouvel attribut avec la valeur du précédent, pour les entités dont l'index est supérieur à 0.
Par contre effectivement là ça fonctionne en mettant un "number of Prior Features" à 1 ou n, mais est-il possible que cette valeur soit dynamique ?
Hors ligne
#6 Sun 14 May 2017 17:10
- pierreb
- Participant actif
- Lieu: La Rochelle
- Date d'inscription: 3 Oct 2011
- Messages: 73
Re: Transformer une chaine (point origine + différentiel) en coordonnées
Dans les paramètres de l'attributeCreator, tu peux faire référence à un attribut au lieu de mettre un chiffre. Du coup, avant l'attributeCreator, tu fais un test pour savoir si l'index de la ligne est supérieur à 0. Si oui, tu crées un attribut (par exemple REF) à 1, sinon tu mets REF à 0. Et tu utilises ensuite cet attribut dans l'attributeCreator. Comme ça, les lignes à 1 feront références à l'entité précédente (tu auras bien tes coordonnées "augmentée") et quand l'attribut sera à 0, il ne fera rien (départ d'une nouvelle ligne).
Pas sûr d'être très clair
Hors ligne
#7 Thu 18 May 2017 16:22
- Nicolas Lieutenant
- Juste Inscrit !
- Date d'inscription: 4 Apr 2011
- Messages: 9
Re: Transformer une chaine (point origine + différentiel) en coordonnées
Oui j'ai compris l'idée, mais je n'arrive pas à la mettre en pratique.
Je suis sur la demo de Workbench 2017, les options peuvent-elles avoir changé ?
On parle bien du paramètre Number of Prior Features pour l'AttributeCreator ?
L'étape d'avant j'ai un ListExploder qui me retourne déjà un index, 0 pour la REF et > 0 pour les suivantes.
J'ai donc fait créé un nouvel attribut prevLat =
If @Value(index)>0
@Value(lat_list)+@Value(feature[-1].lat_list)
Else
lat_list
Ce qui me donne :
id lat index lat_list prevLat
17340118 5183292,56,53 0 5183292 5183292
17340118 5183292,56,53 1 56 5183348
17340118 5183292,56,53 2 53 109
Mais du coup on voit bien que le 1er (REF) reste à sa valeur par défaut, le 2° cumule bien le 2+1, mais le 3 cumule 3+2 alors qu'il faudrait en fait avoir 3 + (2+1)
Dernière modification par Nicolas Lieutenant (Thu 18 May 2017 17:41)
Hors ligne
#8 Fri 19 May 2017 14:59
- Nicolas Lieutenant
- Juste Inscrit !
- Date d'inscription: 4 Apr 2011
- Messages: 9
Re: Transformer une chaine (point origine + différentiel) en coordonnées
Mission réussi en passant par un StaticticsCalculator après le ListExploder.
Hors ligne
Pages: 1
- Sujet précédent - Transformer une chaine (point origine + différentiel) en coordonnées - Sujet suivant