1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
|
Exporting bit-masks
-------------------
.. index:: bitmask, ENVISAT
This tutorial shows how to generate bit masks from ENVISAT_ flags information
as "raw" image using PyEPR_.
The example code (:download:`examples/write_bitmask.py`) is a direct
translation of the C sample program `write_bitmask.c`_ bundled with the
EPR API distribution.
The program is invoked as follows:
.. code-block:: sh
$ python write_bitmask.py <envisat-product> <bitmask-expression> \
<output-file>
.. _ENVISAT: https://earth.esa.int/eogateway/missions/envisat
.. _PyEPR: https://github.com/avalentino/pyepr
.. _`write_bitmask.c`: https://github.com/bcdev/epr-api/blob/master/src/examples/write_bitmask.c
The :download:`examples/write_bitmask.py` code consists in a single function
that also includes command line arguments handling:
.. raw:: latex
\fvset{fontsize=\footnotesize}
.. literalinclude:: examples/write_bitmask.py
:language: python
.. index:: EPR-API, module
pair: epr; module
In order to use the Python_ EPR API the :mod:`epr` module is imported:
.. raw:: latex
\fvset{fontsize=\footnotesize}
.. literalinclude:: examples/write_bitmask.py
:lines: 26
.. index:: product, open
pair: with; statement
As usual the ENVISAT_ product is opened using the :func:`epr.open` function
that returns an :class:`epr.Product` instance.
In this case the :func:`epr.open` is used together with a ``with`` statement
so that the :class:`epr.Product` instance is closed automatically when the
program exits the ``with`` block.
.. raw:: latex
\fvset{fontsize=\footnotesize}
.. literalinclude:: examples/write_bitmask.py
:language: python
:lines: 58-59
.. index:: product
Scene size parameters are retrieved form the :class:`epr.Product` object
using the :meth:`epr.Product.get_scene_width` and
:meth:`epr.Product.get_scene_height` methods:
.. raw:: latex
\fvset{fontsize=\footnotesize}
.. literalinclude:: examples/write_bitmask.py
:language: python
:lines: 62-63
The EPR API allows to manage data by means of :class:`epr.Raster` objects, so
the function :func:`epr.create_bitmask_raster`, specific for bit-masks, is used
to create a :class:`epr.Raster` instance.
.. seealso:: :func:`epr.create_raster`
Data are actually read using the :meth:`epr.Product.read_bitmask_raster`
method of the :class:`epr.Product` class:
.. raw:: latex
\fvset{fontsize=\footnotesize}
.. literalinclude:: examples/write_bitmask.py
:language: python
:lines: 71
The :meth:`epr.Product.read_bitmask_raster` method receives in input the
*bm_expr* parameter that is set via command line:
.. raw:: latex
\fvset{fontsize=\footnotesize}
.. literalinclude:: examples/write_bitmask.py
:language: python
:lines: 55
*bm_expr* is a string that define the logical expression for the definition
of the bit-mask. In a bit-mask expression, any number of the flag-names
(found in the DDDB) can be composed with “(”, ”)”, “NOT”, “AND”, “OR”.
.. index:: AND, OR, NOT, DDDB
Valid bit-mask expression are for example::
flags.LAND OR flags.CLOUD
or::
NOT flags.WATER AND flags.TURBID_S
Finally data are written to disk as a flat binary file using the
:meth:`numpy.ndarray.tofile` method of the :data:`epr.Raster.data` attribute
of the :class:`epr.Raster` objects that exposes data via the
:class:`numpy.ndarray` interface:
.. raw:: latex
\fvset{fontsize=\footnotesize}
.. literalinclude:: examples/write_bitmask.py
:language: python
:lines: 73-74
.. _Python: https://www.python.org
.. _ENVISAT: https://earth.esa.int/eogateway/missions/envisat
.. raw:: latex
\clearpage
|