Skip to main content

Anatomy of a Flow

How flows process geometry and data

Holly Conrad Smith avatar
Written by Holly Conrad Smith
Updated over 2 months ago

Flows are a graphical representation the processing of data.

Every flow needs inputs, outputs, and wires connecting them.

Flows are directed acyclic graphs (DAG). A DAG is a graph where nodes are connected by directed (directional) edges that do not form a closed loop. DAGs represent the flow of data through a processing pipeline.

Data Processing

Data in Giraffe Flows always processes from left to right - starting with an input and flowing to an output.

Almost all flows include at least one instructional node, which changes the input geometry in some way before writing the output.

Parts of Every Flow

Every flow has:

  • One read feature

  • At least one write features

  • Wires connecting the read feature to the write features

Most flows have:

  • At least one instructional node

  • Data primitive inputs for the instructional node(s)

Some flows have:

  • Two or more branches, creating multiple data streams from a single input

  • Additional geometric inputs, like get raw features

  • Additional formatted inputs, like get usage

  • Special transform inputs which display as form fields in the properties palette, like input parameter or apartment transform

  • Data Flow nodes, which loop through lists of objects, like map or filter

Input and Output Features

The inputs and outputs have a 1:1 relationship with features in your project.

Read Feature

Read Feature feeds in the data for the original geometry the flow is assigned to.

It has a 1:1 relationship with a single piece of geometry, like this rectangle.

Read Feature can never reference more than one geometry.

The same flow graph can be assigned to multiple geometries, but a single flow graph can never start with more than one geometry.

Write Features

Write Features tells Giraffe where the flow "ends" - the final output of the logic you've created in the flow. The output feature is the transformed geometry result from the instructional node(s) in the flow.

For instance, this rectangle has been offset by 5 meters. It renders on the map because the graph ends with a write features node.

Don't forget to connect your instructional nodes' outputs to a write features node. Your flow results will not render on the map without being connected to a write features node.

Instructional Nodes

Instructional nodes transform geometry and/or data objects in some way.

To make the flow do something interesting, we need to add instructional nodes.

This is where the big data and geometric transformations happen!

Every instructional node will require one or more input values and will output one or more result values.

Instructional nodes do not necessarily have a 1:1 relationship with geometric features or project data. Rather, they are processing data within the flow of information through your graph.

Branches

Flows allow for branching logic. A single input can feed values to multiple outputs. Sometimes, key values can be re-used in multiple branches.

All output connectors can support multiple wires leading to other nodes. This allows you to create branching logic from one input.

Did this answer your question?