Skip to main content

What is the equivalent FME Transformer(s) of this ArcGIS Pro Geoprocessing Tool:

Join Features (GeoAnalytics)—ArcGIS Pro | Documentation

 

Including JoinFeatures by geometry (intersect).

You have several options. Not an all-inclusive list but, you have transformers such as SpatialRelator and Aggregator that can 'join' based on geometry. Then you have transformers such as FeatureMerger and DatabaseJoiner that geared more toward an attribute relationship. I would suggest visiting the Transformer Gallery in Workbench and looking under Filters and Joins.image


I tried Spatial Relator and it does not seem to work using different geometries (I have points and lines). I am looking to merge based on spatial relationship...merge the points attributes to the lines attributes for all points that intersect a line and output a line feature class that contains the point attributes. I tried using Spatial Relator and it outputs null values in the fields from points. Seems in FME, according to their chart "Determine the Right Spatial Join Transformer" that PointOnLineOverlayer is the only one that can use different geometries for the Readers, but since my lines are already split at each point this Transformer does not seem to work. I can do this easily in ArcGIS Pro with the Join Features tool as I mentioned above, still "scratching my head" as to why this same operation cannot be done in FME. Of course, I am still relatively new to FME. Seems like I need to try several Transformers together, not just one. Can you give me some ideas as to what Transformers I could "string together"? At this point any idea is a good one as I have run out of ideas.


I tried Spatial Relator and it does not seem to work using different geometries (I have points and lines). I am looking to merge based on spatial relationship...merge the points attributes to the lines attributes for all points that intersect a line and output a line feature class that contains the point attributes. I tried using Spatial Relator and it outputs null values in the fields from points. Seems in FME, according to their chart "Determine the Right Spatial Join Transformer" that PointOnLineOverlayer is the only one that can use different geometries for the Readers, but since my lines are already split at each point this Transformer does not seem to work. I can do this easily in ArcGIS Pro with the Join Features tool as I mentioned above, still "scratching my head" as to why this same operation cannot be done in FME. Of course, I am still relatively new to FME. Seems like I need to try several Transformers together, not just one. Can you give me some ideas as to what Transformers I could "string together"? At this point any idea is a good one as I have run out of ideas.

Hi @timh​ From reading the documentation about the Join Features (GeoAnalytics) Tool from Esri, I think the SpatialRelator should do the job. Their documentation summarizes the tool as the following:

"Joins attributes from one layer to another based on spatial, temporal, or attribute relationships, or a combination of those relationships."

 

In the SpatialRelator, you can do the same by making sure you enable the Merge Attributes parameter. This will merge attributes from the Supplier onto the Requestor. The SpatialRelator should also be able to handle different geometry types. If you're still having issues then you may need to make sure you've defined your coordinate system for your data first and that it's in the same coordinate system.

 

We have some additional information on performing spatial joins here: https://community.safe.com/s/article/performing-spatial-joins-and-merges

 

Hope this helps!


I agree that SpatialRelator is the best option. In the below screenshot, ST_NAMES_MASTER is the street centerlines, STCL_NODES...are intersection points. Each of these points intersects from 2 to 5 street centerlines. I have a field named CROSS_ST_NAMES in STCL_NODES that I want to join to ST_NAMES_MASTER based on the street centerlines it intersects with, but the field CROSS_ST_NAMES in the Writer is empty, even with the Merge Attributes parameter enabled. I have added CROSS_ST_NAMES as a user defined field in the Writer.

 

Your assistance is much appreciated.

 

Capture 


I agree that SpatialRelator is the best option. In the below screenshot, ST_NAMES_MASTER is the street centerlines, STCL_NODES...are intersection points. Each of these points intersects from 2 to 5 street centerlines. I have a field named CROSS_ST_NAMES in STCL_NODES that I want to join to ST_NAMES_MASTER based on the street centerlines it intersects with, but the field CROSS_ST_NAMES in the Writer is empty, even with the Merge Attributes parameter enabled. I have added CROSS_ST_NAMES as a user defined field in the Writer.

 

Your assistance is much appreciated.

 

Capture 

@timh​ Your workspace and its parameters look okay from a first look. I have a few follow up questions to better understand the issue:

  • If you run the workspace with Feature Caching on and inspect the Output port from the SpatialRelator, can you see that the attributes have been successfully joined from the Spatial join? Are there any features/rows that have a value other than 0 for the _related_suppliers attribute (this tells us how many spatial intersects the requestor has with the supplier dataset).
  • Do the two datasets have unique attribute names or are they identical? If the attribute names in the two datasets are the same, this could be causing the issue.
  • In the SpatialRelator under Attribute Accumulation, try setting the Conflict Resolution to Use Supplier and then re-run the workspace and see if this resolves the issue.
  • If you're still having issues, are you able to share a copy of your workspace and the source dataset? The easiest way to do this would be to save the workspace as a workspace template with feature caches saved. If you're not comfortable sharing the workspace publicly, you could upload it to our Safe Software Support FTP.

Reply