{ "cells": [ { "cell_type": "markdown", "id": "0e948c69", "metadata": {}, "source": [ "# WolfArray — File I/O\n", "\n", "> **Note** — All I/O operations shown here work identically on `WolfArrayModel` (no GUI dependency).\n", "> See the [Model/GUI architecture](architecture_model_gui.ipynb) tutorial for details.\n", "\n", "A `WolfArray` supports multiple file formats. The constructor auto-detects the format from the file extension:\n", "\n", "| Extension | Format | CRS embedded? |\n", "|-----------|--------|---------------|\n", "| `.bin` | Wolf binary (default) | No (separate `.prj` sidecar) |\n", "| `.tif` / `.tiff` | GeoTIFF | Yes |\n", "| `.vrt` | GDAL Virtual Raster | Yes |\n", "| `.npy` | NumPy binary | No |\n", "| `.flt` | Binary raster | No |\n", "\n", "The Wolf binary format stores an auxiliary header file alongside the data file." ] }, { "cell_type": "code", "execution_count": 1, "id": "ba283657", "metadata": {}, "outputs": [], "source": [ "from wolfhece.wolf_array import WolfArray, header_wolf\n", "import numpy as np\n", "import tempfile, os, shutil" ] }, { "cell_type": "markdown", "id": "18355566", "metadata": {}, "source": [ "## Creating a Sample Array\n", "\n", "We first build a small array to use throughout this tutorial." ] }, { "cell_type": "code", "execution_count": 2, "id": "0899dd8e", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(
, )" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "h = header_wolf()\n", "h.shape = (50, 50)\n", "h.set_resolution(10., 10.) # 10 m per pixel\n", "h.set_origin(150000., 125000.) # Belgian Lambert 72\n", "\n", "wa = WolfArray(srcheader=h)\n", "rng = np.random.default_rng(42)\n", "wa.array[:, :] = rng.uniform(50., 200., size=(50, 50))\n", "wa.plot_matplotlib()" ] }, { "cell_type": "markdown", "id": "d06b5a33", "metadata": {}, "source": [ "## Saving as Wolf Binary (`.bin`)\n", "\n", "The `.bin` format is the native WOLF format. `write_all()` creates the binary data file and a companion header file." ] }, { "cell_type": "code", "execution_count": 3, "id": "fcb85f0d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Files created: ['demo.bin', 'demo.bin.txt']\n" ] } ], "source": [ "tmpdir = tempfile.mkdtemp()\n", "\n", "bin_path = os.path.join(tmpdir, 'demo.bin')\n", "wa.write_all(bin_path)\n", "print('Files created:', sorted(os.listdir(tmpdir)))" ] }, { "cell_type": "code", "execution_count": 4, "id": "4cfe129c", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Shape : 50 x 50 \n", "Resolution : 10.0 x 10.0 \n", "Spatial extent : \n", " - Origin : (150000.0 ; 125000.0) \n", " - End : (150500.0 ; 125500.0) \n", " - Width x Height : 500.0 x 500.0 \n", " - Translation : (0.0 ; 0.0)\n", "Null value : 0.0\n", "\n", "\n", "Data match: True\n" ] } ], "source": [ "# Reload from Wolf binary\n", "wa_bin = WolfArray(fname=bin_path)\n", "print(wa_bin)\n", "print('Data match:', np.allclose(wa.array.data, wa_bin.array.data))" ] }, { "cell_type": "markdown", "id": "d1a46804", "metadata": {}, "source": [ "## Saving as GeoTIFF (`.tif`)\n", "\n", "GeoTIFF embeds georeferencing and coordinate reference system. Use the `EPSG` parameter to specify the CRS.\n", "\n", "EPSG 31370 = Belgian Lambert 72 (the default in Wolf)." ] }, { "cell_type": "code", "execution_count": 5, "id": "9e4a52d2", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "GeoTIFF created: True\n" ] } ], "source": [ "tif_path = os.path.join(tmpdir, 'demo.tif')\n", "wa.write_all(tif_path, EPSG=31370)\n", "print('GeoTIFF created:', os.path.exists(tif_path))" ] }, { "cell_type": "code", "execution_count": 6, "id": "670e7fa8", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Shape : 50 x 50 \n", "Resolution : 10.0 x 10.0 \n", "Spatial extent : \n", " - Origin : (150000.0 ; 125000.0) \n", " - End : (150500.0 ; 125500.0) \n", " - Width x Height : 500.0 x 500.0 \n", " - Translation : (0.0 ; 0.0)\n", "Null value : 0.0\n", "\n", "\n", "Data match: True\n" ] } ], "source": [ "# Reload from GeoTIFF\n", "wa_tif = WolfArray(fname=tif_path)\n", "print(wa_tif)\n", "print('Data match:', np.allclose(wa.array.data, wa_tif.array.data))" ] }, { "cell_type": "markdown", "id": "2af65ecb", "metadata": {}, "source": [ "## Saving as NumPy (`.npy`)\n", "\n", "The `.npy` format stores only the raw array data — no georeferencing." ] }, { "cell_type": "code", "execution_count": 7, "id": "5165f0fa", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "NumPy file created: True\n", "Shape: (50, 50)\n" ] } ], "source": [ "npy_path = os.path.join(tmpdir, 'demo.npy')\n", "wa.write_all(npy_path)\n", "print('NumPy file created:', os.path.exists(npy_path))\n", "\n", "# Raw NumPy load (no header)\n", "raw = np.load(npy_path)\n", "print('Shape:', raw.shape)" ] }, { "cell_type": "markdown", "id": "b7a7ffb7", "metadata": {}, "source": [ "## Importing GeoTIFF with `import_geotif`\n", "\n", "The `import_geotif()` method offers extra options:\n", "- `which` — band index (1-based) for multi-band rasters\n", "- `crop` — bounding box `[xmin, xmax, ymin, ymax]` to read only a subregion" ] }, { "cell_type": "code", "execution_count": 8, "id": "1fba573c", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Shape : 20 x 20 \n", "Resolution : 10.0 x 10.0 \n", "Spatial extent : \n", " - Origin : (150100.0 ; 125100.0) \n", " - End : (150300.0 ; 125300.0) \n", " - Width x Height : 200.0 x 200.0 \n", " - Translation : (0.0 ; 0.0)\n", "Null value : 0.0\n", "\n", "\n" ] }, { "data": { "text/plain": [ "(
, )" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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XbHl40FNrZQTkXpGbFkTNs1KOVu2/rfYMuHKFSvlPLPvDbHl+YqbrZRz7Fh3seXh5560Us60qTeKLRV72Sln0o7DdgoSkaZNR1kpJ3RUbSvlyIVMkQ72fj8baPECAOAQwQsAgEMELwAADhG8AAA4RPACAOAQwQsAgEMELwAADhG8AAA4RPACAOAQwQsAgEMELwAADhG8AAA4RPACAOAQwQsAgEMELwAADhG8AAA4RPACAOAQwQsAgEPhLg9WXHWv9aNElIotVBnvfBlirT5pp09bKWf5n4+LLXec32qlnNvWizW7MiZaKefEiA5iy/mqU62U81PE78SWQaNftlJO9FM3iS3nL39ipZwq5+393T35RgUr5UTdU1ZsObdomZVywnakiS3LXztop6Bp5+yU40kRkaoSTGjxAgDgEMELAIBDBC8AAA4RvAAABHPwbt68WTp27CiVK1eWkJAQWbFihW9benq6jBgxQurXry/R0dFmn969e8uJEycCyqhevbp5rv8yadIk3/ZLly5J3759TTnh4eHSpUuXbPVYvny53HPPPXLjjTdKbGysNG/eXD75JHBCxrhx47Idp27dugX9lQEAKLrgvXDhgjRs2FBmzZqVbdvFixdlz549Mnr0aPNTwzExMVE6deqUbd8JEybIyZMnfcugQYN82zIzMyUqKkoGDx4sbdq0yfULgAbvRx99JJ9//rm0bt3afCH44osvAvarV69ewHG2bNlS0F8ZAICiO52offv2ZslJXFycrF27NmDdzJkzpVmzZnLs2DGpWvXnKd0xMTESHx+fYznaWp49e7b599atW+XcuezTymfMmBHw+M9//rO8//778sEHH0jjxo1967XFnNtxAAD4xY3xJicnmy7e0qVLB6zXruVy5cqZkJw6dapkZGQU6jhXrlyR8+fPS9mygefIHTx40HR516xZUx555BHzBSA3aWlpkpKSErAAAFBsLqChY7U65tuzZ08zDuulXchNmjQxIblt2zYZOXKk6QaeNm3aNR/rpZdektTUVOnevbtvXUJCgsyfP1/q1Kljyh8/frzcddddsn//ftPizmrixIlmHwAAil3w6kQrDUGPx+PrNvYaNmyY798NGjSQiIgIGThwoAm+yMjIAh9r0aJFJjC1q7lChZ+vLuPfJa7H0SCuVq2aLFmyRPr375+tHP0C4F83bfFWqVKl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w2z7FWW9veeTnz17NtdjFYfXW+uhZRw9ejTf11u5qLvXfffd5+nXr5/vcffu3T0dOnQI2EfPyR84cKD595UrVzzx8fGeqVOn+rafO3fOExkZWaT1ziojI8MTExPjWbBgQb51Kcp663UJ9HoHuSkur/f06dPN652amppvXcRhvYcOHepp0aKFlff322+/7SmIYt/ivRr6jVdbQnXq1JEnn3xSTp8+7dum34C1a0KvbuWlrRW9hKV+o7laWk7WVo5+E9L1Sq/CpS1K/330GHm16FzUOyu9rKZeKSzrnTy0O0W7OrWLRr9d6h2bgqHe2tWl3T7aatd7N3sVl9dbew60HL0L1rW+3ter7npXF//3QX7vce310a5+/330BiN6LfairHdW2uuhXYxZ98mrLkVVb+0u1feGttK1i1dbdV7F5fXW93iPHj1M6/Bq63K9661XX1y9erW0bNnSyvvbu8/Vuq63BQwG2kXRtWtXqVGjhhw+fFhGjRol7du3Ny+Udn/oC5n1GtE6PqdvpKzjhdfrNoVFWe+sXnrpJfPHrtfb9tI3lo436Zteu3nGjx9vxsyKst4attrdo39saWlp8sYbb5ixJf1D03H2//znP0H/ep84cUI+/vhjWbRoUcD63F5v/y6v6113vfzqrl27ZM6cOfm+x71leH8W5WueU72z0luV6pca/w/Q3OpSlPXW///z5s0zXbsabvq3eeedd5rwvemmm4rF661j6fq+zTo01a6IXm99/fSSxvqZoV3REyZMsPL+LuhnwC8+ePWblpcOluub+OabbzbfoO6++24JVkVRbw0A/ZB///33A97I/n8QWg8NhqwtNNf11g8lXfz/oPSPUse5/v73vxeL13vBggXmm3rWSVi5vd76Ieei7joWqmN3OgbmP+nLtqKo96RJk2Tx4sXmGP4TlXKrS1HWWyc6+t/QRd/jt956qwm5F154oVi83hq4eiy9Vv7V1OV611vnfWiP3pdffinPPfec+TKj1/t37VfR1exPu+70loHeGz3oLQJ/+OGHgH30FoU6S64gtw8szG0Ki7LeXvphpJPB9MM9vwlNGha1a9cOinr70z9u73GC/fXW4SxtzTz66KNmxvXVvN7+Nye5XnX/9NNPzeQ6/QKjk1Gu5j3uLcP7syhe87zq7aUfshq8OsFGP7yvpi7BUG//CUKNGzcOOE4wv9468VU/V3Sy0tXW5XrXW7vsb7vtNjOJSt8LegaB9owV9v1d0M+AX13wHj9+3IwPaFel0m+U586dM+OBXnqnIx3rzGusxOZtCouy3kpnCOo3V/3pP+U/N9oVra3Loq53Vjqb3HucYH69vR9c+sFxNR9K3tfbW5frVXdtQej//8mTJwfMCL3a97h2BeoHkP8+OtRytWPg16ve3tmo2krUcT3/scD86lLU9fanAfHVV1/5jhPMr7f31Bzt0tU7z11tXVz+bep2HevXn4V9fxf4VrOeYu78+fOeL774wiz660ybNs38OykpyWx79tlnPdu3bzd3Tlq3bp2nSZMmnltuuSXgbkjt2rXzNG7c2LNz507Pli1bzPaePXsGHOfrr7825Xbs2NHTqlUr3zG9/v3vf3tKlSrlee655zz//Oc/PbNmzfKEhYV5Vq9e7dtn8eLFZgbc/PnzzQy8rl27em644YYirffChQs94eHhpr4nT570LTpbz+uZZ57xbNq0ydRl7dq1ZqZf6dKli7TeOlNyxYoVnoMHD3q++uorz5AhQzyhoaHmmMH8env16tXLvI458X+9t27dasrR13v9+vXXre4bNmww79+RI0cGvA9Onz7t20frou+Vl156ybzHdfZ1iRIlzOvvNWnSJFPX999/39wJTOvunUleVPXWOundyd59992AfbQOKmtdPvjgA0/dunXNXc2Kst56ZsEnn3ziOXz4sLmrW48ePcwd3fQ9Fsyvt5fOGNYzO7I6XwSv91tvveV55513zAxofT313/o6PfLII9f8/t63b5+ZbV2jRg3PTz/95CmIYh+8ed2m8OLFi557773Xc+ONN5oXUG81+MQTT3hOnToVUIa+afR/kn4ox8bGmqnx3j/K63WbQv0fHAz1btmyZa718NI/nkqVKpnfq3z58kFR78mTJ3tuvvlm80FUtmxZ84GjHwrB/nor/VITFRXlef3117PVN+vr/V//9V+e1q1bX/e6a1k5HUPfH/6WLFniqV27tqmbnj734YcfBmzXUy5Gjx7tqVixoqlPMNQ7t/8n+sGqstZF6x4M9X766ad9tzTVOulpO3v27An611t98803Zv2aNWsC1hfV67148WIT2Lo9OjranDKpt6PNGpgFeX/rl/q7777bk5iY6CkobgsIAIBDv7oxXgAAihLBCwCAQwQvAAAOEbwAADhE8AIA4BDBCwCAQwQvAAAOEbwAADhE8AIA4BDBCwCAQwQvAADizv8PGlXUhjP+k58AAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Reload with spatial crop — crop format is [xmin, xmax, ymin, ymax]\n", "wa_crop = WolfArray()\n", "wa_crop.import_geotif(tif_path, crop=[150100., 150300., 125100., 125300.])\n", "print(wa_crop)\n", "wa_crop.plot_matplotlib()" ] }, { "cell_type": "markdown", "id": "e8d3ca91", "metadata": {}, "source": [ "## Exporting with `export_geotif`\n", "\n", "`export_geotif()` gives fine control over the output directory, extent, and EPSG code." ] }, { "cell_type": "code", "execution_count": 9, "id": "6532d321", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Exported files: ['.tif']\n" ] } ], "source": [ "outdir = os.path.join(tmpdir, 'geotif_export')\n", "os.makedirs(outdir, exist_ok=True)\n", "wa.export_geotif(outdir=outdir, EPSG=31370)\n", "print('Exported files:', os.listdir(outdir))" ] }, { "cell_type": "markdown", "id": "122d0fc6", "metadata": {}, "source": [ "## Clean Up" ] }, { "cell_type": "code", "execution_count": 10, "id": "38fb0d07", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Temporary files removed.\n" ] } ], "source": [ "shutil.rmtree(tmpdir, ignore_errors=True)\n", "print('Temporary files removed.')" ] } ], "metadata": { "kernelspec": { "display_name": "python311", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.9" } }, "nbformat": 4, "nbformat_minor": 5 }