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#
!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
xarray.DataArray
- y: 10
- x: 10
- 70.0 54.19 62.27 74.51 55.95 55.42 ... 64.05 41.19 54.99 44.3 25.0
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. ]])
- x(x)float640.0 1.0 2.0 3.0 ... 6.0 7.0 8.0 9.0
array([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])
- y(y)float640.0 0.7778 1.556 ... 6.222 7.0
array([0. , 0.777778, 1.555556, 2.333333, 3.111111, 3.888889, 4.666667, 5.444444, 6.222222, 7. ])
- source :
- ../data/Surfer/surfer-6-ascii-tiny.grd
da.max()
<xarray.DataArray ()> array(97.19)
xarray.DataArray
- 97.19
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
xarray.DataArray
- y: 182
- x: 222
- -58.12 -55.55 -52.47 -48.9 -44.89 ... 15.12 14.18 13.27 12.45 11.75
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]])
- x(x)float640.0 5e+03 ... 1.1e+06 1.105e+06
array([ 0., 5000., 10000., ..., 1095000., 1100000., 1105000.])
- y(y)float640.0 5e+03 1e+04 ... 9e+05 9.05e+05
array([ 0., 5000., 10000., 15000., 20000., 25000., 30000., 35000., 40000., 45000., 50000., 55000., 60000., 65000., 70000., 75000., 80000., 85000., 90000., 95000., 100000., 105000., 110000., 115000., 120000., 125000., 130000., 135000., 140000., 145000., 150000., 155000., 160000., 165000., 170000., 175000., 180000., 185000., 190000., 195000., 200000., 205000., 210000., 215000., 220000., 225000., 230000., 235000., 240000., 245000., 250000., 255000., 260000., 265000., 270000., 275000., 280000., 285000., 290000., 295000., 300000., 305000., 310000., 315000., 320000., 325000., 330000., 335000., 340000., 345000., 350000., 355000., 360000., 365000., 370000., 375000., 380000., 385000., 390000., 395000., 400000., 405000., 410000., 415000., 420000., 425000., 430000., 435000., 440000., 445000., 450000., 455000., 460000., 465000., 470000., 475000., 480000., 485000., 490000., 495000., 500000., 505000., 510000., 515000., 520000., 525000., 530000., 535000., 540000., 545000., 550000., 555000., 560000., 565000., 570000., 575000., 580000., 585000., 590000., 595000., 600000., 605000., 610000., 615000., 620000., 625000., 630000., 635000., 640000., 645000., 650000., 655000., 660000., 665000., 670000., 675000., 680000., 685000., 690000., 695000., 700000., 705000., 710000., 715000., 720000., 725000., 730000., 735000., 740000., 745000., 750000., 755000., 760000., 765000., 770000., 775000., 780000., 785000., 790000., 795000., 800000., 805000., 810000., 815000., 820000., 825000., 830000., 835000., 840000., 845000., 850000., 855000., 860000., 865000., 870000., 875000., 880000., 885000., 890000., 895000., 900000., 905000.])
- source :
- ../data/Surfer/surfer-6-ascii.grd
da.plot()
<matplotlib.collections.QuadMesh at 0x7f0adca95640>

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
xarray.DataArray
- y: 352
- x: 629
- 34.34 35.18 35.32 35.62 35.55 36.32 ... 36.85 36.72 36.54 35.48 35.03
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]])
- x(x)float642.604 2.605 2.605 ... 2.918 2.918
array([2.604 , 2.604501, 2.605002, ..., 2.917498, 2.917999, 2.9185 ])
- y(y)float6423.47 23.47 23.47 ... 23.64 23.64
array([23.4651 , 23.465601, 23.466103, ..., 23.640097, 23.640599, 23.6411 ])
- source :
- ../data/Surfer/WDS1_Si_TAP_Quant.grd
da.plot()
<matplotlib.collections.QuadMesh at 0x7f0ada789790>

da.shape
(352, 629)