To combine multiple single-band rasters into a single multi-band raster, use the RasterBandCombiner transformer.
For example, combine the DTM and DSM height rasters into a single 2-band raster. Or combine the pluvial, fluvial and combined depth rasters into a single 3-band raster.
See also https://blog.safe.com/2018/08/bring-2d-data-cesiumjs/
Arnold's FME Snippets, Tips & Tricks
Friday, 21 December 2018
Friday, 8 June 2018
Overlapping raster with vector data
When overlaying rasters with lines or polygons, don't convert the raster to vector format, but instead convert the line or polygon dataset to raster.
First use a 3DForcer transformer and set the 'elevation' of your lines or polygons to 1. Then use the NumericRasterizer transformer, setting 0 as the Background Value. This will create a binary raster where the lines or polygons have a raster value of 1, and everything else 0.
Then point this rasterized vector dataset and the original raster both to the RasterExpressionEvaluator transformer, and do Preserve; A[0]*[B0]. This will effectively give an intersection raster.
First use a 3DForcer transformer and set the 'elevation' of your lines or polygons to 1. Then use the NumericRasterizer transformer, setting 0 as the Background Value. This will create a binary raster where the lines or polygons have a raster value of 1, and everything else 0.
Then point this rasterized vector dataset and the original raster both to the RasterExpressionEvaluator transformer, and do Preserve; A[0]*[B0]. This will effectively give an intersection raster.
Friday, 11 May 2018
Remove duplicates
To remove duplicate records, use the DuplicateFilter transformer.
To remove duplicate geometries, use the Matcher transformer, and take the output from the SingleMatched and NotMatched ports:
To remove duplicate geometries, use the Matcher transformer, and take the output from the SingleMatched and NotMatched ports:
Wednesday, 4 April 2018
ArcPy in FME
To enable ArcPy in FME:
- Make sure you have ArcGIS Desktop Background Geoprocessing (64-bit) and the 64-bit version of FME installed;
- In FME, go to Tools > FME Options... > Translation;
- Set the Preferred Python Interpreter to C:\Windows\System32\Python32.dll.
After that you can just type in import arcpy in your Python code:
See also https://knowledge.safe.com/articles/814/choosing-a-different-python-interpreter-installati.html and https://knowledge.safe.com/articles/29799/importing-arcpy-troubleshooting-ideas.html
(Note: this solution may work for me because I have ArcGIS Pro installed.)
Thursday, 15 March 2018
The Effect of Spatial Transformer Choice on Performance
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.
When there are multiple ways to configure a workspace to reach the same goal, it is often best to choose the transformer most specifically suited to your task. As an example, when comparing address points to building polygons, there are a few ways to approach it.
The first example, using a SpatialFilter to test whether or not points fall inside polygons, produces the correct result. But the SpatialFilter is a fairly complex transformer, able to test for multiple conditions and accept a wide range of geometry types. It isn’t optimized for the specific spatial relationship we are analyzing here.
With a SpatialFilter:
The second example uses a PointOnAreaOverlayer, followed by a Tester. The features output are the same as in the first method, but the transformer is optimized for this specific task. The difference in processing time is substantial - from 54.3 seconds in the first configuration, down to 13.7 seconds in the second one.
With a PointOnAreaOverlayer and a Tester:
If performance is an issue in your workspace, look for alternative methods, guided by geometry.
Source: https://docs.safe.com/fme/html/FME_Desktop_Documentation/FME_Transformers/Transformers/topologybuilder.htm
When there are multiple ways to configure a workspace to reach the same goal, it is often best to choose the transformer most specifically suited to your task. As an example, when comparing address points to building polygons, there are a few ways to approach it.
The first example, using a SpatialFilter to test whether or not points fall inside polygons, produces the correct result. But the SpatialFilter is a fairly complex transformer, able to test for multiple conditions and accept a wide range of geometry types. It isn’t optimized for the specific spatial relationship we are analyzing here.
With a SpatialFilter:
The second example uses a PointOnAreaOverlayer, followed by a Tester. The features output are the same as in the first method, but the transformer is optimized for this specific task. The difference in processing time is substantial - from 54.3 seconds in the first configuration, down to 13.7 seconds in the second one.
With a PointOnAreaOverlayer and a Tester:
If performance is an issue in your workspace, look for alternative methods, guided by geometry.
Source: https://docs.safe.com/fme/html/FME_Desktop_Documentation/FME_Transformers/Transformers/topologybuilder.htm
Tuesday, 6 March 2018
StringSearcher
To split a string into its components using Regular Expressions, you can use the StringSearcher transformer. In the [Contains Regular Expression] field, put parentheses around each group; and in the [Subexpression Matches List Name] field within the [Advanced] group, specify the name of the list that will contain the individual components.
See also https://www.safe.com/webinars/back-fme-school-day-1-data-fme/ at around 1:50:00
Tuesday, 27 February 2018
FME Includer
- Create a User Parameter of type Choice with options Yes/No asking whether to include X:
- Set up a Tester transformer, with the Pass Criteria set to OR. In the first Test Clause, specify all records that are always to go through. In the second Test Clause, specify $(IncludeX) = Yes.
If the user selects [No], i.e. don’t include X, the second test clause is always False, so only the records that comply with the first test clause go through.
If the user selects [Yes], the second test clause is always True, so all records go through, i.e. no filtering takes place.
Subscribe to:
Posts (Atom)
Combine Raster Bands
To combine multiple single-band rasters into a single multi-band raster, use the RasterBandCombiner transformer. For example, combine the ...
-
To find substrings, use the StringSearcher transformer or the @FindString or @FindRegEx built-in functions To replace substrings, use the...
-
To convert a String attribute containing a date or time text to a Date/Time attribute, use the @DateTimeParse built-in function. To autom...
-
To remove duplicate records, use the DuplicateFilter transformer. To remove duplicate geometries, use the Matcher transformer, and take ...