Solved

raster - outofmemory exception

  • 26 January 2016
  • 3 replies
  • 2 views

Badge

Hi,

I get an OutOfMemory exception with raster transformer.

Input file is just 300MG TIFF (uncompressed). Transformer is ReframeReprojector (coordinate system transformation). In TaskManager I can observe that FME gobbles up memory quickly and runs out of memory after less than a minute. What can I do? (I'm not overly familiar with FME).

W2008R2, 6GB, FME 2014 SP4, W64

Thank you, Rob

icon

Best answer by david_r 26 January 2016, 16:50

View original

3 replies

Badge +22

Do you need to use the ReframeReprojector? If it's only a planimetric conversion (not changing the altimetric reference frame) you should be able to use the Reprojector.

Userlevel 4

Hi

This is a known issue with the ReframeReprojector. Internally it does an affine transformation on all the pixels, skewing and interpolating along the way, which is very memory intensive.

You might want to ask yourself if subpixel accuracy makes sense in your context. If it is important to you, consider using the Tiler to split the raster into smaller units before sending them off to the ReframeReprojector. But the tiles might not line up perfectly after and the edges might not be completely straight (empty pixels will be set to NODATA).

For most rasters, it will suffice to use the CsMapReprojector, which is slightly less precise but a lot faster, as it uses a simpler grid transformation.

Another option is to find the center point of each raster using the CenterPointReplacer, reproject the point using the ReframeReprojector, calculate the offset and then apply the offset on the whole raster using the Offsetter. This has the bonus of being fairly accurate, very fast and will preserve perfectly straight edges in the resulting raster. My colleague has written a fews words on this here (in french), look under "Transformation par bloc".

David

Badge

Hi

This is a known issue with the ReframeReprojector. Internally it does an affine transformation on all the pixels, skewing and interpolating along the way, which is very memory intensive.

You might want to ask yourself if subpixel accuracy makes sense in your context. If it is important to you, consider using the Tiler to split the raster into smaller units before sending them off to the ReframeReprojector. But the tiles might not line up perfectly after and the edges might not be completely straight (empty pixels will be set to NODATA).

For most rasters, it will suffice to use the CsMapReprojector, which is slightly less precise but a lot faster, as it uses a simpler grid transformation.

Another option is to find the center point of each raster using the CenterPointReplacer, reproject the point using the ReframeReprojector, calculate the offset and then apply the offset on the whole raster using the Offsetter. This has the bonus of being fairly accurate, very fast and will preserve perfectly straight edges in the resulting raster. My colleague has written a fews words on this here (in french), look under "Transformation par bloc".

David

Hi David,

many thanks for your reply. At the moment I just looking at different options and do some preliminary tests. We haven't yet decided how to transform our raster data sets. Your reply has already helped me a lot,

Regards, Robert

Reply