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 !.
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

Suite à un problème technique intervenu entre le 22 et le 23 mars, nous avons du procéder dans la soirée du 25 mars, à la restauration de la base de données du 24 mars (matinée).

En clair, nous avons perdu vos contributions et inscriptions du dimanche 24 et du lundi 25 mars.
Nous vous prions de nous excuser.

#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 big_smile

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

 

Pied de page des forums

Powered by FluxBB