Skip to main content

Hi,

I would simply need to integrate rasterio's python function for raster sieving into FME Workbench's PythonCaller transformer. Indeed there is no native raster sieving function in FME.

As I'm not familiar with Python I quickly read through this article but examples there do not apply to raster specifically.

 

Due to my ignorance of Python scripting I am not sure from a syntax point of view how to make the reference to the raster and its bands (if required).

 

Basically my purpose is to eliminate polygons which have a number of cells equal or less than 4.

 

Which essential code lines would be required around the following?:

import fme
import fmeobjects
import rasterio
 
def rasterioSieving(feature): 
    rasterio.features.sieve(source, 5, out=None, mask=None, connectivity=8)

Actually if you have an example workspace with Python code acting on a raster for any operation, then I would also be interested. As I'm more curious to how the raster is actually being referred to inside the Python script for a very straight-forward operation.

 

Thanks in advance!

Olivier

 

 

Manipulating FME rasters in Python is possible, but fairly complex due to the sheer number of ways to represent multi-band rasters.

You can find some examples on how to manipulate rasters here https://community.safe.com/s/question/0D54Q000080hG7RSAU/python-fme-objects-api-for-raster-manipulation

Make sure to expand all the answers, there should be 3 different complete Python examples from @Takashi Iijima​ of varying complexity.

Unless you're fairly proficient in Python and the FME object models, you may find it easier to save the rasters to disk in FME (e.g FeatureWriter), and then read them back into rasterio using its native methods in e.g. a PythonCaller and do the filtering there, rather than retrieving the raster contents directly through the FME object model.


Manipulating FME rasters in Python is possible, but fairly complex due to the sheer number of ways to represent multi-band rasters.

You can find some examples on how to manipulate rasters here https://community.safe.com/s/question/0D54Q000080hG7RSAU/python-fme-objects-api-for-raster-manipulation

Make sure to expand all the answers, there should be 3 different complete Python examples from @Takashi Iijima​ of varying complexity. 

Unless you're fairly proficient in Python and the FME object models, you may find it easier to save the rasters to disk in FME (e.g FeatureWriter), and then read them back into rasterio using its native methods in e.g. a PythonCaller and do the filtering there, rather than retrieving the raster contents directly through the FME object model.

Futher to this, if you write out the raster right before needing to call python (tiff is a pretty universal format) then make sure on the output feature from the feautrewriter you have an attribute (called source) containing the written out tiff location (eg "C:\temp\temp.tiff").

Then in python you'll have something like

    import fme
    import fmeobjects
    import rasterio
     
    def rasterioSieving(feature): 
        source = feature.getAttribute('source')
        rasterio.features.sieve(source, 5, out=None, mask=None, connectivity=8)

 


Reply