Read surfer grids#

There are 3 varieties:

  • Surfer 6 binary

  • Surfer 6 ASCII

  • Surfer 7 binary

In theory we can read all of these, but I don’t have a Surfer 6 binary file to test on.

A small binary file#

From the docs.

!head ../data/Surfer/surfer-6-ascii-tiny.grd
DSAA
10 10 
0.0 9.0
0.0 7.0
25.00 97.19
91.03 77.21 60.55 46.67 52.73 64.05 41.19 54.99 44.30 25.00
96.04 81.10 62.38 48.74 57.50 63.27 48.67 60.81 51.78 33.63
92.10 85.05 65.09 53.01 64.44 65.64 52.53 66.54 59.29 41.33
94.04 85.63 65.56 55.32 73.18 70.88 55.35 76.27 67.20 45.78
97.19 82.00 64.21 61.97 82.99 80.34 58.55 86.28 75.02 48.75
import gio

da = gio.read_surfer('../data/Surfer/surfer-6-ascii-tiny.grd')
da
<xarray.DataArray (y: 10, x: 10)>
array([[70.  , 54.19, 62.27, 74.51, 55.95, 55.42, 71.21, 74.63, 63.14,
        44.99],
       [74.77, 66.02, 70.29, 75.16, 60.56, 65.56, 85.07, 89.81, 74.53,
        51.69],
       [80.88, 75.56, 74.35, 72.47, 66.93, 75.49, 86.39, 92.1 , 84.41,
        55.  ],
       [86.31, 77.58, 67.71, 68.5 , 73.37, 74.84, 65.35, 95.55, 85.92,
        55.76],
       [91.36, 78.73, 64.05, 65.6 , 82.58, 81.37, 61.16, 89.09, 81.36,
        54.87],
       [97.19, 82.  , 64.21, 61.97, 82.99, 80.34, 58.55, 86.28, 75.02,
        48.75],
       [94.04, 85.63, 65.56, 55.32, 73.18, 70.88, 55.35, 76.27, 67.2 ,
        45.78],
       [92.1 , 85.05, 65.09, 53.01, 64.44, 65.64, 52.53, 66.54, 59.29,
        41.33],
       [96.04, 81.1 , 62.38, 48.74, 57.5 , 63.27, 48.67, 60.81, 51.78,
        33.63],
       [91.03, 77.21, 60.55, 46.67, 52.73, 64.05, 41.19, 54.99, 44.3 ,
        25.  ]])
Coordinates:
  * x        (x) float64 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0
  * y        (y) float64 0.0 0.7778 1.556 2.333 3.111 ... 4.667 5.444 6.222 7.0
Attributes:
    source:   ../data/Surfer/surfer-6-ascii-tiny.grd
da.max()
<xarray.DataArray ()>
array(97.19)

Another ASCII#

import gio

da = gio.read_surfer('../data/Surfer/surfer-6-ascii.grd')
da
<xarray.DataArray (y: 182, x: 222)>
array([[-58.1195, -55.5528, -52.4692, ..., -41.9582, -47.2193, -51.5736],
       [-57.7877, -55.2337, -52.1599, ..., -41.5877, -46.8911, -51.2844],
       [-57.4487, -54.9043, -51.8392, ..., -41.1691, -46.5296, -50.9713],
       ...,
       [ 98.8531, 103.599 , 106.683 , ...,  23.8501,  22.8811,  22.0409],
       [104.529 , 108.384 , 111.854 , ...,  18.179 ,  17.2994,  16.5399],
       [109.395 , 112.507 , 115.76  , ...,  13.2723,  12.4487,  11.7467]])
Coordinates:
  * x        (x) float64 0.0 5e+03 1e+04 1.5e+04 ... 1.095e+06 1.1e+06 1.105e+06
  * y        (y) float64 0.0 5e+03 1e+04 1.5e+04 ... 8.95e+05 9e+05 9.05e+05
Attributes:
    source:   ../data/Surfer/surfer-6-ascii.grd
da.plot()
<matplotlib.collections.QuadMesh at 0x7f0adca95640>
../_images/6b788e2fbd8a97276ab6392844304696c39b7c522d28332f94a1843ce7c00756.png

A binary file#

import gio

da = gio.read_surfer('../data/Surfer/WDS1_Si_TAP_Quant.grd')
da
<xarray.DataArray (y: 352, x: 629)>
array([[34.34440231, 35.18498611, 35.32251358, ..., 36.05297852,
        35.76726532, 35.35245132],
       [35.43532181, 35.00969315, 35.75266647, ..., 36.27960205,
        35.19588852, 36.22369003],
       [35.50966644, 35.82201385, 35.89884949, ..., 36.19258118,
        36.06084442, 35.46885681],
       ...,
       [22.57001305, 23.0938015 , 22.96144295, ..., 36.87253571,
        35.71622849, 35.71092606],
       [22.57962227, 22.91576004, 22.62903214, ..., 37.23720932,
        36.19213867, 36.02495956],
       [23.00543976, 22.40481567, 22.8556118 , ..., 36.53549194,
        35.47878265, 35.03230667]])
Coordinates:
  * x        (x) float64 2.604 2.605 2.605 2.606 ... 2.917 2.917 2.918 2.918
  * y        (y) float64 23.47 23.47 23.47 23.47 ... 23.64 23.64 23.64 23.64
Attributes:
    source:   ../data/Surfer/WDS1_Si_TAP_Quant.grd
da.plot()
<matplotlib.collections.QuadMesh at 0x7f0ada789790>
../_images/b53a6e61569c1ed5b1ec24186fef8733aa67452e4c9b8b9bd47ea516f7742f82.png
da.shape
(352, 629)