Skip to main content

Dear all,

 

I’m fairly new to FME but currently I’m quite impressed by the software 🙂.

 

My question is rather simple: is there an equivalent in FME of the Tabulate Areas function of ArcGIS Pro: Tabulate Area (Spatial Analyst)—ArcGIS Pro | Documentation

I have two datasets:

  • The cadastral parcels of Wallonia in polygon format ;
  • A land cover classification (TIFF raster) with 20+ classes.

I would like to calculate for each polygonal entity the proportion of land cover classes.

The result should look like this:

ID | LC1 | LC2 | LC3 | … | LC20

1 | 10% | 0 | 0 |25 | … | 0

2 | …

3 | …

 

Many thanks in advance for your feedback :)



This is very much pseudo code but should hopefully lead you in the right direction. One thing about FME is that there are a lot of ways to achieve the same outcome, so others will likely have a different approach to this.

  • Use an AreaCalculator to find the area of the parcels
  • Using a Clipper pass the parcel data in as the ‘Clipper’ and the Landcover data as the candidate. Make sure you check on Merge Attributes in the transformer. This will pass the parcel attributes to the landcover data where a clip takes place
  • Out of the Inside port of the Clipper you will now have your land cover data clipper to parcels. You will also have the area of the parcel on that feature. Calculate the area of the clipped landcover (making sure to not overwrite the parcel area) you can then use this to create a percentage (use the AttributeCreator)
  • Now you have clipped land cover parcels with the percentage of coverage. To make sure we don’t have two areas of the same cover, pass these features through an Aggregator. Turn on group processing and select the attribute that contains the parcel name and the landcover type. In the attributes to sum field add your percentage field. Make sure Accumulation Mode is set to ‘Merge Incoming Attributes’
  • This next step is sub-optimal but will be clearer for someone beginning to learn FME (you could do this step with an AttributeCreator and a dynamic schema) Using a test filter, create the conditions so that all your land cover class are filtered out to their own port. Then connect each port to a seperate AttributeCreator and create a new attribute similar to you table above.
  • Now connect all these back to another Aggregator, again making sure Accumulation Mode is ‘Merge Incoming Attributes’. This time for the group by set just the parcel name/id. Don’t need to sum any attributes.
  • You should now have one feature per parcel again with a percentage for each landcover. Its likely you will have null or missing values for some landcovers, so use the NullAttributeMapper to map these to 0.
  • You will also likely have a lot of extra attributes. So at any point in the process, don’t be affraid to add in AttributeRemovers or AttributeKeepers to streamline things.
  • The final output likely doesn’t have the complete parcel geometry on it. If you don’t need the geometry, you can remove it with the GeometryRemover. If you do want the geometry, do the same step, but afterwards pass the original parcel features into the Requestor port of a FeatureMerger and the parcel/landcover data into the Supplier port. For the Join, use the parcel name/id

Reply