NeighborFinder
Recherche la ou les entités candidates les plus proches de chaque entité de base et fusionne leurs attributs avec l'entité de base. Peut également être utilisé en mode Candidats seulement, où chaque entité est considérée comme la Base à son tour et comparée à toutes les autres entités, mais pas à elle-même.
Utilisations typiques
- Identification de(s) entité(s) la(les) plus proche(s)
- Identification des entités sous une distance spécifiée
- Ajout d'un point le plus proche de la candidate (comme ajouter un point sur un rail au plus proche d'une station).
- Trouve l'entité la plus proche dans une certaine direction (en filtrant l'angle de l'entité Candidate résultant)
- Calcul des regroupements ou densité en comptant les voisins sous une certaine distance définie
Comment fonctionne-t-il ?
NeighborFinder prend généralement en compte deux ensembles d'entités - Base et Candidate. Pour chaque entité de base, le Transformer vérifie si les candidats correspondent, en fonction de la proximité et des paramètres sélectionnés. Il peut rechercher l'entité candidate la plus proche, ou un nombre maximum fixe de candidats les plus proches, ou tous les candidats qui se trouvent à une distance donnée de l'entité de base.
Les attributs d'une Candidate correspond sont ajoutés aux entités Base, incluant :
- Attributs de la Candidate correspondante
- Attributs calculés contenant distance, angle et coordonnées des correspondances
- Coordonnées du point interpolé à la Base qui est le plus proche de la Candidate
Les attributs de multiples Candidates correspondantes peuvent être stockés dans un Attribut de liste.
Les ports de sortie incluent les entités MatchedBase (avec correspondance) avec ces nouveaux attributs, les entités Unmatched Base (inchangées) et les entités Unmatched Candidates (inchangées).
NeighborFinder fonctionne uniquement avec des géométries 2D ; si une géométrie d'entrée est en 3D, sa coordonnée z sera ignorée. Le Transformer a un support complet pour les points, les lignes, les arcs, les ellipses, les polygones et les polygones troués, et un support limité pour les autres types de géométrie. Les polygones, ellipses et polygones troués peuvent être traités comme des lignes ou des zones, selon la sélection de l'utilisateur.
Mode Candidates uniquement
NeighborFinder peut être utilisé dans un mode Candidate uniquement, dans lequel seules les entités d'entrée candidates sont considérées. Dans ce mode, chaque entité est considérée comme la Base à son tour, et comparée à tous les autres Candidats (mais pas à elle-même). Le partage des attributs et le comportement de sortie sont les mêmes que ci-dessus.
Le mode Candidats uniquement est activé avec le paramètre Entrée. Lorsque le paramètre Entrée est défini sur Candidats uniquement, le port d'entrée de la base est supprimé.
Exemples
Dans cet exemple, nous avons un ensemble de polygones de parcelles sans attributs utiles, et un jeu de données de points destiné à l'étiquetage, avec des attributs d'adresse. Nous voulons extraire les adresses et les appliquer aux polygones de parcelles.
Bien que PointOnAreaOverlayer effectue une comparaison similaire, il ne trouvera pas de correspondance lorsque le point se trouve juste à l'extérieur du polygone, comme dans l'exemple 1132. Nous utiliserons un NeighborFinder.
Les polygones de parcelles sont dirigés dans le Transformer NeighborFinder en tant qu'entités Base - celles pour qui le Transformer tâchera de trouver des correspondances.
Les points d'adresses sont connectés au port Candidates - ceux qui seront cherchés pour une correspondance et qui ensuite fourniront de nouveaux attributs aux entités Base.
Dans la boîte de dialogue Paramètres, le paramètre Nombre de voisins à rechercher est défini sur 1, car nous voulons que seule la correspondance la plus proche soit utilisée. L'option Traiter les polygones comme est définie sur Polygones.
Notez que les paramètres par défaut pour le Traitement des attributs - Fusionner les attributs candidats - copiera les attributs des Candidates dans l'entité Base (ce qui est ce que nous voulons).
Les polygones de parcelles MatchedBase en sortie ont maintenant des attributs depuis leur plus proche correspondance du port Candidate.
Dans cet exemple, nous avons un jeu de données de lignes de pistes cyclables et nous souhaitons trouver les fontaines à eau dans les 100 mètres autour des pistes.
Les pistes cyclables sont dirigées vers NeighborFinder en tant qu'entités Base - celles pour lesquelles le Transformer tâchera de trouver des correspondances et les sortir.
Les points de fontaine à eau sont connectées en tant que Candidates, celles qui seront cherchées pour correspondances puis qui fourniront les attributs en tant que listes au entités Base.
Dans la boîte de dialogue Paramètres, le champ Nombre de voisins à trouver est vide. Aucune limite n'est donc imposée et toutes les correspondances seront enregistrées. La distance maximale est fixée à 100 (unités terrestres, ici en mètres).
En activant Générer liste et sélectionnant des attributs spécifiques des données de fontaines à eau, un attribut de liste sera ajouté aux pistes cyclables pour stocker plusieurs correspondances.
Un élément est ajouté à l'attribut de liste _candidates pour chaque correspondance, comme le montre ici l'entité sélectionnée. La liste peut être encore manipulée pour travailler avec ces informations - voir Attributs de liste.
Notes
Choisir un Transformer spatial
De nombreux Transformers peuvent évaluer les relations spatiales et effectuer des jointures spatiales - en analysant la topologie, en fusionnant les attributs et parfois en modifiant la géométrie. En général, le choix de celui qui est le plus spécifique à la tâche que vous devez accomplir fournira les résultats de performance optimaux. S'il existe plus d'une façon de procéder (ce qui est souvent le cas), il peut être utile de consacrer du temps à tester les performances des autres méthodes.
Pour analyser correctement les relations spatiales, toutes les entités doivent être dans le même système de coordonnées. Reprojector peut être utile pour reprojeter des entités dans le traitement.
Transformer |
Peut fusionner des attributs |
Altère la géométrie |
Compte le nombre d'entités liées |
Créé des listes |
Types supportés* |
Recommandé pour |
---|---|---|---|---|---|---|
SpatialFilter | Oui | Non | Non | Non |
|
|
SpatialRelator | Oui | Non | Oui | Oui |
|
|
AreaOnAreaOverlayer | Oui | Oui | Oui | Oui |
|
|
LineOnAreaOverlayer | Oui | Oui | Oui | Oui |
|
|
LineOnLineOverlayer | Oui | Oui | Oui | Oui |
|
|
PointOnAreaOverlayer | Oui | Non | Oui | Oui |
|
|
PointOnLineOverlayer | Oui | Oui | Oui | Oui |
|
|
PointOnPointOverlayer | Oui | Non | Oui | Oui |
|
|
Intersector | Oui | Oui | Oui | Oui |
|
|
Clipper | Oui | Oui | Non | Non |
|
|
NeighborFinder | Oui | Dans certains cas | Non | Oui |
|
|
TopologyBuilder | Oui | Oui | Non | Oui |
|
|
* NOTE: Curve includes Lines, Arcs, and Paths. Area includes Polygons, Donuts, and Ellipses.
Spatial analysis can be processing-intensive, particularly when a large number of features are involved. If you would like to tune the performance of your workspace, this is a good place to start.
Quand il y a plusieurs façons de configurer un espace de travail pour atteindre le même but, il est souvent mieux de choisir le Transformer le plus adapté à votre tâche.
Si les performances sont un problème dans votre projet, recherchez des méthodes alternatives, guidées par la géométrie.
Configuration
Ports en entrée
Si une entité est acheminée à la fois dans le port Base et le dans le port Candidate, alors les entités seront comparées à elle-mêmes puisqu'elles proviennent à la fois des ports Base et Candidate.
Si Entrée est réglée sur Uniquement les entités du port Candidate, il n'y aura pas de port Base. Toutes les entités Candidates seront comparés à toutes les autres entités du ports Candidate, mais ne seront pas comparés à eux-mêmes.
Entités qui reçoivent les attributs de Candidates correspondantes, selon les paramètres définis dans le Transformer et qui seront gardés pour sortie.
Les entités qui fourniront des attributs s'ils correspondent aux conditions définies. Les candidats ne sont pas produits.
Si le mode Candidates uniquement (paramètre de l'entrée défini sur Candidates uniquement), les Candidates se comporteront à la fois comme Candidate et Base et recevront aussi les attributs des correspondances et seront sorties.
Ports de sortie
Si une entité Candidat est trouvée, tous les attributs du Candidat le plus proche sont ajoutés à l'entité de Base et l'entité Base entité ressort par le port Matched (entité de base avec voisin).
Si Générer liste est activé, tous les attributs (ou ceux sélectionnés) depuis plusieurs Candidates correspondant pourront être ajoutés à un nouvel attribut de liste.
De plus, plusieurs autres attributs sont ajoutés à l'entité Base juste avant de ressortir via le port MatchedBase :
Attributs | Description |
---|---|
_distance | La distance en unité terrain entre l'entité de base et le candidat le plus proche. |
_angle | L'angle entre les deux plus proches points interpolés de l'entité de base et du candidat retenu. |
_closest_base_x, _closest_base_y | Les coordonnées du point interpolé de l'entité de base le plus proche du candidat retenu. |
_closest_candidate_x, _closest_candidate_y | Les coordonnées du point interpolé de l'entité candidate le plus proche de l'entité de base. |
_candidate_angle | L'angle entre (_closest_candidate_x, _closest_candidate_y) et le sommet suivant de l'entité candidate. Si (_closest_candidate_x, _closest_candidate_y) est égal au dernier sommet de l'entité candidate, alors candidate_angle sera l'angle entre le sommet précédent de l'entité candidate et (_closest_candidate_x, _closest_candidate_y). |
_candidate_label_angle | L'angle _candidat_angle ajusté de sorte que s'il est utilisé comme rotation de texte, le texte se déroulera de gauche à droite. Cet angle est garanti comme étant supérieur ou égal à 270 et inférieur à 360, ou supérieur ou égal à 0 et inférieur ou égal à 90. |
Tous les angles sont mesurés en degrés dans le sens inverse des aiguilles d'une montre par rapport à l'horizontale. Lorsque les angles ne sont pas bien définis (par exemple, lorsqu'un polygone Candidate est contenu dans un polygone Base), ils sont définis sur 0.
Les entités Base qui n'ont pas trouvé de candidats en deçà de la distance maximale ressortent inchangées par le port UNMATCHED_BASE (entité de base sans voisin).
Les entités du port Candidate qui ne se trouvent pas à la Distance maximale d'une entité Base sont transmises par le port UnmatchedCandidate. Les entités Candidate qui dépassent le paramètre Nombre de voisins à trouver sont également envoyées ici (seul le premier nombre x de correspondances est utilisé). Si l'option Générer une liste n'est pas activée, toutes les entités situées dans la Distance maximale, mais pas les plus proches, seront émises par le port UnmatchedCandidate. Ceci est dû au fait qu'elles ne sont pas utilisées de quelque manière que ce soit ; leurs attributs ne sont pas du tout fusionnés à la base.
Les entités non valides sont émises via le port <Rejected>. Les entités Base et les entités Candidate dont la géométrie est nulle sont rejetées. Les entités avec des géométries non valides peuvent également être rejetées.
Les entités rejetées ont un attribut fme_rejection_code avec l'une des valeurs suivantes :
EXTRA_CANDIDATE_FEATURE
INVALID_BASE_GEOMETRY_VERTICES
INVALID_CANDIDATE_GEOMETRY_VERTICES
INVALID_GEOMETRY_VERTICES
Gestion des entités rejetées : ce paramètre permet d'interrompre la traduction ou de la poursuivre lorsqu'elle rencontre une entité rejetée. Ce paramètre est disponible à la fois comme option par défaut de FME et comme paramètre de traitement.
Paramètres
Regrouper par | Le comportement par défaut consiste à utiliser l'ensemble des entités comme groupe. Cette option vous permet de sélectionner les attributs qui définissent les groupes à former. |
Traitement des regroupements |
Lorsque toutes les entités sont reçues : comportement par défaut. Le traitement n'aura lieu qu'une fois que toutes les entités en entrée seront présente. Quand le groupe change (avancé) : ce Transformer traitera les groupes en entrée dans l'ordre. Les changements de la valeur du paramètre Regrouper par sur le flux d'entrée déclencheront le traitement du groupe en cours de regroupement. Cela peut améliorer la vitesse globale (en particulier avec plusieurs groupes de taille égale), mais peut provoquer un comportement indésirable si les groupes en entrée ne sont pas ordonnés. Considérations sur l'utilisation de Regrouper par
Il y a deux raisons typiques d'utiliser Quand le groupe change (avancé). La première concerne les données entrantes qui sont destinées à être traitées en groupes (et qui sont déjà classées ainsi). Dans ce cas, c'est la structure qui dicte l'utilisation de Regrouper par - et non des considérations de performance. La seconde raison possible est le potentiel gain de performances. Les gains de performance sont plus visibles quand les données sont déjà triées (ou lues en utilisant une déclaration SQL ORDER BY) puisque moins de travail est requis de la part de FME. Si les données doivent être ordonnées, elles peuvent être triées dans le traitement (bien que la surcharge de traitement supplémentaire puisse annuler tout gain). Le tri devient plus difficile en fonction du nombre de flux de données. Il peut être quasiment impossible de trier des flux de données multiples dans l'ordre correct, car toutes les entités correspondant à une valeur Regrouper par doivent arriver avant toute entité (de tout type d'entité ou jeu de données) appartenant au groupe suivant. Dans ce cas, l'utilisation de Regrouper par avec Lorsque toutes les entités sont reçues peut être une approche équivalente et plus simple. Note: De multiples types d'entités et entités de multiples jeux de données ne vont généralement pas arriver dans l'ordre correct. Comme pour beaucoup de scénarios, tester différentes approches dans votre projet avec vos données est le seul moyen sûr d'identifier le gain de performance. |
Entrée |
Base et Candidate - Accepte à la fois les entités Base et les entités Candidates (par défaut). Si une entité est acheminée à la fois vers les ports d'entrée de la Base et du Candidat, les entités seront comparées à elles-mêmes car elles sont à la fois Base et Candidat. Candidats uniquement - N'accepte que les entités candidates. Il n'y aura pas de port d'entrée de base. Tous les candidats seront comparés à tous les autres candidats, mais ne seront pas comparés à eux-mêmes. |
Candidats en premier |
Si Oui, toutes les entités Candidates doivent être saisies avant les entités Base. Si une entité Candidate est saisie après une entité de Base et que cette option est réglée sur Oui, l'entité Candidate sera ignorée dans tous les calculs. |
Nombre de voisins à trouver |
Le nombre maximum d'entités candidates qui seront incluses dans la liste spécifiée par le paramètre Génération de liste. Les entités candidates les plus proches seront incluses dans la liste. Si la valeur est 0 ou vierge, il n'y a pas de limite au nombre de voisins qui pourront être inclus dans la liste. |
Distance maximale |
La Distance maximum est mesurée selon les unités des coordonnées de l'entité en entrée. La liste spécifiée dans Génération de liste contient toutes les entités candidates qui se trouvaient à la distance maximale de la base. Les candidats se trouvant exactement à la distance maximale seront inclus dans la liste des candidats les plus proches. Si la valeur est 0 ou vierge, aucune limite ne sera mise sur la distance maximum. |
Insérer les vertex dans les entités Base |
Si Oui, alors (_closest_base_x, _closest_base_y) sera inséré sur l'entité Base si l'insertion est bien définie. Par exemple, si un polygone Candidate est contenu dans un polygone Base, l'insertion n'aura pas lieu. Si Oui, le sommet _closest_base_x, _closest_base_y sera inséré dans l'entité Base et ajouté comme attribut. Cette option ne s'applique qu'aux lignes, polygones, chemins, arcs, ellipses et polygones troués. |
Traiter les mesures comme
|
Ce paramètre détermine comment les mesures sont calculées lorsque de nouvelles mesures sont ajoutées aux entités Base. Continue : La nouvelle valeur de la mesure sera calculée, en interpolant sur la base des mesures les plus proches. Discrète : la nouvelle valeur de mesure sera copiée à partir de la mesure la plus proche. |
Traiter les polygones comme |
Lignes : un polygone, polygone troué, une ellipse sont traités comme des lignes. Polygones : un polygone, un polygone troué ou une ellipse sont traités comme des surfaces, et les géométries qui se superposent à la surface seront à une distance de 0 de cette même surface. |
Remplace les mesures/Z avec Candidates |
Si le candidat est une courbe ou une multicourbe, et que la base est un point, ceci spécifiera si les mesures et les valeurs z doivent être copiées du candidat vers la base. Les valeurs z seront égales aux valeurs z interpolées au point du candidat qui est le plus proche de la base. Les mesures seront interpolées ou utiliseront la valeur de mesure connue la plus proche, en fonction du paramètre Traiter les mesures comme. Si l'entité du port Candidat n'est pas une courbe ou une multicourbe, ou si celle du port Base n'est pas un point, cela n'aura aucun effet. |
Si les attributs des bases et des candidats ont le même nom, mais ne sont pas d'attribut de géométrie commençant par fme_, alors ils seront considérés comme en conflit.
Traitement des attributs | Fusionner les attributs des entités des ports Base et Candidate : L'entité de base conservera tous ses propres attributs non conflictuels, et acquerra en plus tous les attributs non conflictuels que possède l'entité candidate. Ce mode traitera les attributs conflictuels en fonction du paramètre de Résolution des conflit. Préfixer les entités du port Candidate : L'entité Base conservera tous ses propres attributs. De plus, la base acquerra des attributs reflétant les attributs de l'entité candidate, avec le nom préfixé par le paramètre Préfixe. Remplacer par une seule entité du port Candidate : L'entité de base verra tous ses attributs supprimés, à l'exception des attributs géométriques qui commencent par fme_. Ensuite, tous les attributs d'une entité candidate (arbitraire) seront placés sur la base. |
Résolution de conflit | Utiliser les bases : en cas de conflit, les valeurs des entités de base sont conservées. Utiliser les candidats : si un conflit d'attributs apparaît, les valeurs des entités candidates sont transférées aux entité base. |
Préfixe | Pour éviter qu'un attribut Candidate ne soit ignoré parce que l'attribut de Base existe déjà, vous pouvez éventuellement spécifier un préfixe qui sera appliqué à chaque attribut Candidat lorsqu'il sera ajouté à la Base. Ce paramètre n'est activé que lorsque le mode de traitement des attributs est Préfixer les entités du port Candidate. |
Génération de liste
Lorsqu'il est activé, ajoute un attribut de liste aux entités de sortie de MatchedBase. Ce paramètre est utile lorsque le Nombre de voisins à trouver est supérieur à 1.
Nom de liste des Candidates les plus proches |
Entrer un nom de liste. Note: Les attributs de liste ne sont pas accessibles à partir du schéma de sortie dans Workbench, sauf s'ils sont d'abord traités à l'aide d'un Transformer qui opère sur eux, comme ListExploder ou ListConcatenator. Il est également possible d'utiliser AttributeExposer. |
Ajouter à la liste |
Tous les attributs: tous les attributs seront ajoutés aux entités en sortie. Attributs sélectionnés: Active le paramètre Attributs sélectionnés où des attributs spécifiques peuvent être choisis pour inclusion. |
Attributs sélectionnés | Activé lorsque l'option Ajouter à la liste est définie sur Attributs sélectionnés. Indiquez les attributs que vous souhaitez inclure. |
Éditer les paramètres des Transformers
À l'aide d'un ensemble d'options de menu, les paramètres du Transformer peuvent être attribués en faisant référence à d'autres éléments du traitement. Des fonctions plus avancées, telles qu'un éditeur avancé et un éditeur arithmétique, sont également disponibles dans certains Transformers. Pour accéder à un menu de ces options, cliquez sur à côté du paramètre applicable. Pour plus d'informations, voir Options de menus et paramètres de Transformer.
Définir les valeurs
Il existe plusieurs façons de définir une valeur à utiliser dans un Transformer. La plus simple est de simplement taper une valeur ou une chaîne de caractères, qui peut inclure des fonctions de différents types comme des références d'attributs, des fonctions mathématiques et de chaînes de caractères, et des paramètres d'espace de travail. Il existe un certain nombre d'outils et de raccourcis qui peuvent aider à construire des valeurs, généralement disponibles dans le menu contextuel déroulant adjacent au champ de valeur.
Utilisation de l'éditeur de texte
L'éditeur de texte fournit un moyen efficace de construire des chaînes de textes (dont les expressions régulières) à partir de données source diverses, telles que des attributs, des paramètres et des constantes, et le résultat est directement utilisé dans le paramètre.
Utilisation de l'éditeur arithmétique
L'éditeur arithmétique fournit un moyen simple de construire des expressions mathématiques à partir de plusieurs données source, telles que des attributs et des fonctions, et le résultat est directement utilisé dans un paramètre.
Valeur conditionnelle
Définit des valeurs selon un ou plusieurs tests.
Fenêtre de définition de conditions
Contenu
Les expressions et chaînes de caractères peuvent inclure des fonctions, caractères, paramètres et plus.
Lors du paramétrage des valeurs - qu'elles soient entrées directement dans un paramètre ou construites en utilisant l'un des éditeurs - les chaînes de caractères et les expressions contenant des fonctions Chaîne de caractères, Math, Date et heure ou Entité FME auront ces fonctions évaluées. Par conséquent, les noms de ces fonctions (sous la forme @<nom_de_fonction>) ne doivent pas être utilisés comme valeurs littérales de chaîne de caractères.
Ces fonctions manipulent les chaînes de caractères. | |
Caractères spéciaux |
Un ensemble de caractères de contrôle est disponible dans l'éditeur de texte. |
Plusieurs fonctions sont disponibles dans les deux éditeurs. | |
Fonctions Date/heure | Les fonctions de dates et heures sont disponibles dans l'Editeur texte. |
Ces opérateur sont disponibles dans l'éditeur arithmétique. | |
Elles retournent des valeurs spécifiques aux entités. | |
Les paramètres FME et spécifiques au projet peuvent être utilisés. | |
Créer et modifier un paramètre publié | Créer ses propres paramètres éditables. |
Options - Tables
Les Transformers avec des paramètres de style table possèdent des outils additionnels pour remplir et manipuler des valeurs.
Réordonner
|
Activé une fois que vous avez cliqué sur un élément de ligne. Les choix comprennent :
|
Couper, Copier et Coller
|
Activé une fois que vous avez cliqué sur un élément de ligne. Les choix comprennent :
Copier, copier et coller peuvent être utilisés au sein d'un Transformer ou entre Transfromers. |
Filtre
|
Commencez à taper une chaîne de caractères, et la matrice n'affichera que les lignes correspondant à ces caractères. Recherche dans toutes les colonnes. Cela n'affecte que l'affichage des attributs dans le Transformer - cela ne change pas les attributs qui sont sortis. |
Importer
|
Le bouton d'import remplit la table avec un jeu de nouveaux attributs lus depuis un jeu de données. L'application spécifique varie selon les Transformers. |
Réinitialiser/Rafraîchir
|
Réinitialise la table à son état initial, et peut fournir des options additionnelles pour supprimer des entrées invalides. Le comportement varie d'un Transformer à l'autre. |
Note : Tous les outils ne sont pas disponibles dans tous les Transformers.
Références
Comportement |
|
Stockage des entités |
Oui |
Dépendances | |
Alias | NeighbourFinder |
Historique |
FME Community
FME Community iest l'endroit où trouver des démos, des tutoriaux, des articles, des FAQ et bien plus encore. Obtenez des réponses à vos questions, apprenez des autres utilisateurs et suggérez, votez et commentez de nouvelles entités.
Rechercher tous les résultats sur ce Transformer sur FME Community.
Les exemples peuvent contenir des informations sous licence Open Government - Vancouver et/ou Open Government - Canada.