## Introduction

The potential function performs a neighborhood operation. It computes an output grid where the resulting value for each cell is the sum of the values of all the input cells within a specified neighborhood around that cell. This specified neigborhood is defined by the kernel (also known as distance matrix). In ArcGIS the same operation is known as focalsum. Within the GeoDMS the potential calculations are implemented using a Convolution by Fast Fourier Transformation (FFT) algorithm. This makes potental calculations much faster than focalsum calculations, especially with large kernels.

Neighborhood operations are for example used to:

- model the attractivity of a land use type in a suitability map based on the distance to for example an airport or a shopping area. In these cases often a distance decay function is used in the kernel to model the diminishing attractivity.

- spread out densities of target groups, for instance inhabitants above 65 years old. They are often concentrated on a few locations (old age or nursing homes). The potential operation can be used to get a clear view of the densility of an area.

## Example

The following example originates from a performance contest of the Spatial Analysis department of the Vrije Universiteit Amsterdam. The contest provided a 1 km world wide grid and a 50 km kernel:

`container contest{      unit<fpoint>  WorldBaseUnit;   unit<float32> potential;   container Kernel   {      unit<uint32> Dist2Range;      unit<spoint> pot50km :=          range(spoint, point(-50s, -50s), point(51s, 51s))      {         attribute<Dist2Range> distMatr  :=             dist2(point(0s, 0s, .), Dist2Range);         attribute<Potentiaal> AbsWeight :=             distMatr <= 2500 ? 1s : 0s;      }   }   container SourceData   {      unit<wpoint> wetlands      :   Descr           = "Arc/Info binary grid"      ,   StorageName     = "%sourcedatadir%/SpaceToGo/wetlands1"      ,   StorageType     = "gdal.grid"      ,   DialogData      = "WorldBaseUnit"      ,   StorageReadOnly = "True"      {         unit<wpoint>    World1kmGrid := TiledUnit(point(1024w, 1024w,.));         attribute<uint8> ReadData  (World1kmGrid) : isHidden = "True";         attribute<bool>  IsWetLand (World1kmGrid) := ReadData == 1b;      }   }   container Result   {      attribute<float32> Potential50km (SourceData/wetlands/World1kmGrid)       := potential(             float32(SourceData/wetlands/IsWetLand)            ,float32(kernel/pot50km/AbsWeight)        )      ,  StorageName = "%LocalDataProjDir%/Potential50km_float32.tif";    }}    `

## Explanation

The contest configuration starts with the configuration of  two units, WorldBaseUnit and potential. The WorldBaseUnit is the base unit for the coordinate system, the potential unit is used as values unit for the results of the potential calculations.

The Kernel container contains the configured items for the kernel.

The input grid with the primary data values in the example is called wetlands and is read from an Arc Info Binary Grid. The files for this grid are stored in the %SourceDataDir%/SpaceToGo folder. More information on how to configure an Arc Info Binary Grid source can be found here.

The ReadData attribute  in the wetlands container reads the data from the  Arc Info Binary Grid for the World1kmGrid tiled unit. The IsWetLand attribute defines a boolean attribute indicating if a cell belongs to a Wetland area or not.

This boolean attribute is combined with the kernel, to calculate the results, using the potential function. Both inputs are casted to float32 value types, as the arguments for the potential function need to be float32 or float64. The calculated results are stored in a tiff file: potential50km_tiff in the %LocalDataProjDir% folder when the results are requested.

OBJECT VISION BV
Vrije Universiteit
De Boelelaan 1085
1081 HV Amsterdam
The Netherlands

tel: +31 (0)20 598 9083
fax:+31 (0)20 598 9904