ISO 19123-3:2023
(Main)Geographic information - Schema for coverage geometry and functions - Part 3: Processing fundamentals
Geographic information - Schema for coverage geometry and functions - Part 3: Processing fundamentals
This document defines a coverage processing language for server-side extraction, filtering, processing, analytics, and fusion of multi-dimensional geospatial coverages representing, for example, spatio-temporal sensor, image, simulation, or statistics datacubes. Services implementing this language provide access to original or derived sets of coverage information, in forms that are useful for client-side consumption. This document relies on the ISO 19123-1 abstract coverage model. In this edition, regular and irregular multi-dimensional grids are supported for axes that can carry spatial, temporal or any other semantics. Future editions will additionally support further axis types as well as further coverage types from ISO 19123-1, specifically, point clouds and meshes.
Information géographique — Schéma de la géométrie et des fonctions de couverture — Partie 3: Principes de base du traitement
Le présent document définit un langage de traitement de couverture pour l'extraction, le filtrage, le traitement, l'analyse et la fusion côté serveur de couvertures géospatiales multidimensionnelles représentant, par exemple, des cubes de données spatio-temporelles de capteurs, d'images, de simulations ou de statistiques. Les services mettant en œuvre ce langage permettent d'accéder à des ensembles originaux ou dérivés d'informations de couverture, sous des formes utiles pour la consommation côté client. Le présent document s'appuie sur le modèle de couverture abstrait de l'ISO 19123-1. Dans le présent document, les grilles multidimensionnelles régulières et irrégulières sont prises en charge pour des axes qui peuvent avoir une sémantique spatiale, temporelle ou autre. Les éditions suivantes incluront aussi d’autres types d’axes et d’autres types de couvertures provenant de l’ISO 19123-1, spécifiquement, les nuages de points et les maillages.
General Information
Relations
Overview - ISO 19123-3:2023 (Processing fundamentals)
ISO 19123-3:2023 defines a coverage processing language and the processing fundamentals for server-side extraction, filtering, analytics and fusion of multi-dimensional geospatial coverages (for example, spatio‑temporal sensor, image, simulation or statistics datacubes). Built on the abstract coverage model of ISO 19123‑1, this part standardizes functionally defined, side‑effect free operations that produce original or derived coverages in client‑useful forms. The standard targets implementations such as web coverage services (e.g., OGC WCS) but is independent of any concrete request/response encoding.
Key topics and technical requirements
- Coverage processing language: A composable expression language to describe unlimited complexity of operations on coverages.
- Coverage constructs: Core conceptual building blocks include the coverage constructor (to build/derive coverages) and the coverage condenser (to aggregate/derive summaries).
- Supported coverage types: Regular and irregular multi‑dimensional grids; axes can carry spatial, temporal or other semantics. (Point clouds and meshes are planned for future editions.)
- Operations and expressions: Extraction, range‑value transformations, domain changes, aggregation (condense, reduce), encode/decode, CRS transforms, and more. The document lists concrete expression elements (e.g., processCoveragesExpr, coverageConstructorExpr, condenseExpr).
- Aggregation examples: Standard aggregations such as count, sum, min, max, average are specified for condensers.
- Syntax and semantics: Normative expression syntax and semantics are defined (Annex B and Annex C provide syntax and diagrams).
- Conformance and interoperability: Conformance tests and classes are described (Annex A). Implementations must also conform to ISO 19123‑1 conformance tests.
Practical applications and who uses it
- GIS software vendors and platform developers implementing server-side coverage processing and analytic services.
- Web service providers (OGC WCS and similar) exposing multi-dimensional datacubes for clients and applications.
- Earth observation, remote sensing, climate modelling, environmental monitoring, and IoT sensor data platforms needing standardized server-side filtering, analytics and fusion.
- Data integrators and analysts who require consistent semantics for coverage extraction, aggregation and CRS transformations.
Benefits / Why adopt ISO 19123-3:2023
- Standardizes server-side processing semantics for complex, multi-dimensional geospatial data.
- Enables interoperable service descriptions and consistent client consumption of derived coverages.
- Supports powerful, composable operations while remaining implementation‑independent.
Related standards
- ISO 19123-1 - Coverage fundamentals and abstract model (normative dependency)
- ISO 19111 - Referencing by coordinates (referenced)
- Open Geospatial Consortium specifications (OGC WCS) - common target for application of this language
For implementers, review Annexes (conformance tests, expression syntax, sample service descriptions) to align service behavior and interoperability with ISO 19123-3:2023.
Frequently Asked Questions
ISO 19123-3:2023 is a standard published by the International Organization for Standardization (ISO). Its full title is "Geographic information - Schema for coverage geometry and functions - Part 3: Processing fundamentals". This standard covers: This document defines a coverage processing language for server-side extraction, filtering, processing, analytics, and fusion of multi-dimensional geospatial coverages representing, for example, spatio-temporal sensor, image, simulation, or statistics datacubes. Services implementing this language provide access to original or derived sets of coverage information, in forms that are useful for client-side consumption. This document relies on the ISO 19123-1 abstract coverage model. In this edition, regular and irregular multi-dimensional grids are supported for axes that can carry spatial, temporal or any other semantics. Future editions will additionally support further axis types as well as further coverage types from ISO 19123-1, specifically, point clouds and meshes.
This document defines a coverage processing language for server-side extraction, filtering, processing, analytics, and fusion of multi-dimensional geospatial coverages representing, for example, spatio-temporal sensor, image, simulation, or statistics datacubes. Services implementing this language provide access to original or derived sets of coverage information, in forms that are useful for client-side consumption. This document relies on the ISO 19123-1 abstract coverage model. In this edition, regular and irregular multi-dimensional grids are supported for axes that can carry spatial, temporal or any other semantics. Future editions will additionally support further axis types as well as further coverage types from ISO 19123-1, specifically, point clouds and meshes.
ISO 19123-3:2023 is classified under the following ICS (International Classification for Standards) categories: 35.240.70 - IT applications in science. The ICS classification helps identify the subject area and facilitates finding related standards.
ISO 19123-3:2023 has the following relationships with other standards: It is inter standard links to ISO 23343-1:2021. Understanding these relationships helps ensure you are using the most current and applicable version of the standard.
You can purchase ISO 19123-3:2023 directly from iTeh Standards. The document is available in PDF format and is delivered instantly after payment. Add the standard to your cart and complete the secure checkout process. iTeh Standards is an authorized distributor of ISO standards.
Standards Content (Sample)
INTERNATIONAL ISO
STANDARD 19123-3
First edition
2023-06
Geographic information — Schema for
coverage geometry and functions —
Part 3:
Processing fundamentals
Information géographique — Schéma de la géométrie et des fonctions
de couverture —
Partie 3: Principes de base du traitement
Reference number
© ISO 2023
All rights reserved. Unless otherwise specified, or required in the context of its implementation, no part of this publication may
be reproduced or utilized otherwise in any form or by any means, electronic or mechanical, including photocopying, or posting on
the internet or an intranet, without prior written permission. Permission can be requested from either ISO at the address below
or ISO’s member body in the country of the requester.
ISO copyright office
CP 401 • Ch. de Blandonnet 8
CH-1214 Vernier, Geneva
Phone: +41 22 749 01 11
Email: copyright@iso.org
Website: www.iso.org
Published in Switzerland
ii
ISO/FDIS 19123-3:2023(E)
Contents
Foreword . v
Introduction . vi
1 Scope .1
2 Normative references .1
3 Terms and definitions .1
4 Conformance .2
4.1 Notation .2
4.2 Interoperability and conformance testing .2
4.3 Organization .2
5 Coverage model .2
5.1 Overview .2
5.2 Coverage model .2
5.3 Coverage identifier .3
5.4 Domain .4
5.4.1 Direct position .4
5.4.2 Grid .4
5.5 Interpolation .6
5.6 Range values .7
5.7 Range type .7
5.8 Coverage probing functions synopsis .7
6 Coverage processing language .9
6.1 Syntax and Semantics Definition Style .9
6.1.1 Expression Syntax.9
6.1.2 Expression Semantics . 10
6.2 Coverage Processing Expressions . 10
6.2.1 processCoveragesExpr . 10
6.2.2 processingExpr . 12
6.2.3 coverageExpr . 12
6.2.4 coverageIdExpr . 12
6.3 Coverage-Generating Expressions . 13
6.3.1 coverageConstructorExpr . 13
6.3.2 Examples . 16
6.4 Coverage Extraction Expressions. 18
6.4.1 scalarExpr . 18
6.4.2 getComponentExpr . 18
6.4.3 booleanScalarExpr . 19
6.4.4 numericScalarExpr. 19
6.4.5 stringScalarExpr . 20
6.5 Coverage range value-changing expressions. 20
6.5.1 inducedExpr. 20
6.5.2 unaryInducedExpr . 20
6.5.3 trigonometricExpr . 23
6.5.4 binaryInducedExpr . 28
6.5.5 N-ary Induced operations . 30
6.5.6 Coverage Domain-Changing Expressions. 33
6.5.7 scaleExpr . 37
6.6 Coverage Derivation Expressions . 38
6.6.1 crsTransformExpr . 38
ISO/FDIS 19123-3:2023(E)
6.7 Coverage Aggregation Expressions . 39
6.7.1 condenseExpr . 39
6.7.2 generalCondenseExpr . 39
6.7.3 reduceExpr . 42
6.8 Coverage Encode/Decode Expressions . 43
6.8.1 encodeCoverageExpr . 43
6.8.2 decodeCoverageExpr . 44
6.9 Expression evaluation . 45
6.9.1 Evaluation sequence . 45
6.9.2 Nesting . 45
6.9.3 Parentheses . 45
6.9.4 Operator precedence rules . 45
6.9.5 Range type compatibility and extension . 46
6.10 Evaluation response . 46
Annex A (normative) Conformance Tests. 48
Annex B (normative) Expression Syntax . 49
Annex C (informative) Syntax diagrams . 57
Annex D (informative) Sample service descriptions . 74
Bibliography . 77
iv © ISO 2023 – All rights reserved
ISO/FDIS 19123-3:2023(E)
Foreword
ISO (the International Organization for Standardization) is a worldwide federation of national standards
bodies (ISO member bodies). The work of preparing International Standards is normally carried out
through ISO technical committees. Each member body interested in a subject for which a technical
committee has been established has the right to be represented on that committee. International
organizations, governmental and non-governmental, in liaison with ISO, also take part in the work. ISO
collaborates closely with the International Electrotechnical Commission (IEC) on all matters of
electrotechnical standardization.
The procedures used to develop this document and those intended for its further maintenance are
described in the ISO/IEC Directives, Part 1. In particular, the different approval criteria needed for the
different types of ISO document should be noted. This document was drafted in accordance with the
editorial rules of the ISO/IEC Directives, Part 2 (see www.iso.org/directives).
ISO draws attention to the possibility that the implementation of this document may involve the use of
(a) patent(s). ISO takes no position concerning the evidence, validity or applicability of any claimed
patent rights in respect thereof. As of the date of publication of this document, ISO had not received notice
of (a) patent(s) which may be required to implement this document. However, implementers are
cautioned that this may not represent the latest information, which may be obtained from the patent
database available at www.iso.org/patents. ISO shall not be held responsible for identifying any or all
such patent rights.
Any trade name used in this document is information given for the convenience of users and does not
constitute an endorsement.
For an explanation of the voluntary nature of standards, the meaning of ISO specific terms and
expressions related to conformity assessment, as well as information about ISO's adherence to the World
Trade Organization (WTO) principles in the Technical Barriers to Trade (TBT), see
www.iso.org/iso/foreword.html.
This document was prepared by Technical Committee ISO/TC 211, Geographic information/Geomatics, in
collaboration with the European Committee for Standardization (CEN) Technical Committee CEN/TC 287,
Geographic Information, in accordance with the Agreement on technical cooperation between ISO and
CEN (Vienna Agreement), in collaboration with the Open Geospatial Consortium (OGC), and in
collaboration with the IEEE GRSS Earth Science Informatics Technical Committee.
A list of all parts in the ISO 19123 series can be found on the ISO website.
Any feedback or questions on this document should be directed to the user’s national standards body. A
complete listing of these bodies can be found at www.iso.org/members.html.
ISO/FDIS 19123-3:2023(E)
Introduction
This document defines, at a high level, implementation-independent operations on coverages, i.e. digital
representations of space-time varying geographic phenomena, as defined in ISO 19123-1. Specifically,
regular and irregular grid coverages are addressed. The operations can be applied through an expression
language allowing composition of unlimited complexity and combining an unlimited number of coverages
for data fusion.
The language is functionally defined and free of any side effects. Its conceptual foundation relies on only
two constructs: A “coverage constructor” builds a coverage, either from scratch or by deriving it from one
or more other coverages. A “coverage condenser” derives summary information from a coverage by
performing an aggregation such as count, sum, minimum, maximum and average.
The coverage processing language is independent from any request and response encoding, as no
concrete request/response protocol is assumed. Hence, this document does not define a concrete service,
but acts as the foundation for defining service standards functionality. One such standardization target is
[3]
the OGC Web Coverage Service (WCS).
Throughout this document, the following formatting conventions apply.
— Bold-Face in the text, such as processCoveragesExpr, represents syntax elements, normatively
defined in Annex B.
— Text in italics, such as succ(), represents mathematical functions and variables.
— Courier font, such as return and encode(), is used for code in the sense of the coverage processing
language.
vi © ISO 2023 – All rights reserved
FINAL DRAFT INTERNATIONAL STANDARD ISO/FDIS 19123-3:2023(E)
Geographic information — Schema for coverage geometry
and functions —
Part 3:
Processing fundamentals
1 Scope
This document defines a coverage processing language for server-side extraction, filtering, processing,
analytics, and fusion of multi-dimensional geospatial coverages representing, for example, spatio-
temporal sensor, image, simulation, or statistics datacubes. Services implementing this language provide
access to original or derived sets of coverage information, in forms that are useful for client-side
consumption.
This document relies on the ISO 19123-1 abstract coverage model. In this edition, regular and irregular
multi-dimensional grids are supported for axes that can carry spatial, temporal or any other semantics.
Future editions will additionally support further axis types as well as further coverage types from ISO
19123-1, specifically, point clouds and meshes.
2 Normative references
The following documents are referred to in the text in such a way that some or all of their content
constitutes requirements of this document. For dated references, only the edition cited applies. For
undated references, the latest edition of the referenced document (including any amendments) applies.
ISO 19111, Geographic information — Referencing by coordinates
ISO 19123-1, Geographic information — Schema for coverage geometry and functions — Part 1:
Fundamentals
3 Terms and definitions
For the purposes of this document, the terms and definitions given in ISO 19123-1 and the following apply.
ISO and IEC maintain terminology databases for use in standardization at the following addresses:
— ISO Online browsing platform: available at https://www.iso.org/obp
— IEC Electropedia: available at https://www.electropedia.org/
3.1
probing function
function extracting information from the coverage
ISO/FDIS 19123-3:2023(E)
4 Conformance
4.1 Notation
Table 1 lists the other International Standards and packages in which UML classes used in this document
have been defined.
Table 1 — Sources of externally defined UML classes
Prefix International Package
Standard
ISO 19123-1 Coverage Core,
Grid Coverage
4.2 Interoperability and conformance testing
As an abstract standard, this document allows for multiple different implementations and does not define
a standardized interoperable implementation. Rather, standardization targets are specifications of
coverage operations and services which may use this language to describe the semantics of their
operations.
Conformance testing shall be accomplished by validating a candidate concretization against all
requirements by exercising the tests set out in Annex A. As a prerequisite, a candidate shall also pass all
conformance tests of ISO 19123-1 Coverage Core and Grid Coverage.
4.3 Organization
Table 2 provides details of the conformance classes described in this document. The name and contact
information of the maintenance agency for this document can be found at
www.iso.org/maintenance_agencies.
Table 2 — Conformance classes
Conformance class Clause Identifying URL
Coverage Processing 6 https://standards.isotc211.org/19123/-3/1/conf/coverage-processing
5 Coverage model
5.1 Overview
This document defines a language whose expressions accept any number of input coverages (together
with further common inputs like numbers and strings) to generate any number of output coverages or
non-coverage results. Coverages are defined in ISO 19123-1.
5.2 Coverage model
Following the mathematical notion of a function that maps elements of a domain (such as spatio-temporal
coordinates) to a range (such as values of a “pixel”, “voxel”, etc.), a coverage consists of (Figure 1):
— an identifier which uniquely identifies a coverage in some context (here, the context of an
expression);
2 © ISO 2023 – All rights reserved
ISO/FDIS 19123-3:2023(E)
— a domain of coordinate points (expressed in a common Coordinate Reference System, CRS): “where
in the multi-dimensional space can I find values?”;
— a probing function which answers for each coverage coordinate in the domain (“direct position”):
“what is the value here?”;
— a range type: “what do those values mean?”.
Figure 1 — Coverage and GridCoverage (ISO 19123-1)
NOTE 1 Coverage in ISO 19123-1 defines an interface which describes such an object’s behaviour, but does not yet
assume any particular data structure. One interoperable concretization of it is the implementation standard
ISO 19123-2.
"Probing functions” are introduced below. Probing functions extract components from a given coverage.
For every component of a coverage a corresponding probing function exists so that altogether all
properties of a coverage can be retrieved. They serve to define this document’s language semantics.
NOTE 2 In the processing definition of this document, further probing functions, beyond the ISO 19123-1
probing function evaluate(), are used as a concise means to describe all aspects of coverage-valued function results.
5.3 Coverage identifier
Coverages in this document have an identifier which is used in a query to address a coverage to derive
from. Therefore, it is necessary for this identifier to be unique within some context (here: a query). No
assumptions are made on the realization of this identifier. In particular, when the context of the coverage
object changes (such as during delivery to a client) uniqueness is not necessarily guaranteed any longer.
Therefore querying the object in the new context is potentially no longer possible.
NOTE In a concrete service, coverages available would typically be those which are stored on this server, where
access control allows addressing the coverage according to the user sending the request, etc. All these aspects are
out of scope of this document.
ISO/FDIS 19123-3:2023(E)
The corresponding probing function for a coverage C is:
id( C )
5.4 Domain
5.4.1 Direct position
A coverage offers values for positions in its domain. These are called “direct positions”. Further values
can be derived through interpolation, depending on whether and what type of interpolation a coverage
allows.
For some direct position p = (p1,…,pd) from a domain whose d-dimensional CRS contains axes (a1,…,ad),
p[a ] is written for accessing the coordinate tuple component corresponding with axis a :
i i
p[a ] = p
i i
5.4.2 Grid
The domain contains the coordinate tuples describing the coverage’s direct positions, which for the
purpose of this document are on a multi-dimensional grid. Informally, this means that every direct
position inside the grid has exactly one next neighbour in both directions of every axis, except for the rim,
where obviously fewer neighbours are available. Figure 2 shows some regular and irregular grid
examples.
Figure 2 — Sample regular and irregular grid structures (ISO 19123-1)
The grid description depends on the complexity of the grid. As a grid is composed from an ordered
sequence of axes, the resulting complexity is determined by the types of axes (such as integer versus
Latitude versus time) as well as the rules determining the direct positions along these axes. The following
axis types defined in ISO 19123-1 are currently supported by this document:
— a Cartesian (“index”) axis, which just requires lower and upper bound (which are of type integer);
— a regular axis, which can be described by lower and upper bounds together with a constant
distance, the resolution;
— an irregular axis, which has individual distances, described by a sequence of coordinates.
As per ISO 19123-1, the coverage domain with its axes has a single CRS which can serve for geo-
referencing. The definition and interpretation of CRSs is in accordance with ISO 19111.
The CRS of a domain is obtained through function crs(C).
crs(C)
4 © ISO 2023 – All rights reserved
ISO/FDIS 19123-3:2023(E)
Auxiliary probing function axisList()extracts the ordered list of axes (a ,…,a ) from a d-dimensional CRS:
1 d
axisList( crs )
NOTE In accordance with ISO 19123-1, all axis names in such a list are pairwise disjoint so that the names can
act as a unique identifier within their CRS.
Each axis contributes coordinates from a nonempty, totally ordered set of values which can be numeric
or, in the general case, strings (such as “2020-08-05T”).
For a given coverage C, probing function domain() delivers the coverage domain in its CRS:
domain( C )
The domain information describes the coverage’s grid and its extent for each axis:
— the lower and upper bound of the direct positions;
— additionally, the following information:
— for index axes: nothing further;
— for regular axes: the resolution, expressed in the unit of measure (uom) of the axis;
— for irregular axes: the sequence of points.
This information is accessible through extended variants of the abovementioned functions. For some
coverage domain D with axis a, the following expressions return lower and upper bounds, respectively:
domain( C, a ).lo
domain( C, a ).hi
For convenience, a function pair identical in effect but based on the domain is defined:
D[a].lo = domain( C, a ).lo
D[a].hi = domain( C, a ).hi
The grid of the coverage domain is represented implicitly through functions “walking” the grid from one
direct position to one of its neighbours. This is based on the topological structure of a grid where each
direct position has exactly one lower and one higher neighbour along each axis, with the exception of the
domain rims where no such neighbour is available. Therefore, at the rim, these functions are partial.
Let D be given as the domain of coverage C, so that D = domain(C). Let further a be some axis from the
CRS of D. Then, functions pred() and succ() each return a neighbouring direct position for some given
position. Function pred() returns the immediate preceding direct position along axis a, function succ()
returns the immediate succeeding direct position along a. Where there is no such direct position (because
the input position is sitting at the rim of the domain extent) the value is undefined, written as ⊥.
pred( D, a, p ) = x where
if p[a] = D[a].lo domain(C,a).lo then x = ⊥
else x is given by: x[a ] = p[a ] for all a ∈ domain( C ) \ {a}, and x[a] = max( x’ | x’ ∈ domain( C, a )
x x x
and x’ < p[a] )
succ( D, a, p ) = x where
if p[a] = D[a].hi domain(C,a).hi then x = ⊥
ISO/FDIS 19123-3:2023(E)
else x is given by: x[a ] = p[a ] for all a ∈ domain( C ) \ {a}, and x[a] = min( x’ | x’ ∈ domain( C, a )
x x x
and x’ > p[a] )
EXAMPLE In Figure 3, neighbours of p in coverage domain D with axes x and y can be reached as follows:
a = succ( D, y, pred( D, x, p ) ) = pred( D, x, succ( D, y, p ) )
b = succ( D, y, p )
c = succ( D, y, succ( D, x, p ) ) = succ( D, x, succ( D, y, p ) )
d = pred( D, x, p )
e = succ( D, x, p )
f = pred( D, x, pred( D, y, p ) ) = pred( D, y, pred( D, x, p ) )
g = pred( D, y, p )
h = succ( D, x, pred( D, y, p ) ) = pred( D, y, succ( D, x, p ) )
In this document, for the user’s convenience, basic arithmetic functions are assumed on this grid navigation:
Figure 3 — Sample grid neighbourhood
5.5 Interpolation
In ISO 19123-1 a coverage contains an indication on possible interpolation between direct positions. Such
interpolation can be set for all axes in a coverages simultaneously or, following a more fine-grain
approach, individually per axis.
NOTE 1 In ISO 19123-1 every coverage has exactly one associated interpolation method (for all axes or per axis).
In practice, coverages can allow users to pick one of several interpolation methods, such as with imagery where
linear, quadratic and cubic interpolation are applicable on principle, and users can choose any one of those.
Conceptually, however, two coverages differing only in the interpolation methods are distinct as they will deliver
identical range values on their direct positions, but differing values inbetween those. At the abstract level of
ISO 19123-1 and ISO 19123-3, this ambiguity is not desirable.
For the purpose of this document a special interpolation method none is assumed as defined, for example,
in ISO 19123-1:2023, Annex B. None indicates that no interpolation is possible along the axis under
consideration.
NOTE 2 The interpolation method none is different from nearest-neighbor: An interpolation of nearest-
neighbor provides values inbetween direct positions which are derived from the closest direct position.
Interpolation none means that no values are provided between direct positions. In other words: the evaluation
function is undefined on any non-direct position and will in practice result in an exception.
Function interpolation(C,a) returns the interpolation method applicable on each axis of coverage C, in
order of the CRS axis sequence. For dimension(C)=d the probing function delivers interpolation method
list (m ,…,m ) with interpolation method m applying to axis number i:
1 d i
6 © ISO 2023 – All rights reserved
ISO/FDIS 19123-3:2023(E)
interpolation(C)
This function is overloaded to extract the interpolation method associated with axis a of C:
interpolation(C, a)
NOTE 3 Interpolation is particularly relevant with functions scale() and project().
5.6 Range values
The range value at a direct position p can be obtained with function evaluate (p) which, for a given
C
coverage C, returns the value associated with p∈domain(C) expressed in the coverage’s CRS.
The corresponding probing function is:
value( C, p ) = evaluate ( p ) for some direct position p∈domain( C )
C
Interpolation guides whether the value() function is defined on coordinates outside the set of direct
positions, and how this value is determined from the values available at the direct positions.
NOTE The range value set can contain one or more null values, as determined by the range type. This document
does not make any assumption on this.
5.7 Range type
A coverage’s range type description can be obtained through probing function rangeType() which
delivers a set of tuples containing at least field names and field type:
rangeType( C )
This function gets overloaded to obtain the coverage range type of a particular range field component f:
rangeType( C, f )
For the purpose of this document, only the common programming language data types are considered,
and only on a high, abstract level. These are Boolean, integer, float and complex, as well as records over
those assumed to be available. However, an implementation specification based on this document may
add its own data types as long as these are coherent with this document overall.
NOTE The concrete range types available in coverage processing are determined by concretizations of this
document. Typically, the standard programming language data types will be available, such as (unsigned) short, int,
and long, as well as float and double. For example, the range type (aka pixel) of an 8-bit RGB image normally is given
by the triple < red: unsigned char; green: unsigned char; blue: unsigned char>. Further, a concretization can add
more information such as null values, accuracy, etc.
5.8 Coverage probing functions synopsis
Requirement 1 https://standards.isotc211.org/19123/-3/1/req/core/probingFunctions
The semantics of the probing functions used for the ISO 19123-1 language semantics definition shall be
given by Table 3.
Table 3 —Coverage probing functions synopsis
ISO/FDIS 19123-3:2023(E)
Coverage Probing function Comment
characteristic for a coverage C,
based on ISO 19123-1
Coverage identifier id( C ) Identifier of the coverage.
Coverage CRS crs( C ) CRS of the coverage.
= crs ( domain( C ) )
as per ISO 19123-1
CRS axis list List of all axis names of the CRS, in
axisList( c )
proper sequence.
= (a ,…,a ) for some d-dimensional CRS c
1 d
establishing this axis sequence
Domain extent of domain( C ) Extent of the coverage in CRS
coverage coordinates.
domain( C, a )
= domain extent along axis a
domain( C, a ).lo
= lower bound of domain extent along axis
a
domain( C, a ).hi
= upper bound of domain extent along axis
a
Grid neighbour pred( C, a, p ) These functions allow to traverse a grid
in steps relative to some given position,
succ( C, a, p )
such as for convolution operations and,
generally, Tomlin’s non-local
as defined in 5.4.2
operations.
Range type rangeType( C ) The range type record is described by a
list describing its components in
rangeType( C, f )
sequence; for the purpose of this
= t where (f:t,.) ∈rangeType( C )
document only component name and its
data type are considered.
Range field name list rangeFieldNames( C ) Ordered list of all the coverage’s range
fields names and their data types;
= (f1, …, fn) where
possible further constituents in a record
rangeType( C) = ( (f ;t ,…), …, (f :t ,…) ),
1 1 n n
component are ignored in this
with field names f and types t
i i
document, their values are to be defined
elsewhere (e.g. implementation
dependent).
Range values value(C,p) Range values of the coverage at a direct
position (or some position inbetween,
= evaluate (p),p∈domain(C)
C
interpolation permitting).
with evaluate() as per 19123-1
8 © ISO 2023 – All rights reserved
ISO/FDIS 19123-3:2023(E)
Coverage Probing function Comment
characteristic for a coverage C,
based on ISO 19123-1
Interpolation interpolation( C ) List of the interpolation method allowed
as per ISO 19123-1 per axis, in axis order; in case the
coverage has only one interpolation
interpolation( C, a )
defined for all axes, this method is
= interpolation method of axis a
multiplied into all positions of the
output list.
Interpolation associated with a
particular axis.
6 Coverage processing language
This clause establishes the conformance class Coverage Processing.
This coverage processing language defines expressions on coverages which evaluate to ordered lists of
either coverages or scalars (whereby “scalar” here is used as a summary term of all data structures that
are not coverages). In the remainder of this document, the terms processing expression and query are used
interchangeably.
A coverage processing expression consists of a processCoveragesExpr (see 6.2). Each International
Standard claiming to support this document shall provide the coverage processing operations as
specified in the following subclauses. A sample application is provided in Annex D.
NOTE 1 This language has been designed to be “safe in evaluation”, i.e. implementations are possible where any
valid request can be evaluated in a finite number of steps, based on the operation primitives. Hence, services based
on the language constructs can be built in a way that no single request can render the service permanently
unavailable. This notwithstanding, it still is possible to send requests that will impose high workload on a server.
NOTE 2 Data items within a query result list can be heterogeneous in size and structure. In particular, the
coverages within an evaluation result list can have different dimensions, domains, range types, etc. However, a
result list always consists of either coverages or scalar values, not a mix of both.
6.1 Syntax and Semantics Definition Style
6.1.1 Expression Syntax
The language primitives plus the nesting capabilities form an expression language which is independent
from any specific encoding and service protocol. Collectively it is referred to as the coverage processing
language. In the following subclauses, the language elements are detailed. The complete syntax is listed
in Annex B.
A coverage processing expression is called admissible if and only if it adheres to the syntax of the
language definition of this document.
Requirement 2 https://standards.isotc211.org/19123/-3/1/req/core/syntax
Coverage processing expressions shall adhere to the syntax definition of Annex B.
NOTE A railroad diagram of the syntax in Annex B is provided in Annex C for visualization of the grammar.
EXAMPLE The coverage expression fragment $c * 2is admissible as it adheres to language syntax whereas
abc seen as a coverage expression violates the syntax and, hence, is not admissible.
ISO/FDIS 19123-3:2023(E)
6.1.2 Expression Semantics
The semantics of a coverage processing expression is defined recursively by indicating, for all admissible
expressions, the semantics. An expression is valid if and only if it is admissible and complies with all rules
imposed by the language semantics.
Requirement 3 https://standards.isotc211.org/19123/-3/1/req/core/semantics
Coverage processing expressions shall adhere to all semantics rules of this document.
EXAMPLE The following coverage expression is valid if and only if the coverage bound to variable $c has a
numeric range component named red.
$c.red * 2.5
NOTE In the remainder of this clause, tables are used to describe the effect of an operation on each coverage
constituent.
The semantics of coverage processing expressions is defined via so-called probing functions which extract
information from a coverage.
6.2 Coverage Processing Expressions
6.2.1 processCoveragesExpr
A processCoveragesExpr element processes a list of coverages in turn. Each coverage is optionally
checked first for fulfilling some predicate, and gets selected, i.e. contributes to an element of the result
list, only if the predicate evaluates to true. Each coverage selected will be processed, and the result will
be appended to the result list. This result list, finally, is returned as the ProcessCoverages response unless
any exception was generated.
Requirement 4 https://standards.isotc211.org/19123/-3/1/req/core/processCoveragesExpr
A processCoveragesExpr shall be defined as follows.
Let
v , … v be n pairwise different iteratorVars (n≥1),
1 n
L , … L be n coverageLists (n≥1),
1 n
b be a booleanScalarExpr possibly containing occurrences of one or more v (1≤i≤n),
i
P be a processingExpr possibly containing occurrences of v (1≤i≤n).
i
Then,
m,n≥1 be natural numbers,
v , … c , be n iteratorVars,
1 n
c , … c , be n pairwise different variableNames,
1 m
e , … e , be n+m optional coverageExprs or scalarExprs or bracket-enclosed intervalExprs,
1 m
which may contain occurrences of v , … c and c , … c ,
1 n 1 m
c be a coverageExpr or scalarExpr,
where everyc is defined before used in an expression.
i
Then,
for any processCoveragesExpr E
where
E = for v in ( L ),
1 1
10 © ISO 2023 – All rights reserved
ISO/FDIS 19123-3:2023(E)
v in ( L ),
2 2
… ,
v in ( L )
n n
[ letc := e , …, c := e ]
1 1 m m
[ where b ]
return P
the result R of evaluating processCoveragesExpr E is constructed as:
Let R be the empty sequence;
while L is not empty:
{ assign the first element in L to iteration variable v ;
1 1
while L is not empty:
{ assign the first element in L to iteration variable v ;
2 2
…
while L is not empty:
n
{ assign the first element in L to iteration variable v ;
n n
substitute every occurrence of c in E by e ;
i i
substitute every occurrence of v in E
i
by the corresponding coverage;
evaluate b;
if (b)
then
evaluate P;
append evaluation result to R;
remove the first element from L ;
n
}
…
}
remove the first element from L ;
}
remove the first element from L ;
}
The elements contained in the coverageList clause, constituting coverage identifiers, are taken from the
coverage identifiers advertised by the server.
NOTE 1 Coverage identifiers can occur more than once in a coverageList. In this case the coverage will be
evaluated each time it appears, respecting the overall inspection sequence.
EXAMPLE 1 Assume availability of coverages A, B and C. Then, the following request:
for $c in ( A, B, C )
return encode( $c, "image/tiff" )
will produce a result list containing three TIFF-encoded coverages.
Assume availabilityof satellite images A, B, and C and a coverage M acting as a mask (i.e. with range values of
0 and 1 and the same extent as A, B, and C). Then, masking each satellite image can be performed with this
query:
for $s in ( A, B, C ),
$m in ( M )
return encode( $s * $m, "image/tiff" )
The let clause declares a named constant and gives it a value.
ISO/FDIS 19123-3:2023(E)
EXAMPLE 2 The following statement defines a constant of name $timeAxis with value “date”.
let $timeAxis := "date"
NOTE 2 In most cases, named constants are used purely for convenience, to simplify the expressions and make
the code more readable.
In a let clause the named constant only takes one value. This can be a single item or a sequence (there
is no real distinction; an item is just a sequence of length one), and the sequence can contain nodes, or
atomic values, or a mixture of the two.
Named constants cannot be updated. For example, something like let $x:=$x+1 is not allowed. More
specifically, it will not lead to an evaluation error, but the result will not be as expected (see literature on
XPath). This rule can seem very strange if expecting a behaviour as in procedural languages such as
JavaScript or python. But the coverage processing language is not that kind of language. It is a declarative
language which works at a higher level. This constraint is essential to give optimizers the chance to find
execution strategies that can search vast databases in fractions of a second. SQL, XSLT and XQuery users
have found that this declarative style of programming enables to code at a higher level by telling the
system what results are wanted, rather than telling it how to go about constructing those results.
6.2.2 processingExpr
Requirement 5 https://standards.isotc211.org/19123/-3/1/req/core/processingExpr
A processingExpr element shall be either an encodeCoverageExpr (see 6.8.1) or a scalarExpr (see
6.4.1).
6.2.3 coverageExpr
Requirement 6 https://standards.isotc211.org/19123/-3/1/req/core/coverageExpr
A coverageExpr shall be either a coverageIdExpr (see 6.2.4) or a coverageConstructorExpr (see
6.3.1) or a coverageConstantExpr (see 6.3.1) or a getComponentExpr (see 6.4.1) or an inducedExpr
(see 6.5.1) or a subsetExpr (see 6.5.6.1) or a crsTransformExpr (see 6.6) or a scaleExpr (see 6.5.7) or
a decodeCoverageExpr (see 6.8.2).
NOTE A coverageExpr always evaluates to a single coverage.
6.2.4 coverageIdExpr
The coverageIdExpr element represents the name of a single coverage available. It is represented by a
coverage variable indicated in the processCoveragesExpr clause (see 6.2).
Requirement 7 https://standards.isotc211.org/19123/-3/1/req/core/coverageIdentifier
A coverageIdExpr shall be defined as follows.
Let
id be a variableName bound to a coverage C available.
Then,
for any coverageExpr C ,
where
C = id
C is defined as:
12 © ISO 2023 – All rights reserved
ISO/FDIS 19123-3:2023(E)
Coverage constituent
id(C ) = id(C )
2 1
crs(C ) = crs(C )
2 1
domain(C ) =
...
NORME ISO
INTERNATIONALE 19123-3
Première édition
2023-06
Information géographique — Schéma
de la géométrie et des fonctions de
couverture —
Partie 3:
Principes de base du traitement
Geographic information — Schema for coverage geometry and
functions —
Part 3: Processing fundamentals
Numéro de référence
DOCUMENT PROTÉGÉ PAR COPYRIGHT
© ISO 2023
Tous droits réservés. Sauf prescription différente ou nécessité dans le contexte de sa mise en œuvre, aucune partie de cette
publication ne peut être reproduite ni utilisée sous quelque forme que ce soit et par aucun procédé, électronique ou mécanique,
y compris la photocopie, ou la diffusion sur l’internet ou sur un intranet, sans autorisation écrite préalable. Une autorisation peut
être demandée à l’ISO à l’adresse ci-après ou au comité membre de l’ISO dans le pays du demandeur.
ISO copyright office
Case postale 401 • Ch. de Blandonnet 8
CH-1214 Vernier, Genève
Tél.: +41 22 749 01 11
E-mail: copyright@iso.org
Web: www.iso.org
Publié en Suisse
ii
ISO/FDIS 19123-3:2023(F)
Sommaire Page
Avant-propos . v
Introduction. vi
1 Domaine d'application . 1
2 Références normatives . 1
3 Termes et définitions . 1
4 Conformité . 2
4.1 Notation . 2
4.2 Interopérabilité et tests de conformité . 2
4.3 Organisme . 2
5 Modèle de couverture . 2
5.1 Vue d'ensemble . 2
5.2 Modèle de couverture . 3
5.3 Identifiant de couverture . 4
5.4 Domaine . 4
5.5 Interpolation . 8
5.6 Valeurs de plage . 8
5.7 Type de plage . 9
5.8 Synopsis des fonctions de sondage de couverture . 9
6 Langage de traitement de couverture . 11
6.1 Style de définition de la syntaxe et de la sémantique . 11
6.2 Expressions de traitement de couverture . 12
6.3 Expressions de génération de couverture . 15
6.4 Expressions d'extraction de couverture . 21
6.5 Expressions modifiant la valeur de plage de couverture . 23
6.6 Expressions de dérivation de couverture. 41
6.7 Expressions d'agrégation de couverture . 42
6.8 Expressions de codage/décodage de couverture . 47
6.9 Évaluation de l'expression . 48
6.10 Réponse de l'évaluation . 50
Annexe A (normative) Tests de conformité . 52
A.1 Classe de conformité . 52
A.2 Classe de conformité Coverage Processing Core . 52
Annexe B (normative) Syntaxe d’expression. 53
B.1 Vue d’ensemble . 53
B.2 Symboles terminaux . 54
B.3 Syntaxe de traitement . 55
Annexe C (informative) Diagrammes syntaxiques . 62
Annexe D (informative) Exemples de description de services . 79
D.1 Vue d’ensemble . 79
D.2 WCS-Core . 79
D.3 WCS-Range-Subsetting . 79
ISO/FDIS 19123-3:2023(F)
D.4 WCS-Scaling . 80
D.5 WCS-CRS . 80
D.6 WCS-Processing . 81
Bibliographie . 82
iv © ISO 2023 – Tous droits réservés
ISO/FDIS 19123-3:2023(F)
Avant-propos
L'ISO (Organisation internationale de normalisation) est une fédération mondiale d'organismes
nationaux de normalisation (comités membres de l'ISO). L'élaboration des Normes internationales est en
général confiée aux comités techniques de l'ISO. Chaque comité membre intéressé par une étude a le droit
de faire partie du comité technique créé à cet effet. Les organisations internationales, gouvernementales
et non gouvernementales, en liaison avec l'ISO participent également aux travaux. L'ISO collabore
étroitement avec la Commission électrotechnique internationale (IEC) en ce qui concerne la
normalisation électrotechnique.
Les procédures utilisées pour élaborer le présent document et celles destinées à sa mise à jour sont
décrites dans les Directives ISO/IEC, Partie 1. Il convient, en particulier, de prendre note des différents
critères d'approbation requis pour les différents types de documents ISO. Le présent document a été
rédigé conformément aux règles de rédaction données dans les Directives ISO/IEC, Partie 2 (voir
www.iso.org/directives).
L’ISO attire l’attention sur le fait que la mise en application du présent document peut entraîner
l’utilisation d’un ou de plusieurs brevets. L’ISO ne prend pas position quant à la preuve, à la validité et à
l’applicabilité de tout droit de brevet revendiqué à cet égard. À la date de publication du présent
document, l’ISO n'avait pas reçu notification qu’un ou plusieurs brevets pouvaient être nécessaires à sa
mise en application. Toutefois, il y a lieu d’avertir les responsables de la mise en application du présent
document que des informations plus récentes sont susceptibles de figurer dans la base de données de
brevets, disponible à l'adresse www.iso.org/brevets. L’ISO ne saurait être tenue pour responsable de ne
pas avoir identifié tout ou partie de tels droits de propriété.
Les appellations commerciales éventuellement mentionnées dans le présent document sont données
pour information, par souci de commodité, à l’intention des utilisateurs et ne sauraient constituer un
engagement.
Pour une explication de la nature volontaire des normes, la signification des termes et expressions
spécifiques de l'ISO liés à l'évaluation de la conformité, ou pour toute information au sujet de l'adhésion
de l'ISO aux principes de l’Organisation mondiale du commerce (OMC) concernant les obstacles
techniques au commerce (OTC), voir www.iso.org/avant-propos.
Le présent document a été élaboré par le comité technique ISO/TC 211, Information
géographique/Géomatique, en collaboration avec le comité technique CEN/TC 287, Information
geographique, du Comité européen de normalisation (CEN) conformément à l’Accord de coopération
technique entre l’ISO et le CEN (Accord de Vienne), en collaboration avec l'Open Geospatial Consortium
(OGC), et en collaboration avec l'IEEE GRSS Earth Science Informatics Technical Committee (IEEE GRSS
ESI TC).
Une liste de toutes les parties de la série ISO 19123 se trouve sur le site web de l’ISO.
Il convient que l’utilisateur adresse tout retour d’information ou toute question concernant le présent
document à l’organisme national de normalisation de son pays. Une liste exhaustive desdits organismes
se trouve à l’adresse www.iso.org/fr/members.html.
ISO/FDIS 19123-3:2023(F)
Introduction
Le présent document définit, à un niveau élevé, les opérations sur les couvertures indépendantes de la
mise en œuvre – c'est-à-dire les représentations numériques de phénomènes géographiques variant dans
l'espace et le temps – telles que définies dans l'ISO 19123-1. Plus spécifiquement, les couvertures en
grilles régulières et irrégulières sont abordées. Les opérations peuvent être appliquées par le biais d'un
langage d'expression permettant une composition d'une complexité illimitée et combinant un nombre
illimité de couvertures pour la fusion de données.
Le langage est défini de manière fonctionnelle et sans effet secondaire. La base conceptuelle du langage
est établie selon deux constructions: un « constructeur de couverture » construit une couverture, soit à
partir de zéro, soit en la déterminant à partir d'une ou de plusieurs autres couvertures; un « condenseur
de couverture » dérive les informations récapitulatives d’une couverture au moyen d’une agrégation tel
qu'un comptage, une somme, un minimum, un maximum et une moyenne.
Le langage de traitement de couverture est indépendant de tout codage de requête et de réponse, car il
ne suppose aucun protocole concret de requête/réponse. Par conséquent, le présent document ne définit
pas un service concret, mais sert de base pour définir la fonctionnalité des normes de service. Le Web
[3]
Coverage Service (WCS) de l'OGC est l'une des cibles de cette normalisation.
Les conventions de formatage suivantes s’appliquent dans tout le présent document.
— Les textes en caractère gras, par exemple processCoveragesExpr, représentent les éléments de
syntaxe dont la définition normative est donnée à l’Annexe B.
— Les textes en italiques, par exemple succ(), représentent les fonctions mathématiques et les variables.
— La police Courier, par exemple return et encode(), est utilisée pour le code, c’est-à-dire pour le
langage de traitement de couverture.
vi © ISO 2023 – Tous droits réservés
PROJET FINAL DE NORME INTERNATIONALE ISO/FDIS 19123-3:2023(F)
Information géographique — Schéma de la géométrie et
des fonctions de couverture —
Partie 3:
Principes de base du traitement
1 Domaine d'application
Le présent document définit un langage de traitement de couverture pour l'extraction, le filtrage, le
traitement, l'analyse et la fusion côté serveur de couvertures géospatiales multidimensionnelles
représentant, par exemple, des cubes de données spatio-temporelles de capteurs, d'images, de
simulations ou de statistiques. Les services mettant en œuvre ce langage permettent d'accéder à des
ensembles originaux ou dérivés d'informations de couverture, sous des formes utiles pour la
consommation côté client.
Le présent document s'appuie sur le modèle de couverture abstrait de l'ISO 19123-1. Dans le présent
document, les grilles multidimensionnelles régulières et irrégulières sont prises en charge pour des axes
qui peuvent avoir une sémantique spatiale, temporelle ou autre. Les éditions suivantes incluront aussi
d’autres types d’axes et d’autres types de couvertures provenant de l’ISO 19123-1, spécifiquement, les
nuages de points et les maillages.
2 Références normatives
Les documents suivants sont cités dans le texte de sorte qu’ils constituent, pour tout ou partie de leur
contenu, des exigences du présent document. Pour les références datées, seule l’édition citée s’applique.
Pour les références non datées, la dernière édition du document de référence s'applique (y compris les
éventuels amendements).
ISO 19111, Information géographique — Système de références par coordonnées
ISO 19123-1, Information géographique — Schéma de la géométrie et des fonctions de couverture —
Partie 1: Principes de base
3 Termes et définitions
Pour les besoins du présent document, les termes et les définitions de l'ISO 19123-1 ainsi que les suivants
s’appliquent.
L’ISO et l’IEC tiennent à jour des bases de données terminologiques destinées à être utilisées en
normalisation, consultables aux adresses suivantes:
— ISO Online browsing platform: disponible à l’adresse https://www.iso.org/obp
— IEC Electropedia: disponible à l’adresse https://www.electropedia.org/
ISO/FDIS 19123-3:2023(F)
3.1
fonction de sondage
fonction d'extraction d'informations de la couverture
4 Conformité
4.1 Notation
Le Tableau 1 répertorie les autres Normes internationales et « packages » dans lesquels les classes UML
utilisées dans le présent document ont été définies.
Tableau 1 — Sources des classes UML définies extérieurement
Préfixe Norme « Package »
internationale
ISO 19123-1 Coverage Core,
Grid Coverage
4.2 Interopérabilité et tests de conformité
En tant que norme abstraite, le présent document autorise de multiples mises en œuvre différentes et ne
définit pas une mise en œuvre interopérable normalisée. La normalisation vise plutôt les spécifications
des opérations de couverture et des services qui peuvent utiliser ce langage afin de décrire la sémantique
de leurs opérations.
Les tests de conformité doivent être réalisés en validant une application concrète candidate par rapport
à toutes les exigences en effectuant les tests définis à l'Annexe A. Au préalable, une candidate doit réussir
aussi tous les tests de conformité de l’ISO 19123-1, « Coverage Core » et « Grid Coverage ».
4.3 Organisme
Le Tableau 1 fournit les détails des classes de conformité décrites dans le présent document. Le nom et
les coordonnées de l'autorité de maintenance responsable du présent document se trouvent à l'adresse
www.iso.org/maintenance_agencies.
Tableau 2 — Classes de conformité
Classe de Article URL d'identification
conformité
Coverage Processing 6 https://standards.isotc211.org/19123/-3/1/conf/coverage-processing
5 Modèle de couverture
5.1 Vue d'ensemble
Le présent document définit un langage dont les expressions acceptent n'importe quel nombre de
couvertures en entrée (ainsi que d'autres entrées courantes comme des nombres et des chaînes) afin de
générer un nombre quelconque de résultats de couvertures ou de non-couverture en sortie. Les
couvertures sont définies dans l'ISO 19123-1.
2 © ISO 2023 – Tous droits réservés
ISO/FDIS 19123-3:2023(F)
5.2 Modèle de couverture
Suivant la notion mathématique d'une fonction qui met en correspondance les éléments d'un domaine
(comme des coordonnées spatio-temporelles) avec une plage (comme des valeurs de « pixel », « voxel »,
etc.), une couverture est constituée des éléments suivants (Figure 1):
— un identifiant qui identifie de façon unique une couverture dans un certain contexte (ici: le contexte
d'une expression);
— un domaine de points de coordonnées (exprimés dans un système de référence de coordonnées
commun, SRC): « où puis-je trouver des valeurs dans l'espace multidimensionnel ? »;
— une fonction de sondage qui répond pour chaque coordonnée de couverture dans le domaine
(« position directe ») à la question: « quelle est la valeur ici ? »;
— un type de plage: « que signifient ces valeurs ? ».
Figure 1 — Coverage et GridCoverage (ISO 19123-1)
NOTE 1 « Coverage » dans l'ISO 19123-1 définit une interface qui décrit le comportement d'un tel objet, mais ne
suppose pas encore de structure de données particulière. La norme de mise en œuvre ISO 19123-2 en est une
application concrète interopérable.
ISO/FDIS 19123-3:2023(F)
Les « fonctions de sondage » sont introduites ci-dessous. Les fonctions de sondage permettent d'extraire
des composants d'une couverture donnée. Pour chaque composant d’une couverture, il existe une
fonction de sondage correspondante permettant de récupérer ensemble toutes les propriétés d’une
couverture. Elles servent à définir la sémantique du langage de ce document.
NOTE 2 Dans la définition du traitement du présent document, d’autres fonctions de sondage, qui dépassent la
fonction de sondage evaluate() de l’ISO 19123-1, sont utilisées pour décrire de manière concise tous les aspects des
résultats de la fonction à valeur de couverture.
5.3 Identifiant de couverture
Dans le présent document, les couvertures possèdent un identifiant qui est utilisé dans une requête pour
adresser une couverture à utiliser. Par conséquent, cet identifiant doit être unique dans un certain
contexte (ici: une requête). Aucune hypothèse n’est formulée concernant la réalisation de cet identifiant.
En particulier, lorsque le contexte de l’objet de la couverture change (comme lors d’une livraison à un
client), le caractère unique n’est plus nécessairement garanti. Par conséquent, il n’est potentiellement
plus possible de faire une requête concernant l’objet dans son nouveau contexte.
NOTE Dans un service concret, les couvertures disponibles sont généralement celles qui sont stockées sur ce
serveur, où le contrôle d'accès permet d'adresser la couverture en fonction de l'utilisateur à l'origine de la requête,
etc. Tous ces aspects sont en dehors du domaine d'application du présent document.
La fonction de sondage correspondante pour une couverture C est:
id( C )
5.4 Domaine
5.4.1 Position directe
Une couverture offre les valeurs des positions dans son domaine, appelées « positions directes ». D’autres
valeurs peuvent être déterminées par interpolation, selon le type (le cas échéant) d’interpolation autorisé
par la couverture.
Pour certaines positions directes p = (p ,…,p ) appartenant à un domaine dont le SRC en d dimensions
1 d
contient les axes (a ,…,a ), p[a ] est écrit de manière à accéder au composant du n-uplet de coordonnées
1 d i
qui correspond à l’axe a :
i
p[a ] = p
i i
5.4.2 Grille
Le domaine contient les n-uplets de coordonnées décrivant les positions directes de la couverture qui,
dans le cadre du présent document, sont toutes sur une grille multidimensionnelle. De manière informelle,
cela signifie que chaque position directe à l'intérieur de la grille a exactement un voisin suivant dans les
deux directions de chaque axe, sauf pour le bord, où moins de voisins sont évidemment présents. La
Figure 2 présente quelques exemples de grilles régulières et irrégulières.
4 © ISO 2023 – Tous droits réservés
ISO/FDIS 19123-3:2023(F)
Figure 2 — Exemples de structures de grilles régulières et irrégulières (ISO 19123-1)
La description de la grille dépend de la complexité de cette dernière. Une grille étant composée à partir
d'une séquence ordonnée d'axes, la complexité qui en résulte est déterminée par les types des axes (par
exemple, nombre entier, Latitude ou temps) ainsi que par les règles déterminant les positions directes le
long de ces axes. Les types d'axes suivants, définis dans l'ISO 19123-1, sont actuellement pris en charge
par le présent document:
— un axe Cartésien (« indice ») qui nécessite simplement une limite inférieure et une limite
supérieure (lesquelles sont de type entier);
— un axe régulier qui peut être décrit par des limites inférieure et supérieure ainsi qu'une distance
constante, la résolution;
— un axe irrégulier qui possède des distances individuelles, décrites par une séquence de
coordonnées.
Conformément à l'ISO 19123-1, le domaine de couverture et ses axes ont un seul SRC qui peut servir au
géoréférencement. La définition et l’interprétation des SRC se font conformément à l'ISO 19111.
Le SRC d’un domaine est obtenu au moyen de la fonction crs(C).
crs(C)
La fonction auxiliaire de sondage axisList() extrait la liste ordonnée des axes (a ,…,ad) d'un SRC à d
dimensions:
axisList( crs )
NOTE Conformément à l’ISO 19123-1, tous les noms d’axes de cette liste sont disjoints par paire afin que les
noms puissent servir d’identifiants uniques à l’intérieur de leur SRC.
Chaque axe apporte des coordonnées provenant d'un ensemble non vide et totalement ordonné de
valeurs qui peuvent être numériques ou, dans le cas général, des chaînes de caractères (telles que
« 2020-08-05T »).
Pour une couverture donnée C, la fonction de sondage domain() fournit le domaine de couverture dans
son SRC:
domain( C )
ISO/FDIS 19123-3:2023(F)
Les informations du domaine décrivent la grille de la couverture et son étendue pour chaque axe:
— les limites inférieure et supérieure des positions directes;
— en supplément, les informations suivantes:
— pour les axes d'indices: rien de plus;
— pour les axes réguliers: la résolution exprimée dans l’unité de mesure (uom) de l’axe;
— pour les axes irréguliers: la séquence de points.
Ces informations sont accessibles par des variantes étendues des fonctions susmentionnées. Pour un
domaine de couverture D ayant un axe a, les expressions suivantes renvoient respectivement la limite
inférieure et la limite supérieure:
domain( C, a ).lo
domain( C, a ).hi
Par souci de commodité, une paire de fonctions aux effets identiques mais fondées sur le domaine est
définie:
D[a].lo = domain( C, a ).lo
D[a].hi = domain( C, a ).hi
La grille du domaine de couverture est représentée implicitement au moyen des fonctions permettant de
« parcourir » la grille d’une position directe à l’un de ses voisins. Cela s’appuie sur la structure topologique
d’une grille où chaque position directe possède exactement un voisin inférieur et un voisin supérieur le
long de chaque axe, sauf pour les bords du domaine où aucun voisin n’est disponible. Par conséquent, au
bord, ces fonctions sont donc partielles.
Soit D, le domaine de la couverture C, donc D = domain(C). Soit aussi a, un axe quelconque du SRC de D.
Ainsi, les fonctions pred() et succ() renvoient chacune à une position directe voisine d'une position
donnée quelconque. La fonction pred() renvoie à la position directe immédiate précédente sur l’axe a, la
fonction succ() renvoie à la position directe immédiate suivante sur a. Si l’une de ces positions directes
n’existe pas (parce que la position d’entrée se trouve au bord de l’étendue du domaine), la valeur est
indéfinie et représentée par ⊥.
6 © ISO 2023 – Tous droits réservés
ISO/FDIS 19123-3:2023(F)
pred( D, a, p ) = x où
si p[a] = D[a].lo domain(C,a).lo alors x = ⊥
sinon x est donné par: x[a ] = p[a ] pour tous les a domain( C ) \ {a}, et x[a] = max( x’ | x’
x x x
domain( C, a ) et x’ < p[a] )
succ( D, a, p ) = x où
si p[a] = D[a].hi domain(C,a).hi alors x = ⊥
sinon x est donné par: x[a ] = p[a ] pour tous les a domain( C ) \ {a}, et x[a] = min( x’ | x’
x x x
domain( C, a ) et x’ > p[a] )
EXEMPLE Dans la Figure 3, les voisins de p dans le domaine de couverture D avec les axes x et y peuvent être atteints de
la manière suivante:
a = succ( D, y, pred( D, x, p ) ) = pred( D, x, succ( D, y, p ) );
b = succ( D, y, p );
c = succ( D, y, succ( D, x, p ) ) = succ( D, x, succ( D, y, p ) );
d = pred( D, x, p );
e = succ( D, x, p );
f = pred( D, x, pred( D, y, p ) ) = pred( D, y, pred( D, x, p ) );
g = pred( D, y, p );
h = pred( D, x, succ( D, y, p ) ) = succ( D, y, pred( D, x, p ) ).
Dans le présent document, par souci de commodité pour l’utilisateur, les fonctions arithmétiques de base sont retenues comme
hypothèses pour cette navigation de la grille, définies de manière récursive, de la manière suivante:
Figure 3 — Exemple de voisinage dans la grille
ISO/FDIS 19123-3:2023(F)
5.5 Interpolation
Dans l'ISO 19123-1, une couverture contient une indication des interpolations possibles entre les
positions directes. Une telle interpolation peut être établie pour tous les axes d’une couverture
simultanément ou, en adoptant une approche plus fine, individuellement pour chaque axe.
NOTE 1 Dans l'ISO 19123-1, chaque couverture est associée à exactement une méthode d'interpolation (pour
tous les axes ou par axe). En pratique, les couvertures peuvent permettre à l'utilisateur de choisir une méthode
d'interpolation parmi plusieurs, comme avec l’imagerie où les interpolations linéaires, quadratiques et cubiques
sont applicables en principe, et l’utilisateur peut en choisir une. Toutefois, d'un point de vue conceptuel, deux
couvertures ne différant que par les méthodes d'interpolation sont distinctes car elles fourniront des valeurs de
plage identiques sur leurs positions directes, mais des valeurs différentes entre celles-ci. Au niveau abstrait de
l'ISO 19123-1 et de l’ISO 19123-3, cette ambiguïté n'est pas souhaitable.
Aux fins du présent document, on suppose une méthode d'interpolation spéciale « aucune » selon la
définition, par exemple, de l’ISO 19123-1:2023, Annexe B. « Aucune » indique qu'aucune interpolation
n'est possible le long de l'axe pris en considération.
NOTE 2 La méthode d'interpolation « none » est différente de celle du « plus proche voisin »: Une
interpolation du « plus proche voisin » fournit des valeurs comprises entre les positions directes déterminées
à partir de la position directe la plus proche. L’interpolation « aucune » signifie qu'aucune valeur n'est fournie
entre les positions directes. En d'autres termes: la fonction d'évaluation est indéfinie sur toute position non directe
et aboutira en pratique à une exception.
La fonction interpolation(C,a) renvoie la méthode d'interpolation applicable sur chaque axe de la
couverture C, dans l'ordre de la séquence des axes du SRC. Pour dimension(C)=d, la fonction de sondage
fournit la liste des méthodes d'interpolation (m ,…,m ) où la méthode d'interpolation m s’applique à l’axe
1 d i
numéro i:
interpolation(C)
Cette fonction est surchargée pour extraire la méthode d'interpolation associée à l'axe a de C:
interpolation(C, a)
NOTE 3 L'interpolation est particulièrement pertinente avec les fonctions scale() et project().
5.6 Valeurs de plage
La valeur de plage en une position directe p peut être obtenue grâce à la fonction evaluate (p) qui, pour
C
une couverture donnée C, renvoie la valeur associée à pdomain(C) exprimée dans le SRC de la
couverture.
La fonction de sondage correspondante est la suivante:
value( C, p ) = evaluate ( p ) pour une position directe quelconque pdomain( C )
C
8 © ISO 2023 – Tous droits réservés
ISO/FDIS 19123-3:2023(F)
L'interpolation détermine si la fonction value() est définie sur des coordonnées en dehors de l'ensemble
de positions directes, et comment cette valeur est déterminée à partir des valeurs disponibles aux
positions directes.
NOTE L’ensemble de valeurs de plage peut contenir une ou plusieurs valeurs nulles, selon le type de plage. Le
présent document ne formule aucune hypothèse à ce sujet.
5.7 Type de plage
La description du type de plage d'une couverture peut être obtenue par la fonction de sondage
rangeType() qui fournit un ensemble de n-uplets contenant au moins les noms de champ et le type de
champ:
rangeType( C )
Cette fonction est surchargée afin d'obtenir le type de plage de couverture d'un composant de champ de
plage particulier f:
rangeType( C, f )
Aux fins du présent document, seuls les types de données courants du langage de programmation sont
pris en compte, et uniquement à un niveau élevé et abstrait. Les types de données sont booléen, entier,
flottant, complexe, ainsi que les enregistrements sur ceux qui sont supposés être disponibles. Toutefois,
une spécification de mise en œuvre basée sur le présent document peut ajouter ses propres types de
données, tant qu’ils sont globalement cohérents avec le présent document.
NOTE Les types de plage concrets disponibles dans le traitement de couverture sont déterminés par les
applications du présent document. En général, les types de données normales du langage de programmation seront
disponibles, tels que: entier court (non signé), entier (non signé), et entier long (non signé), ainsi que flottant et
flottant double précision. Par exemple, le type de plage (alias pixel) d'une image RVB 8 bits est normalement donné
par le triplet . En outre, une
application concrète peut ajouter d'autres informations telles que des valeurs nulles, l'exactitude, etc.
5.8 Synopsis des fonctions de sondage de couverture
Exigence 1 https://standards.isotc211.org/19123/-3/1/req/core/probingFunctions
La sémantique des fonctions de sondage utilisées pour la définition de la sémantique du langage de
l'ISO 19123-1 doit être donnée par Tableau 3.
ISO/FDIS 19123-3:2023(F)
Tableau 3 — Synopsis des fonctions de sondage de couverture
Caractéristique de Fonction de sondage Commentaire
la couverture pour une couverture C,
sur la base de l'ISO 19123-1
Identifiant de couverture id( C ) Identifiant de la couverture.
SRC de couverture crs( C ) SRC de la couverture.
= crs ( domain( C ) )
selon l’ISO 19123-1
Liste des axes du SRC axisList( c ) Liste de tous les noms d’axes du SRC, dans
= (a ,…,a ) pour un SRC à d dimensions c établissant l'ordre approprié.
1 d
cette séquence d'axes
Étendue du domaine domain( C ) Étendue de la couverture dans les
d'une couverture coordonnées du SRC.
domain( C, a)
= étendue du domaine le long de l'axe a
domain( C, a).lo
= limite inférieure de l'étendue du domaine le long
de l'axe a
domain( C, a).hi
= limite supérieure de l'étendue du domaine le long
de l'axe a
Voisin dans la grille pred( C, a, p ) Ces fonctions permettent de traverser une
grille en plusieurs pas par rapport à une
succ( C, a, p )
position donnée quelconque, comme pour
les opérations de convolution et,
selon la définition de 5.4.2
généralement, les opérations de Tomlin non
locales.
Type de plage rangeType( C ) L'enregistrement du type de plage est décrit
par une liste décrivant ses composants en
rangeType( C, f )
séquence; pour les besoins du présent
= t où (f:t,.) rangeType( C )
document, seuls le nom du composant et son
type de données sont pris en compte.
Liste des noms des rangeFieldNames( C ) Liste ordonnée de tous les noms des champs
champs de la plage = (f1, …, fn) où de la plage de la couverture et leurs types de
rangeType( C) = ( (f ;t ,…), …, (f :t ,…) ), données; les autres constituants possibles
1 1 n n
avec les noms des champs fi et leurs types ti d'un composant d'enregistrement sont
ignorés dans le présent document, leurs
valeurs devant être définies ailleurs (par
exemple, en fonction de la mise en œuvre).
Valeurs de plage value(C,p) Valeurs de plage de la couverture à une
position directe (ou une position quelconque
= evaluateC(p),pdomain(C)
entre elles, qui admet l’interpolation).
avec evaluate() selon l'ISO 19123-1
Interpolation interpolation( C ) Liste de méthodes d'interpolation admises
selon l'ISO 19123-1 par axe, par ordre d'axe. Si une seule
interpolation est définie pour tous les axes
interpolation( C, a )
de la couverture, cette méthode est
= méthode d'interpolation de l'axe a
multipliée dans toutes les positions de la
liste de sortie.
Interpolation associée à un axe particulier.
10 © ISO 2023 – Tous droits réservés
ISO/FDIS 19123-3:2023(F)
6 Langage de traitement de couverture
Le présent article établit la classe de conformité Coverage Processing.
Ce langage de traitement de couverture définit des expressions sur les couvertures qui se traduisent par
des listes ordonnées de couvertures ou de scalaires (le terme « scalaire » est ici utilisé comme terme
générique pour toutes les structures de données qui ne sont pas des couvertures). Dans la suite du
présent document, les termes expression de traitement et requête sont utilisés de manière
interchangeable.
Une expression de traitement de couverture se compose d’un processCoveragesExpr (voir 6.2). Chaque
norme internationale revendiquant la prise en charge du présent document doit fournir les opérations
de traitement de la couverture comme spécifié dans les paragraphes suivants. Un exemple d’application
est fourni à l’Annexe D.
NOTE 1 Ce langage a été conçu de manière à être « sûr dans l'évaluation », c'est-à-dire qu'il est possible de
réaliser des mises en œuvre dans lesquelles toute requête valide peut être évaluée en un nombre fini d'étapes, sur
la base des primitives de l'opération. Par conséquent, les services fondés sur les constructions du langage peuvent
être construits de manière qu'aucune requête ne puisse rendre le service indisponible de manière permanente.
Malgré cela, il est toujours possible d'envoyer des requêtes qui imposent une importante charge de travail à un
serveur.
NOTE 2 Les éléments de données d'une liste de résultats d'une requête peuvent être de taille et de structure
hétérogènes. Les couvertures au sein d'une liste de résultats d'évaluation peuvent notamment avoir des dimensions,
des domaines, des types de plage, etc., différents. Cependant, une liste de résultats est toujours constituée soit de
couvertures, soit de valeurs scalaires, mais jamais d'un mélange des deux.
6.1 Style de définition de la syntaxe et de la sémantique
6.1.1 Syntaxe de l'expression
Les primitives du langage et les possibilités d'imbrication forment un langage d'expression indépendant
de tout protocole de codage et de service spécifique. Il est collectivement appelé « langage de traitement
de couverture ». Les éléments du langage sont détaillés dans les paragraphes suivants. La syntaxe
complète figure à l'Annexe B.
Une expression de traitement de couverture est dite admissible si et seulement si elle est conforme à la
syntaxe de la définition du langage du présent document.
Exigence 2 https://standards.isotc211.org/19123/-3/1/req/core/syntax
Les expressions de traitement de couverture doivent être conformes à la définition de syntaxe de
l'Annexe B.
NOTE Un diagramme syntaxique extrait de l'Annexe B est fourni en l'Annexe C pour permettre de visualiser la
grammaire.
EXEMPLE Le fragment d'expression de couverture $c * 2 est admissible car il est conforme à la syntaxe du
langage, alors que abc vu comme faisant partie d'une expression de couverture n'est pas conforme à la syntaxe et
n'est, par conséquent, pas admissible.
6.1.2 Sémantique de l'expression
La sémantique d'une expression de traitement de couverture est définie de manière récursive en
indiquant, pour toutes les expressions admissibles, la sémantique. Une expression est valide si et
seulement si elle est admissible et respecte toutes les règles imposées par la sémantique du langage.
ISO/FDIS 19123-3:2023(F)
Exigence 3 https://standards.isotc211.org/19123/-3/1/req/core/semantics
Les expressions de traitement de couverture doivent être conformes à toutes les règles sémantiques du
présent document.
EXEMPLE L'expression de couverture suivante est valide si et seulement si la couverture liée à la variable $c possède
un composant de plage numérique nommé red.
$c.red * 2.5
NOTE Dans le reste du présent paragraphe, des tableaux sont utilisés pour décrire l'effet d'une opération sur
chaque constituant de la couverture.
La sémantique des expressions de traitement de couverture est définie par des fonctions dites de sondage
qui extraient des informations d'une couverture.
6.2 Expressions de traitement de couverture
6.2.1 processCoveragesExpr
Un élément processCoveragesExpr traite une liste de couvertures à tour de rôle. Chaque couverture est
vérifiée de manière facultative d'abord pour remplir un certain prédicat, et est sélectionnée – c'est-à-dire
qu'elle contribue à un élément de la liste de résultats, seulement si le prédicat renvoie la valeur true.
Chaque couverture sélectionnée sera traitée, et le résultat ajouté à la liste de résultats. Enfin, cette liste
de résultats est renvoyée en tant que réponse ProcessCoverages, sauf si une quelconque exception a été
générée.
Exigence 4 https://standards.isotc211.org/19123/-3/1/req/core/processCoveragesExpr
Un processCoveragesExpr doit être défini comme suit.
Soit
v , … v , n iteratorVar différents deux à deux (n1),
1 n
L , … L , n coverageList (n1),
1 n
b, un booleanScalarExpr contenant éventuellement des occurrences d'un ou plusieurs v
i
(1in),
P, un processingExpr contenant éventuellement des occurrences de v (1in).
i
Alors,
m,n1 sont des nombres naturels,
v , … c , sont n iteratorVar,
1 n
c , … c , sont n variableName différents deux à deux,
1 m
e , … e , sont n+m coverageExprs ou scalarExpr facultatifs ou intervalExpr entre crochets
1 m
facultatifs, pouvant contenir des occurrences de v , … c et de c , … c ,
1 n 1 m
c est un coverageExpr ou un scalarExpr,
où chaque c est défini avant d'être utilisé dans une expression.
i
Alors,
pour tout processCoveragesExpr E
où
E = pour v dans ( L ),
1 1
v dans ( L ),
2 2
12 © ISO 2023 – Tous droits réservés
ISO/FDIS 19123-3:2023(F)
… ,
v dans ( L )
n n
[ soitc := e , …, c := e ]
1 1 m m
[ où b ]
renvoie P
le résultat R de l'évaluation de processCoveragesExpr E est établi comme suit:
Soit R la séquence vide;
alors que L1 n’est pas vide:
{ assigner le premier élément de L à la variable d'itération v ;
1 1
tant que L n’est pas vide:
{ assigner le premier élément de L à la variable d'itération v ;
2 2
…
tant que L n'est pas vide:
n
{ assigner le premier élément de L à la variable
n
d'itération v ;
n
remplacer chaque occurrence de c dans E par e ;
i i
remplacer chaque occurrence de v dans E
i
par la couverture correspondante;
évaluer b;
si (b)
alors
évaluer P;
ajouter le résultat de l'évaluation à R;
supprimer le premier élément de L ;
n
}
…
}
supprimer le premier élément de L ;
}
supprimer le premier élément de L1;
}
Les éléments contenus dans le paragraphe coverageList, qui constituent les identifiants de couverture,
proviennent des identifiants de couverture annoncés par le serveur.
NOTE 1 Les identifiants de couverture peuvent apparaître plus d'une fois dans un coverageList. Dans ce cas, la
couverture sera évaluée chaque fois qu'elle apparaît, en respectant la séquence globale d'inspection.
EXEMPLE 1 On suppose que les couvertures A B et C sont disponibles. Alors la requête suivante:
for $c in ( A, B, C )
return encode( $c, "image/tiff" )
produira une liste de résultats contenant trois couvertures codées au format TIFF.
On suppose que les images satellites A, B et C sont disponibles et qu'une couverture M sert de masque (c'est-
à-dire avec des valeurs de plage de 0 et 1 et la même étendue que A, B et C). Le masquage de chaque image
satellite peut alors être effectué avec cette requête:
for $s in ( A, B, C ),
$m in ( M )
return encode( $s * $m, "image/tiff".
ISO/FDIS 19123-3:2023(F)
La formule let (soit) déclare une constante nommée et lui donne une valeur.
EXEMPLE 2 L'instruction suivante définit une constante de nom $timeAxis avec la valeur « date ».
let $timeAxis := "date".
NOTE 2 Dans la plupart des cas, les constantes nommées sont utilisées par pure commodité, pour simplifier les
expressions et rendre le code plus lisible.
Dans une formule let, la constante nommée ne prend qu'une seule valeur. Il peut s'agir d'un élément
unique ou d'une séquence (il n'y a pas de réelle distinction – un élément est juste une séquence de
longueur « un »), et la séquence peut contenir des nœuds, ou des valeurs atomiques, ou un mélange des
deux.
Les constantes nommées ne peuvent pas être mises à jour. Par exemple, une expression comme let
$x:=$x+1 n'est pas autorisée. Plus précisément, elle n'entraînera pas d'erreur d'évaluation, mais le
résultat ne sera pas celui attendu (voir littérature sur XPath). Cette règle peut sembler très étrange si on
attend un comportement semblable aux langages procéduraux tels que JavaScript ou Python. Mais le
langage de traitement de couverture n'est pas ce genre de langage. Il s'agit d'un langage déclaratif qui
travaille à un niveau supérieur. Cette contrainte est essentielle pour permettre aux optimiseurs de
trouver des stratégies d'exécution capables d'interroger de vastes bases de données en quelques
fractions de seconde. Les utilisateurs de SQL, XSLT et XQuery ont constaté que
...










Questions, Comments and Discussion
Ask us and Technical Secretary will try to provide an answer. You can facilitate discussion about the standard in here.
Loading comments...