Understanding the patch criteria attribute


Topological adjacencies describe the distance and amount of shared edge between all proximally adjacent blocks in the dataset. Patch accounts can not be calculated unless these relationships are loaded into the model from the topology.csv data files.

Patch accounts are calculated based on the topological connectivity of a block to its neighbours, as well as the characteristics of the blocks in terms of a specified attribute. This patch attribute gives the Patchworks model the ability to check each block to see if it is greater than the threshold value of the attribute (typically non-zero). If it does the model begins to evaluate all the neighbours of that block against the same patch attribute. If any of those blocks are found to have a higher than threshold value for the patch attribute, their neighbours are also checked and so on until all connected neighbours are found.

The value of the patch attribute is arbitrary and user defined. It is usually related to the structural development of a forest stand and is independent for each polygon. This attribute is dynamic and can change over time due to management interventions or the process of growth and succession.

In this example, we will be using a patch attribute to track disturbances (feature.visual.disturbed) in blocks based on stand age. If the stand is greater than thirty years of age it no longer appears disturbed (the disturbance attribute will equal 0), however if the block is less than thirty years of age it will appear disturbed (the disturbance attribute will equal 1). We will use the default threshold value of 0, so any block with a 'non-zero' value will include the block in a patch.

Figure 36. Patch criteria attribute

Below is the example code from the XML file that would define the above visual disturbance attribute.

  <select statement="">
      <attribute label="%f.Visual.disturb">
          <point x="5.0" y="1.0" />
          <point x="25.0" y="1.0" />
          <point x="30.0" y="0.0" />


The patching attribute can have any value, but is typically a value of 0 or 1. Any value greater than the threshold value (default 0.0) will indicate that the block belongs to the patch. The value of the patch attribute will be multiplied by block area to determine the contribution to total patch value. For example, half of a block could be less than thirty (the managed portion) and half the block could be greater than thirty (the unmanaged portion). The value of the patch criteria would be 0.5, and greater than the threshold therefore the block would qualify as a member of a patch. The contribution to the total patch value would be 0.5 times the block area.

In our example, Block 27 has a value of 1.0 for the feature.visual.disturbed attribute. The model determines that this block is eligible to be part of a patch and proceeds to check the topologically adjacent neighbours of Block 27. The topological adjacency relationships have been previously defined to the model in the topology.csv file.

Figure 37. Check your neighbours!

The first step in the patch building process is to examine all topologically adjacent neighbours of the block of interest.

If any neighbour has a higher than threshold value (in our case a non-zero) it becomes a member of the patch. The neighbour search algorithm moves out from the initial block to check all of the member block neighbours for non-zero values. This process continues until a perimeter of zero values is determined. A patch could theoretically span the entire planning area.

Figure 38. Check your neighbours' neighbours!

Subsequent stepts in the patch building process recursively examine the neighbours of all connected neighbours.

Once the patch is established all the patch criteria values of the members are multiplied against the area of the block to produce a summary value for the entire patch. With this understanding of how patches are calculated within the model using the patch criteria attribute and topological relationships we can now define accounts to summarize this information in various size classes. This will add an important spatial control to your model.


Specify the patch criteria threshold value by using a more advanced feature in the PIN file: setPatchThreshold. Use this feature to set a threshold on the criteria used to allow blocks to become a member of a patch. If the block has a criteria value larger than the threshold, then it is eligible to join the patch. The following code used in the PIN file after patch accounts are defined:

setPatchThreshold(String patch,      1
                  double threshold); 2   



The name of the patch criteria account.


The threshold criteria value. The criteria must be greater (on a per unit basis) than this value for the block to join in a patch. The default value is 0.