Adjust grid resolution with the GridData function in Surfer automation

Grid resolution can be defined using either the grid spacing or the number of grid nodes.


To set the grid spacing when gridding data in a Surfer script, use the .xSize and .ySize parameters of the GridData6 method.
'Grids the data setting the grid spacing in the X and Y directions (xSize, ySize)
SurferApp.GridData6 (DataFile:=DataFile, xSize:=0.2, ySize:=0.2, OutGrid:=OutGrid2)
Set MapFrame2 = Plot.Shapes.AddContourMap(GridFileName:=OutGrid2)


To set the number of nodes when gridding data in a Surfer script, use the .NumCols and .NumRows parameters of the GridData6 method.

'Grids the data setting the number of nodes in the X and Y directions (NumCols, NumRows)
SurferApp.GridData6 (DataFile:=DataFile, NumCols:=200, NumRows:=200, OutGrid:=OutGrid2)
Set MapFrame2 = Plot.Shapes.AddContourMap(GridFileName:=OutGrid2)


In Surfer 12 and previous, the GridData method did not have parameters for setting grid spacing, but it did let you specify the number of grid nodes.  The process defined below can be used to caldulate the number of nodes based on the desired spacing.


Calculate the number of grid nodes for the desired grid spacing with the following equation:

Number of grid nodes = ( (max - min) / spacing )

To get the data min and max for X and Y, read the data file in the worksheet and calculating the statistics for the X and Y columns.


Set Wks = SurferApp.Documents.Open(file1)
Set WksRange = Wks.Columns(Col1:=1, Col2:=2)
Set WksStatistics = WksRange.Statistics
dataxmin = WksStatistics.Minimum(1)
dataxmax = WksStatistics.Maximum(1)
dataymin = WksStatistics.Minimum(2)
dataymax = WksStatistics.Maximum(2)


The next issue is setting the XY min max of the grid file. To get a grid spacing exact, the max - min interval should be evenly divisible by the grid spacing. Set the actual min and max values to be evenly divisible by the grid spacing (5 in this example) to insure that the interval is also evenly divisible:


gridspacing = 5
gridxmin = gridspacing * Int(dataxmin/gridspacing)
gridxmax = gridspacing * (1 + Int(dataxmax/gridspacing))
gridymin = gridspacing * Int(dataymin/gridspacing)
gridymax = gridspacing * (1 + Int(dataymax/gridspacing))


Then calculate the number of rows and columns (grid nodes in X and Y):


ncol = 1 + (gridxmax-gridxmin)/gridspacing
nrow = 1 + (gridymax-gridymin)/gridspacing


Now you're ready to plug these into the GridData function:


SurferApp.GridData(file1, NumCols:=ncol, NumRows:=nrow, _
    xmin:=gridxmin, xmax:=gridxmax, ymin:=gridymin, ymax:=gridymax, _
    Algorithm:=srfKriging, Outgrid:=outfile1)


Updated October 2021

Was this article helpful?
1 out of 3 found this helpful



Please sign in to leave a comment.