License Agreement

Permission is hereby granted by the Open Geospatial Consortium, ("Licensor"), free of charge and subject to the terms set forth below, to any person obtaining a copy of this Intellectual Property and any associated documentation, to deal in the Intellectual Property without restriction (except as set forth below), including without limitation the rights to implement, use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Intellectual Property, and to permit persons to whom the Intellectual Property is furnished to do so, provided that all copyright notices on the intellectual property are retained intact and that each person to whom the Intellectual Property is furnished agrees to the terms of this Agreement.

If you modify the Intellectual Property, all copies of the modified Intellectual Property must include, in addition to the above copyright notice, a notice that the Intellectual Property includes modifications that have not been approved or adopted by LICENSOR.

THIS LICENSE IS A COPYRIGHT LICENSE ONLY, AND DOES NOT CONVEY ANY RIGHTS UNDER ANY PATENTS THAT MAY BE IN FORCE ANYWHERE IN THE WORLD.

THE INTELLECTUAL PROPERTY IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE DO NOT WARRANT THAT THE FUNCTIONS CONTAINED IN THE INTELLECTUAL PROPERTY WILL MEET YOUR REQUIREMENTS OR THAT THE OPERATION OF THE INTELLECTUAL PROPERTY WILL BE UNINTERRUPTED OR ERROR FREE. ANY USE OF THE INTELLECTUAL PROPERTY SHALL BE MADE ENTIRELY AT THE USER’S OWN RISK. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR ANY CONTRIBUTOR OF INTELLECTUAL PROPERTY RIGHTS TO THE INTELLECTUAL PROPERTY BE LIABLE FOR ANY CLAIM, OR ANY DIRECT, SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM ANY ALLEGED INFRINGEMENT OR ANY LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR UNDER ANY OTHER LEGAL THEORY, ARISING OUT OF OR IN CONNECTION WITH THE IMPLEMENTATION, USE, COMMERCIALIZATION OR PERFORMANCE OF THIS INTELLECTUAL PROPERTY.

This license is effective until terminated. You may terminate it at any time by destroying the Intellectual Property together with all copies in any form. The license will also terminate if you fail to comply with any term or condition of this Agreement. Except as provided in the following sentence, no such termination of this license shall require the termination of any third party end-user sublicense to the Intellectual Property which is in force as of the date of notice of such termination. In addition, should the Intellectual Property, or the operation of the Intellectual Property, infringe, or in LICENSOR’s sole opinion be likely to infringe, any patent, copyright, trademark or other right of a third party, you agree that LICENSOR, in its sole discretion, may terminate this license without any compensation or liability to you, your licensees or any other party. You agree upon termination of any kind to destroy or cause to be destroyed the Intellectual Property together with all copies in any form, whether held by you or by any third party.

Except as contained in this notice, the name of LICENSOR or of any other holder of a copyright in all or part of the Intellectual Property shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Intellectual Property without prior written authorization of LICENSOR or such copyright holder. LICENSOR is and shall at all times be the sole entity that may authorize you or any third party to use certification marks, trademarks or other special designations to indicate compliance with any LICENSOR standards or specifications. This Agreement is governed by the laws of the Commonwealth of Massachusetts. The application to this Agreement of the United Nations Convention on Contracts for the International Sale of Goods is hereby expressly excluded. In the event any provision of this Agreement shall be deemed unenforceable, void or invalid, such provision shall be modified so as to make it valid and enforceable, and as so modified the entire Agreement shall remain in full force and effect. No decision, action or inaction by LICENSOR shall be construed to be a waiver of any rights or remedies available to it.


 

i. Abstract

This standard applies to the encoding and decoding of JPEG 2000 images that contain GML for use with geographic imagery.

This document specifies the use of the Geography Markup Language (GML) within the XML boxes of the JPEG 2000 data format and provides an application schema for JPEG 2000 that can be extended to include geometrical feature descriptions and annotations. The document also specifies the encoding and packaging rules for GML use in JPEG 2000.

ii. Keywords

The following are keywords to be used by search engines and document catalogues.

gml, jpeg200, jpeg2000 package, xml box, gmljp2, gmlcov, gml in jpeg2000, annotation, codestream, multiple codestream, coordinate reference system, coverage, gmljp2coveragecollection, gmljp2gridcoverage, gmljp2rectifiedgridcoverage, gmljp2referenceablegridcoverage, gmljp2features, grid, map, rectified grid, unit of measure definition uom, earth observation profile, dublin core, ISO19115-ISO19139 metadata

iii. Preface

This OGC encoding standard defines the means by which the Geography Markup Language (GML) is to be used within JPEG 2000 images for adding geographic content to imagery.

This standard was originally the result of work in the GML in JPEG 2000 Interoperability Experiment.  In 2004, the submitting organizations introduced a candidate specification document [OGC 04-045] which later became an Open Geospatial Consortium (OGC) public Discussion Paper and the basis for conducting the Interoperability Experiment.  The Activity Plan for the GML in JPEG 2000 Interoperability Experiment was formally approved by the OGC in February 2005.  Version 1.0.0 of this standard was published in January of 2006.

The current revision of this standard is the result of discussions with the GMLJP2 v1.1 SWG during 2007 and 2008. These discussions were motivated by the experiences of those involved with the implementation and use of the 1.0.0 version. In essence, version 1.0 was not widely implemented, due to a loosely specified Coverage schema, loosely specified rules for the georeference mechanism, and loosely specified conformance clause based on this loose schema. Additionally, it had to compete with other solutions, such as the use of “World files” (which have some limitations for georeference information, and also need an auxiliary file) and the use of GeoJP2 (which is GeoTIFF tags inside a uuid box in JP2 format; which is a “de facto” standard with limited capabilities, whose key advantage is that it has been quickly developed, and may be quickly implemented, but would require some clarifications and additional capabilities for addressing the full scope of complex geospatial imagery). The proposal was formally reactivated in 2012 with the aim to provide a generic application schema for JPEG2000 coverage and the requirement of using the standardized GML Coverage Application Schema (GMLCOV) made available by OGC that is also used for Web Coverage Service 2.0 in replacement of the GML 3.1.1 coverage.

Intended target audience are developers intending to implement geospatially enabled JPEG2000 encoders and readers and developers of both WFS and WCS that what to provide support for JPEG2000 formats or developers that are used to GML. This document aims at providing a clear and testable set of requirements but also an overview and giving useful hints and best practices beyond the pure normative texts.

This standard is fully conformant to GML 3.2.1 standard and guidelines, and the GMLCOV application schema.

Attention is drawn to the possibility that some of the elements of this document may be the subject of patent rights. The Open Geospatial Consortium shall not be held responsible for identifying any or all such patent rights.

Recipients of this document are requested to submit, with their comments, notification of any relevant patent claims or other intellectual property rights of which they may be aware that might be infringed by any implementation of the standard set forth in this document, and to provide supporting documentation.

iv. Document terms and definitions

This document uses the standard terms defined in Clause 5.3 of [OGC 06-121r3], which is based on the ISO/IEC Directives, Part 2, Rules for the structure and drafting of International Standards. In particular, the word “shall” (not “must”) is the verb form used to indicate a requirement to be strictly followed to conform to this standard.

NOTE Occasionally this document capitalizes “SHALL” solely to emphasize a particular requirement. No normative, semantic difference between “SHALL” and “shall” is intended.

v. Submitting organizations

The submitting entities are grateful for the contributions from the following organizations in the development and revisions of this standard:

European Union Satellite Center
Galdos Systems, Inc.
Institut National de l'Information Géographique et Forestière (IGN)
NGA
UAB-CREAF

The submitting entities are also grateful for the contributions of those listed in [OGC 05-047r3] who participated in the creation of version 1.0 of this standard.

vi. Submitters

All questions regarding this submission should be directed to the editor or the submitters:

Name Representing OGC member

Darko Androsevic

Galdos Systems, Inc.

Yes

Lucio Colaiacomo

EUSC

Yes

Emmanuel Devys

Institut National de l’Information Géographique et Forestière (IGN)

Yes

Joan Masó Pau

Universitat Autònoma de Barcelona

Yes

Raul Alonso Reyes

EUSC

Yes

Steven Rogan

NGA

Yes

vii. Changes to the OGC Abstract Specification

The OpenGIS® Abstract Specification does not require changes to accommodate the technical contents of this document. A mapping document between GMLCOV model and AS Topic 6 (i.e ISO 19123) may be envisaged.

viii. Changes to the previous version

Changes to the previous version of this standard address the following topics.

  1. This specification is based on the GMLCOV application schema as specified in OGC 09-146r2 1.0.1. (May 2012) and OGC 12-108 OGC® GML Application Schema - Coverages - JPEG2000 Coverage Encoding Extension. Some text of the previous version has been removed to avoid redundancies to these specifications.
  2. MIME type and JP2 reader requirement box type for GML additional explanation: MIME type for JPEG2000 is clarified in OGC 12-108 OGC® GML Application Schema - Coverages - JPEG2000 Coverage Encoding Extension.
  3. The presence of GML metadata is announced by requiring feature 67 in the reader requirements box (XMLGISMetaData). The data is then packaged in XML data which is annotated with JPX labels, where the annotation works via the "association" (ASOC) box of part 2.
  4. Metadata content / profiles (e.g. EOP (Earth Observation Profile) metadata model, possibly INSPIRE, US NITF ....) and optimization in the metadata streaming capability is clarified and exemplified. This part can accommodate different profiles to enable the usage of flexible metadata in different XML boxes to provide flexibility and streaming in parallel.
  5. Specification of NIL values As per OGC Project Document 08-012, see Annex B. A section clarifying the NIL values and unifying this with WCS definitions is included.
  6. Clarification of the use of CRS and Rectified grid coverage / image georeference with origin point (at pixel center).
  7. The relative reference meaning has been changed from previous versions of this standard (cf. note to requirement #25).
  8. This specification includes an application schema that extends GMLCOV application schema. This avoids the need for creating specific application schema in many simple cases.
  9. Annotations that combine GML and KML are suggested.

Note: for NITF2.1- GMLJP2 Mapping see OGC12-083 GMLJP2 extensions.

ix. Future work

Based on this interface standard an extension to the Web Coverage Service (WCS) 2.0 is foreseen. This extension is going to specify how JPEG2000 encoded coverages can be requested from a WCS including parameters defining JPEG2000 features such as compression, tiling, etc.

It is also foreseen to adapt and expand the supporting types of the GeoReferenceable type of coverage based on adopted extensions of GML, once it is available. The inclusion of KML2.3 (once that version of the standard is available) will be included in the annotation extension part.

Testing is needed for metadata streaming capabilities in JPIP protocol. GMLJP2 could serve as a key working example for testing out the decomposed XML feature with JPIP (for efficient streaming of metadata associated to the ROI Region of Interest). This could be part of GMLJP2 extension.

Foreword

This edition cancels and replaces the original encoding standard [OGC 05-047r3] which has been technically revised.

This document refers to the OGC 12-083 document as OGC GMLJP2 extension and to OGC 12-108 GML Application Schema Coverages JPEG2000 Coverage Encoding Extension.

The short form of this OGC standard shall be referred to as GMLJP2.

Attention is drawn to the possibility that some of the elements of this document may be the subject of patent rights. The Open Geospatial Consortium shall not be held responsible for identifying any or all such patent rights.

Recipients of this document are requested to submit, with their comments, notification of any relevant patent claims or other intellectual property rights of which they may be aware that might be infringed by any implementation of the standard set forth in this document, and to provide supporting documentation.

Introduction

The OGC Geography Markup Language (GML) standard is an XML grammar for the encoding of geographic information including geographic features, coverages, observations, topology, geometry, coordinate reference systems, units of measure, time, and value objects. The Coverage is loosely speaking, the digital representation of a spatio-temporally varying phenomenon; the formal definition of ISO 19123 (which is identical to OGC Abstract Topic 6) defines coverages formally as collection of direct positions in a coordinate space that may be defined in terms of up to three spatial dimensions as well as a temporal dimension. Examples of coverages include rasters, triangulated irregular networks, point coverages and polygon coverages. Coverages are the prevailing data structures in a number of application areas, such as remote sensing, meteorology and mapping of bathymetry, elevation, soil and vegetation. The GML Application Schema – Coverages (GMLCOV) is a GML application schema uses GML 3.2 Coverages and SWE Common generate a common application schema that can be used to describe coverage instances.

The ISO JPEG 2000 standard is a wavelet-based encoding for imagery that provides the ability to include XML data for description of the image within the JPEG 2000 data file.

The JPEG 2000 standard does not, however, describe any means for including ancillary geographic information within the image, such as the geospatial coordinates of the image or annotations or references to features.

The only available solutions that have been identified based on civil standards are:

This standard defines the means by which the GMLCOV application schema and other means are to be used within JPEG 2000 for such purposes.

This specification includes the following:

Scope

This standard applies to the encoding and decoding of JPEG 2000 images that contain GML for use with geographic imagery. It also applies to any geospatial raster or bi-dimensional regularly spaced grid.

This document specifies the use of the Geography Markup Language (GML) within the XML boxes of the JPEG 2000 data format and provides an application schema for JPEG 2000 that can be extended to include geometrical feature descriptions and annotations. The document also specifies the encoding and packaging rules for GML use in JPEG 2000.

This document is applicable to those interested in using JPEG 2000 as a standardized geographic image format.

It specifies a minimally required GMLCOV definition for georeferencing images and gives guidelines for augmenting that definition to address the additional encoding of metadata, features, annotations, styles, coordinate reference systems, and units of measure. This document treats the case of packaging a single geographic image and the case of packaging multiple geographic images (multiple codestreams).

This core document only addresses rectified grid coverages.

Further extensions should address non-rectified grid coverages (Referenceable grid coverage) and image annotations which are not specified hereafter.


Compliance

Standardization target are geospatially enabled JPEG2000 encoders and readers.

This document establishes a single requirements class, core, of http://www.opengis.net/spec/GMLJP2/2.0/req/core with a single pertaining conformance class, core, with URI http://www.opengis.net/spec/GMLJP2/2.0/conf/core. Requirements and conformance test URIs defined in this document are relative to

http://www.opengis.net/spec/GMLJP2/2.0/

Compliance with this standard shall be checked using all the relevant tests specified in Annex A (normative).

Normative references

The following normative documents contain provisions that, through reference in this text, constitute provisions of this document.  For dated references, subsequent amendments to or revisions of any of these publications do not apply.  For undated references, the latest edition of the normative document referred to applies.

[RFC 2396]              IETF RFC 2396, Uniform Resource Identifiers (URI): Generic Syntax (1998)
[ISO 15444-1]          ISO/IEC 15444-1:2004, JPEG 2000 image coding system: Core coding system
[ISO 15444-2]          ISO/IEC 15444-2:2004, JPEG 2000 image coding system: Extensions
[ISO 15444-4]          ISO/IEC 15444-4:2004, JPEG 2000 image coding system: Conformance testing
[ISO 19105]             ISO 19105:2000, Geographic information – Conformance and Testing
[ISO N2887]            ISO/IEC JTC 1/SC 29/WG1 N2887 (Klaus Jung), Including GML data based on the OpenGIS standard in JPEG 2000 family files (March 2003)  http://www.jpeg.org/public/wg1n2887.doc
OGC [07-036]         OGC 07-036, Geography Markup Language V3.2.1 (July 2007)
OGC [06-121r3]      OGC 06-121r3, OWS Web Services Common Specification (February 2007)
OGC [09-046r2]      OGC 09-046r2 OGC Naming Authority - Procedures
OGC [10-157r2]      OGC 10-157r2, Earth Observation Metadata profile of Observation & Measurements (May 2011)
OGC [09-146r2]      OGC 09-146r2 1.0.1, GML Application schema -Coverages (February 2012)
OGC [12-108]        OGC 12-108, GML application schema -JPEG2000 Coverage Encoding Extension

In addition to this document, this standard includes several normative XML Schema Document files as specified in the Annexes.

Terms and Definitions

In addition to the following, this document uses the standard terms and definitions given in Clause 4 of [OGC 06-121r3].

4.1 attribute <XML>

marking on illustrative material for the purpose of clarification [ISO19117]

Note For example, this can be an association between an annotation entity (e.g. a text label) and an image or some geometric “region” within the image. [OGC 05-047r3]

4.2 codestream [ISO/IEC 15444-1]

A collection of one or more bit streams and the main header, tile-part headers, and the EOC required for their decoding and expansion into image data. This is the image data in a compressed form with all of the signalling needed to decode. .

Note: This is the image data in a compressed form with all of the signaling needed to decode

4.3 coordinate

one of a sequence of n numbers designating the position of a point in n-dimensional space  [ISO 19111]

Note: In a coordinate reference system, the coordinate numbers are qualified by units.

4.4 coordinate reference system

coordinate system that is related to an object by a datum [ISO 19111]

Note: For geodetic and vertical datums, the object will be the Earth.

4.5 coordinate system

set of mathematical rules for specifying how coordinates are to be assigned to points  [ISO 19111]

4.6 coverage

feature that acts as a function to return values from its range for any direct position within its spatiotemporal domain  [ISO 19123]

Note:   A coverage is a representation of continuous geographic phenomena, which vary over space and have no specific extent (e.g. imagery or elevation data).  A coverage associates a position within its domain to a record of values of defined data types. (from ISO 19123)

4.7 curve

1-dimensional geometric-primitive, representing the continuous image of a line [ISO 19107]

4.8 datum

parameter or set of parameters that define the position of the origin, the scale, and the orientation of a coordinate system  [ISO 19111]

Note: A datum may be a geodetic datum, a vertical datum, an engineering datum, an image datum, or a temporal datum.

4.9 domain

well-defined set  [ISO/TS 19103]

Note 1: A mathematical function may be defined on this set, i.e. in a function f:A→B A is the domain of function f.

Note 2: A domain as in domain of discourse refers to a subject or area of interest.

4.10 feature

abstraction of real world phenomena  [ISO 19101]

Note: A feature may occur as a type or an instance. Feature type or feature instance should be used when only one is meant. A coverage is a type of feature, but ‘feature’ data generally refers to geometric primitives (points, lines, surfaces, solids) that represent discrete real world phenomena (i.e. objects with well-defined boundaries).

4.11 function

rule that associates each element from a domain (source, or domain of the function) to a unique element in another domain (target, co-domain, or range)  [ISO 19107]

4.12 grid

network composed of two or more sets of curves in which the members of each set intersect the members of the other sets in an algorithmic way  [ISO 19123]

Note: The curves partition a space into grid cells

4.13 map

pictorial representation of geographic data

4.14 object

entity with a well-defined boundary and identity that encapsulates state and behavior  [ISO 19107]

Note: A GML object is an XML element of a type derived from AbstractGMLType.

4.15 point

0-dimensional geometric primitive, representing a position [ISO 19107]

Note: The boundary of a point is the empty set.

4.16 range

set of all values a function f can take as its arguments vary over its domain

4.17 rectified grid

grid for which there is an affine transformation between the grid coordinates and the coordinates of an external coordinate reference system  [ISO 19123]

4.18 set

unordered collection of related items (objects or values) with no repetition  [ISO 19107]

 

Conventions

Abbreviated terms

GML
Geography Markup Language
IETF
Internet Engineering Task Force
JP2
JPEG 2000 File format, cf. 15444 Part I Annex I
JPEG
Joint Photographic Experts Group
JPX
JPEG 2000 Extended File format, cf. 15444 Part II Annex M
RFC
Request for Comments
UCUM
Unified Code for Units of Measure
URI
Uniform Resource Identifier
XML
Extensible Markup Language

Namespace prefix conventions

The namespace abbreviated prefixes used in this document are not normative and are merely chosen for convenience; they may appear in examples without being formally declared, and have no semantic significance. The namespaces to which the prefixes correspond are normative.

Table 1 — Namespace mappings
Prefix Namespace URI Description

gml

http://www.opengis.net/gml/3.2

GML 3.2

swe

http://www.opengis.net/swe/2.0

SWE Common 2.0

gmlcov

http://www.opengis.net/gmlcov/1.0

GML Application Schema for Coverages 1.0

gmljp2

http://www.opengis.net/gmljp2/2.0

GML JP2 application schema version 2.0

Roles of GML in JPEG 2000 for geographic imagery

Introduction

This clause describes the roles of GMLCOV and GML in JPEG 2000 for geographic imagery. The description of these roles provides the context for the supporting mechanisms described in Clause 7. When encoding information according to one of the types described in this clause the corresponding encoding mechanism specified in Clause 7 should be used.

The role of GMLCOV in relation to JPEG 2000 is to provide an XML encoding of the coverage metadata necessary to make the JPEG 2000 document a georeferenced or geographic image or georefereanceable image. This is accomplished by providing, using the GMLCOV application schema, the description of the image geometry and radiometry. In addition, GML data can be used, as described in this clause, for the encoding of geographic features, annotations, annotation and feature styling, and supporting components for coordinate reference systems and unit of measure definitions.

The GMLCOV and GML data are stored within the JPEG 2000 file using the XML Box mechanisms provided by the JPEG 2000 standard (with Association box as specified by JPX file format in [ISO 15444-2]) and the encodings described in Clause 8.

Use-cases

GMLJP2 is intended to handle a variety of imaging use cases including the following:

1.     Georeferencing of a single image, in which a coverage collection is used to encapsulate GMLCOV elements to describe the geometry and the radiometry of the data. Examples include JPEG 2000 encoding of simple imagery, or JPEG 2000 responses to WMS or WCS requests.

2.     Same as 1, but for multiple images of the same type. A coverage collection is used to encapsulate GMLCOV elements to describe the geometry and the radiometry of the constituent images. Examples include a single JPEG 2000 file that contains stereo photographic pair data, a triangulation block of images, or a collection of image tiles making up an image mosaic.

3.     Same as 2, but for images of different types. A coverage collection is used to encapsulate GMLCOV elements to describe the geometry and the radiometry of the constituent images. Examples include a single JPEG 2000 file that contains a combination of images relating to the identification of a target and its environs, such an optical image, a FLIR dataset, and one or more SAR images.

4.     Rectified images with or without associated digital elevation models. GMLCOV can be used to provide the geometry and, optionally, elevation information.

5.     Images that correspond to elevation grid and associated metadata

6.     Images that require annotations, such as for explanatory text or simple vector graphics to communicate additional information about what the image is portraying.

7.     Images that are required to be accompanied by arbitrary feature data. The GML can be used to describe the features.  An example of this would be a single GMLJP2 file in substitution to the use of a pair of files such as a GeoTIFF and a Shapefile.

8.     Same as 1, but with additional coverage provided to indicate the semantic meaning of specific pixel (sample) values, e.g. for “no-data” or high-saturation indicators.

9.     Images that require an associated sensor model for analysis and geopositioning.  SensorML describes all processes and components in GML.

10.  Images that require associated access rights. GeoXACML is a general purpose language to declare and enforce access control rights, e.g. a condition where the user can access all features inside or outside a particular geographical area.

11.  Multiple codestream encoding enables multiple images of the same or different type (different geometry, different radiometry) to be packaged in a single JPEG 2000 file. Multiple ASOC boxes within the “outer” association box labeled gml.data may refer to the different codestreams, e,g., pressure, ozone as separate codestreams with associated schemas.

12.  Images coming out from radar sensors (after SLC)

13.  Large mosaic dataset tested (>10GB up to 40 GB in one single GMLJP2 file).

JPEG2000 Coverage description requirements (core)

Section 7 and 8 describe the use of the GMLCOV to describe both a coverage collection and the individual coverages for its usage in a JPEG2000 encoding format. A Coverage collection is needed because a GMLJP2 file (dataset) may contain:

A single codestream (raster) associated with a single coverage with a XML encoding of the metadata necessary to make the JPEG2000 document a georeferenced or geographic image (Minimum Use Case).

A sequence (collection) of codestreams with a sequence of corresponding coverages

A single codestream associated with a single coverage, and associated features and annotations, together with styling information.

A sequence (collection) of codestreams with a sequence of corresponding coverages, each coverage being associated with its features and annotations, together with styling information.

Geographic metadata may be associated to the coverage collection (the whole GMLJP2 file). This metadata is at the “aggregate” level, aggregate here being any structure of elements corresponding to cases 2 to 4.

The result is a GML document providing the information of the coverage(s) and associated features, annotations and styling (if any).

Section 7 describes some particularities in the use of GMLCOV to encode different aspects of the data and Section 8 describes the complete structure of a GMLJP2 XML encoding.

Requirements class gmljp2 establishes how a coverages representation, metadata, GML features and annotations can be embedded in the JPEG2000 encoding format. Its identifying URL is given by http://www.opengis.net/spec/gmljp2/2.0/req.

This sta  

ndard rely on OGC 09-146r2, GML Application Schema – Coverages Encoding Specification version 1.0.1. (May 2012) and OGC 12-108, GML Application Schema - Coverages - JPEG2000 Coverage Encoding Extension for what concern:

· gmljp2:GMLJP2GridCoverage,

· gmljp2:GMLJP2RectifiedGridCoverage,

· gmljp2: GMLJP2ReferenceableGridCoverage

Informative:

The ReferenceableGridCoverage is also handled by the GMLCOV specification but because the usage of GML 3.3 it will be specified in the GMLJP2 extensions.

 

Requirement 1  /req/gmljp2-gmlcov
A JPEG2000 encoded file conformance to this standard shall use a GMLCOV coverage description following the OGC12-108 GML Application Schema - Coverages - GMLJP2 Coverage Encoding Extension to describe the coverage collection and to describe the individual coverages.
Dependency: http://www.opengis.net/spec/gmlcov_jpeg2000/coverages/1.0/req/jpeg2000-coverage

GMLJP2 usage as a coverage collection with individual coverages
Figure : GMLJP2 usage as a coverage collection with individual coverages

Coverage metadata

This clause describes the use of GMLCOV to encode data about such geographic images. This approach considers three different types of such “metadata”:

1.     “Traditional” metadata, e.g. ISO 19139 [2], in Earth Observation profile, etc

2.     GMLCOV information, from the GML Coverage

3.     Image information, from the JPEG 2000 image header

Some metadata can be at the coverage collection level and some other at the coverage level. Some metadata origins can be redundant and the requirements provided here specify precedence.

Metadata origins, root JP2/JPX header metadata are outside the GML document
Figure : Metadata origins, root JP2/JPX header metadata are outside the GML document

At the coverage collection level, the JPEG 2000 header metadata provides information about the number of codestreams. At the individual coverage level, JPEG 2000 header metadata provides information about the number of rows and columns, the number of resolution levels and eventually an internal tiling schema. GMLCov provides a metadata property, gmlcov:metadata which can be attached to any GMLCov object and will be used to encode metadata about the coverage. The GML metadata property, gml:metaDataProperty, can be attached to any GML object and it is only intended for metadata about extra elements that the GMLJP2 encodes such as GML features or annotations.

Both gmlcov:metadata and gml:metaDataProperty can either point (via xlink:href) to a metadata property package expressed via a GML metadata application schema, or enclose a bundle of such metadata properties in-line. This can be an ISO19139 document, an EOP XML description or a custom supported, user-defined metadata schema. Some elements can be redundant in more than one description. It is the responsibility of the data provider to avoid redundant information, and if coverage metadata provides redundant information the data provider is responsible to ensure that it is consistent with the coverage descriptions provided in GMLCOV or the JPEG2000 headers.

 

Requirement 2    /req/header-precedence:
In a JPEG2000 encoded file containing coverage metadata about the internal structure of the JPEG2000 file (e.g. number of codestreams, number of rows and columns of a codestream) shall be coherent with the JPEG2000 binary header information. In case of discrepancies the JPEG2000 binary headers information takes precedence.

 

Requirement 3    /req/gmlcov-precedence:
In a JPEG2000 encoded file including gmlcov:metadata with information redundant with the GMLCOV information in gml:domainSet or gmlcov:rangeType (e.g. geometric or radiometric information in ISO19139 format), both shall be coherent. In case of discrepancies the gml:domainSet or gmlcov:rangeType information takes precedence.

 

Requirement 4    /req/gml-metaDataProperty:
  In a JPEG2000 encoded file the gml:metaDataProperty shall neither encode metadata about the coverage collection nor the individual coverages.

Note:   gmlcov:metadata gml:metaDataProperty is intended for metadata about extra GML features, annotations etc.

It is possible to include metadata in the coverage information in several formats. One possibility is to use ebRIM:RegistryObject as the first class element. Another is to include an ISO19139 metadata description in XML. Table 2 summarizes the different alternatives that are directly possible using the XML schema provided (see annex D for examples.

Table 2 — Choices of the gmljp2:GenericMetadata data structure
Name Definition Data type and value Multiplicity and use

ISO Metadata

isoMetadata

Metadata following ISO 19139 schema

gmd:MD_Metadata_PropertyType

Zero or one (optional)

Earth Observation Profile Metadata

eopMetadata

Metadata following one othe the Earth Observation profiles for Observations and measurements

eop:EarthObservationType

Zero or more (optional)

Dublin Core Metadata

dcMetadata

A sequence of metadata fields following Dublin Core schema

dc:DC-elementType

Zero or more (optional)

Extension

metadata

Metadata in any other schema

text or gmljp2:GenericPropertyWithAssocType that internally allows to any type

Zero or more (optional)

 

The following instance illustrates how to do it for the ISO19115/19139


<?xml version=“1.0” encoding=“UTF-8”?>
<gmljp2:GMLJP2CoverageCollection gml:id="JPEG2000_0">
  <gmljp2:featureMember>
   <gmljp2:GMLJP2RectifiedGridCoverage gml:id="CodeStream0">
   …
     <gmlcov:metadata>
      <gmljp2:Metadata>
        <gmljp2:isoMetadata>
         <gmd:MD_Metadata>
           <gmd:fileIdentifier/>
           <gmd:characterSet/>
           <gmd:parentIdentifier/>
           <gmd:hierarchyLevelName/>
           <gmd:contact/>
           <gmd:dateStamp/>
           <gmd:identificationInfo>
            <gmd:MD_DataIdentification>
              <gmd:citation>
               <gmd:CI_Citation>
                 <gmd:title/>
                 <gmd:alternateTitle/>
              <gmd:date/>
               </gmd:CI_Citation>
              </gmd:citation>
              <gmd:abstract/>
              <gmd:resourceFormat/>
              <gmd:language/>
              <gmd:extent>
               <gmd:EX_Extent/>
              </gmd:extent>
            </gmd:MD_DataIdentification>
           </gmd:identificationInfo>
         </gmd:MD_Metadata>
        </gmljp2:isoMetadata>
      </gmljp2:Metadata>
     </gmlcov:metadata>
   </gmljp2:GMLJP2RectifiedGridCoverage>
  </gmljp2:featureMember>
</gmljp2:GMLJP2CoverageCollection>

Earth Observation data products are generally managed within logical collections that are usually structured to contain data items derived from sensors onboard a satellite or series of satellites. The key characteristics differentiating products within the collections are date of acquisition, location as well as characteristics depending on the type of sensor. For example, key characteristics for optical imagery are the possible presence of cloud, haze, smokes or other atmospheric or on ground phenomena obscuring the image.

The common metadata used to distinguish Earth Observation (EO) products types are presented in this document for generic and thematic EO products (i.e. optical, radar, atmospheric, altimetry, limb-looking and synthesis and systematic products). This can be done with the Earth Observation profile metadata.

 

The following XML illustrates how to do it:


<?xml version=“1.0” encoding=“UTF-8”?>
<gmljp2:GMLJP2CoverageCollection gml:id="JPEG2000_0">
  <gmljp2:featureMember>
   <gmljp2:GMLJP2RectifiedGridCoverage gml:id="CodeStream0">
     <gmlcov:metadata>
      <gmljp2:Metadata>
        <gmljp2:eopMetadata>
         <eop:EarthObservation
xmlns:eop="http://www.opengis.net/eop/2.0"
             xmlns:om="http://www.opengis.net/om/2.0" gml:id="ID_EOP_1">
           <om:phenomenonTime/>
           <om:resultTime/>
           <om:procedure/>
           <om:observedProperty xlink:href="#params1"
xmlns:xlink="http://www.w3.org/1999/xlink"/>
           <om:featureOfInterest/>
           <om:result/>
           <eop:metaDataProperty>
            <eop:EarthObservationMetaData>
              <eop:identifier/>
              <eop:acquisitionType>CALIBRATION</eop:acquisitionType>
              <eop:acquisitionSubType/><eop:status>ACQUIRED</eop:status>
            </eop:EarthObservationMetaData>
           </eop:metaDataProperty>
         </eop:EarthObservation>
        </gmljp2:eopMetadata>
      </gmljp2:Metadata>
     </gmlcov:metadata>
   </gmljp2:GMLJP2RectifiedGridCoverage>
lt;/gmljp2:featureMember>
</gmljp2:GMLJP2CoverageCollection>

 

Annex D provides more examples of how metadata (including ISO19115 and Earth Observation Profile) can be embedded in a XML file.

Image annotation

An image annotation can be defined as an association between an annotation entity (e.g. a text label) and an image or some geometric “region” within the image. Annotations can be provided in image coordinates (pixels) in CRS coordinates defined by the GMLCOV reference part (e.g. GML), in a common reference system such as WGS84 (e.g. KML) or in pixel coordinates.

Annotations provide an association between geometric “regions” (0-d, 1-d, 2-d, etc.) in an image and annotation text, imagery, video and feature references. Annotations are deeply linked to styles for visual presentation. An annotation can be thought of as drawing attention to some “region” of an image.

See section 11 for a more complete reference to annotation approaches

Geographic features

Geographic features, e.g. features obtained from an image by image interpretation, can be packaged inside the JPEG 2000 image. Such features may be directly associated with a particular image in the JPEG 2000 file or may be independent of the image altogether.

Geographic features included in a JPEG2000 encoded image using GMLJP2 will be encoded as GML features 3.2 and comply with the rules for GML application schemas as defined in Clause 21 of the OGC 07-036 GML 3.2.1 standard. Encoding of features requires an associated GML application schema.

Feature styling

Geographic features in GML express geographic content. Visual presentation of such geographic features requires a styling mechanism to interpret and transform the GML features into graphical objects (e.g. SVG or KML).

For example, styling rules can be expressed using the following approaches:

•   OGC Styled Layer Descriptors / Symbology Encoding

•   GML default styling

•   KML fragments

Coordinate reference systems

Coverage geometries, the geometric properties of GML features and annotations include coordinates which are interpreted within the context of a coordinate reference system (CRS). According to the rules of GML, the coordinate reference system is specified via URI. This URI may identify the CRS by reference to an authority and an authority maintained code. Alternatively, these URI may identify the physical location of a CRS definition.

References to Coordinate Reference Systems (CRS) may take one of the following forms:

•   Reference to an authority and authority maintained code OGC 07-092r3 and in http://www.opengis.net/def. (Some of them are also defined in http://schemas.opengis.net/definitions/1.1.0/)

•   Reference to CRS definition

Requirement 5    /req/gmlcov-CRS-byref:
In those cases where a CRS is identified by reference to an authority and code, it SHALL be identified by URI following the OGC document 07-092r3 and maintained in http://www.opengis.net/def (URIs of Definitions in OGC Namespace).

In those cases where an actual CRS definition is required, GML provides a grammar for encoding such coordinate reference systems. The coordinate reference system definitions encoded in GML can then be packaged with the JPEG 2000 data (as for features etc.) and referenced from the coverage description or features or can exist externally. This enables both network-centric and standalone implementations of GML and JPEG 2000 to be deployed.

Some coordinate reference systems may require use of a GML coordinate reference system application schema. Mechanisms for referencing and/or transporting GML application schemas are discussed in Clause 9.

 

Requirement 6    /req/gmlcov-RectifiedGridCoverage-CRS:
The RectifiedGridCoverage model of GMLCOV requires the definition of the CRS associated to each coverage.

Note:   GMLJP2 follows the definition of grids in GML 3.2.1 [OGC 07-036] clause 19.2.2:  “When a grid point is used to represent a sample space (e.g. image pixel), the grid point represents the center of the sample space (see ISO 19123:2005, 8.2.2)”. This corresponds with the pixelInCell value of ImageCRS set to CellCenter as specified in ISO 19111. This can be interpreted as the origin of the RectifiedGrid is the centre point of the corner pixel.

Units of measure

Coverage values, properties of GML features and annotations may employ references to units of measure (UoM). According to the rules of GML references to Units of Measure may take one of the following forms:

Reference to an authority and authority maintained code OGC 07-092r3 and in http://www.opengis.net/def. (Some of them are also defined in http://schemas.opengis.net/definitions/1.1.0/)

Reference to UOM definition

Coverage value units are defined in gmlcov:rangeType/swe:DataRecord/swe:uom.

 

Requirement 7    /req/gmlcov-rangetype-uom:
In a JPEG2000 encoded file with coverage values with units of measure, the element tag must occur in the GMLCOV (gmlcov:rangeType/swe:DataRecord/swe:uom).

 

Requirement 8    /req/gmlcov-uom-byref:
In those cases where a UoM is identified by reference to an authority and code, it SHALL be identified by URI following the OGC document 07-092r3 and maintained in http://www.opengis.net/def (URIs of Definitions in OGC Namespace).

Informatively, the definitions of some units of measure and the equivalent URIs are listed in Table 3. Many units can be also specified using EPSG URIs.

The use opengis-URI of UCUM codes are preferred or recommended.
Table 3 — URIs for units-of-measure
OGC URI Meaning Quantity type EPSG URI

http://www.opengis.net/def/uom/OGC/1.0/degree

Angular degree

angle

http://www.opengis.net/def/uom/EPSG/6.3/9102

http://www.opengis.net/def/uom/OGC/1.0/radian

Angular radian

angle

 

http://www.opengis.net/def/uom/OGC/1.0/metre

Length metre

length

http://www.opengis.net/def/uom/EPSG/6.3/9001

http://www.opengis.net/def/uom/OGC/1.0/unity

unitless ratio of two quantities with the same units

scale factor

http://www.opengis.net/def/uom/EPSG/6.3/8805

 

Units of Measure definitions may be optionally included as dictionary entries in an XML box (see Clause 8.) within the JPEG 2000 file. In those cases where an actual UOM definition is required, GML provides a grammar for the encoding of such units of measure. The units of measure definitions encoded in GML can then be packaged with the JPEG 2000 data (as for features etc.) and referenced from the coverage description or features or can exist externally. This enables both network-centric and standalone implementations of GML and JPEG 2000 to be deployed. Mechanisms for referencing and/or transporting GML application schemas are discussed in Clause 10.

 

Nil values

It is often useful to be able to specify the semantic intent for sample values in the imagery, such as for “nodata” pixels or samples (nil values) whose values that were invalid, or not acquired or were clipped due to high or low saturation. Possible reasons for NIL values can be seen in table 4 and some of them are defined in OGC 07-036 section 8.2.3.1.

 

Requirement 9     /req/gmlcov-nil-values:
In a JPEG2000 encoded file with nil-values, the element tag shall occur in the GMLCOV (gmlcov:rangeType/swe:DataRecord/swe:field/swe:Quantity/swe:nilValues) with an appropriate swe:nilValue/@reason to give the client an indication on how to represent them.

 

Requirement 10 /req/gmlcov-nil-reason-byref:
In those cases where the reason is identified by reference to an authority and code, it SHALL be identified by URI following the OGC document [09-046r2]  and maintained in http://www.opengis.net/def (URIs of Definitions in OGC Namespace).

It is the client’s job to interpret such special values; this standard does not require that a client be able to interpret those values.  Informatively, the definitions of some reasons and the equivalent URIs are listed in Table 4.

Table 4 — NIL reasons
OGC URI Meaning How to represent it

http://www.opengis.net/def/nil/OGC/0/AboveDetectionRange

Above detection range

We recommend that the client typically show the pixel as white

http://www.opengis.net/def/nil/OGC/0/BelowDetectionRange

Below detection range

We recommend that the client typically show the pixel as black.

http://www.opengis.net/def/nil/OGC/0/inapplicable

No value available

We recommend rendering in a way that any underlying data should show through, i.e. according to “transparency” rules. If no data is “underneath”, the client should render the default background color.

http://www.opengis.net/def/nil/OGC/0/missing

The correct value is not readily available to the sender of this data. Furthermore, a correct value may not exist

We recommend rendering in a way that any underlying data should show through, i.e. according to “transparency” rules. If no data is “underneath”, the client should render the default background color.

http://www.opengis.net/def/nil/OGC/0/template

The value will be available later

We recommend rendering in a way that any underlying data should show through, i.e. according to “transparency” rules. If no data is “underneath”, the client should render the default background color.

http://www.opengis.net/def/nil/OGC/0/unknown

The correct value is not known to, and not computable by, the sender of this data. However, a correct value probably exists

We recommend rendering in a way that any underlying data should show through, i.e. according to “transparency” rules. If no data is “underneath”, the client should render the default background color.

http://www.opengis.net/def/nil/OGC/0/withheld

The value is not divulged

We recommend that the client show the pixel as black or grey or similar color, so as to indicate that this portion of the image has been masked out on purpose, e.g. for security reasons.

 

Encoding rules for GML in JPEG 2000 (core)

Introduction

This section specifies the requirements that shall be followed when encoding XML data for use within JPEG 2000 files. The primary role of GML in relation to JPEG 2000 is to make the latter into a geographic image. This is accomplished by providing GMLCOV description of the image geometry (DomainSet) and radiometry (RangeType). In addition, GML data can be used, as described in this clause, for the encoding of metadata, geographic features, annotations, annotation and feature styling, and supporting components for coordinate reference systems and unit of measure definitions.

GMLJP2 collections and individual coverages subelement possibilities
Figure : GMLJP2 collections and individual coverages subelement possibilities

 

 

Requirement 11   /req/gmlcov-coverage-collection-container
A GMLJP2 XML description of an image shall have a gmljp2:GMLJP2CoverageCollection as single root element derived from gmlcov:AbstractCoverageType thats as a container for other elements. The sub-elements gml:domainSet, the gml:rangeSet and the gmlcov:rangeType shall be left as blank as possible because these sub-elements have no meaning for the collection (but are inherited from the GMLCOV schema); the domainSet should provide a CRS information (defaulted to WGS84, otherwise the CRS of the single coverage or the common CRS of all coverages included – if the CRS is homogeneous -), and the bounding box for the collection.
Dependency: /req/gmlcov

Child elements of GMLJP2CoverageCollection are described in the following section and in Tables 5 to 6. The structure of the GMLJP2 document is represented as a UML diagram in the Annex B.

 

Requirement 12   /req/gmlcov-coverage-container
For each codestream present in the image single child gmljp2:featureMember derived from gmlcov:AbstractCoverageType (i.e. gmljp2:GMLJP2GridCoverage, gmljp2:GMLJP2RectifiedGridCoverage or gmljp2:GMLJP2ReferenceableGridCoverage) (composed by a description of the gml:domainSet, the gml:rangeSet and the gmlcov:rangeType) shall be provided and populated.
Dependency: /req/gmlcov

 

Requirement 13   /req/gmlcov- metadata
If needed, coverage metadata descriptions (e.g. ISO19115 or EOP) shall be included in the subelement gmlcov:metadata which can be attached to the gmljp2:featureMember derived from gmlcov:AbstractCoverageType.

 

Requirement 14   /req/gml-feature-container
When there are features related to the JPEG 2000 file that should be included (except the GMLCOV part and annotations if any), these features shall be encoded in GML 3.2 and shall be included in either in a child featureElement containing gmljp2:GMLJP2Features (for features common to all codestreams) or from a gmljp2:feature element of the GMLJP2 elements derived from gmljp2:GMLJP2CoverageType (for features that are related to a single codestream).

Note: It is strongly recommended to use the GML xlink.href mechanism to link to big GML document instead of embedding the data inline.

Future extensions of this standard may define concrete GML application schemas to describe features for specific applications.

Requirement 15   /req/annotation-container
When there are annotations related the JPEG 2000 file that should be included, these annotations shall be child elements of the gmljp2:annotation element of the of the GMLJP2 elements derived from gmljp2:GMLJP2CoverageType.

Future extensions of this standard may define specific encoding for transporting annotations for specific applications. See section 11

 

Requirement 16   /req/style-container
When styling information of the features or annotations related the JPEG 2000 file should be included independent from the features, these styles shall be included in a gmljp2:style element of the coverage collection or the individual coverages.

For example, the gmljp2:style element can include an SLD as a style layer description that describes styles of the gmljp2:feature element.

Extensions of this standard can define other sections in the gmljp2:GMLJP2CoverageType in the future.

A specific schema defining the gmljp2 is provided in this standard that includes GMLCOV 1.0, GML 3.2, ISO metadata, DC metadata and EOP metadata. The GMLCOV description is the first part of the XML document.

All child elements in the gmljp2:GMLJP2CoverageType are derived from gml:AssociationAttributeGroup and can be described in-line or by referencing other elements of the same XML or from different XML using xlink.href.

 

Table 5 — Parts of the gmljp2:GMLJP2 CoverageCollection data structure
Name Definition Data type and value Multiplicity and use

Extent

gml:boundedBy

Informative extent of the JPEG image.

gml:BoundingShapeType

Zero or more (optional)

Metadata

gmlcov:metadata

Metadata about the coverage collection

gmljp2:GenericMetadataType (see Table 2)

Zero or more (optional)

Coverage

gmlcov:featureMember

Individual coverage description

gmljp2:GMLJP2CoverageType (see Table 6)

One or more (mandatory)

Features

gmlcov:featureMember

GML features associated with the whole coverage collection that are neither individual coverage description nor annotations

gmljp2:GMLJP2FeaturesType

Zero or more (optional)

Style

style

Common styles applicable to all features.

gmljp2:GenericPropertyWithAssocType that internally allows to any type

Zero or more (optional)

extension

Any other element

gmljp2:GenericPropertyWithAssocType that internally allows to any type

Zero or more (optional)

 

Table 6 — Parts of the Coverage data structure
Name Definition Data type and value Multiplicity and use

Extent

gml:boundedBy

Informative extent of the individual coverage.

gml:BoundingShapeType

Zero or more (optional)

DomainSet

gml:domainSet

Description of spatio-temporal region of interest.

gml:DomainSetType

One or more (mandatory)

RangeSet

gml:rangeSet

Contains a reference to the values of the coverage

gml:RangeSetType

One or more (mandatory)

DataRecord

gmlcov:rangeType

Describes the structure of a coverage's range values

swe:DataRecordPropertyType

One or more (mandatory)

Metadata

gmlcov:metadata

Metadata about the coverage

gmljp2:GenericMetadataType (see Table 2)

Zero or more (optional)

Feature

feature

GML features associated with this coverage that are neither the coverage description nor annotations

gml:FeaturePropertyType

Zero or more (optional)

Annotation

annotation

Annotations over this coverage.

gmljp2:GenericPropertyWithAssocType that internally allows to any type

Zero or more (optional)

Style

style

Styles applicable to features.

gmljp2:GenericPropertyWithAssocType that internally allows to any type

Zero or more (optional)

extension

Any other element

gmljp2:GenericPropertyWithAssocType that internally allows to any type

Zero or more (optional)

 

The following example shows the GMLJP2CoverageCollection root element that this standard introduces as a way to include the mandatory coverage subelement (using GMLCOV; in this case a GMLJP2RectifiedGridCoverage is used) which also allows for metadata (where we can include or reference a metadata element or a complete metadata description), and an optional features (where we can include or reference a feature collection).


<gmljp2:GMLJP2CoverageCollection gml:id="JPEG2000_0" xsi:schemaLocation="http://www.opengis.net/gmljp2/2.0 gmlJP2.xsd"
xmlns:gml="http://www.opengis.net/gml/3.2"
xmlns:gmlcov="http://www.opengis.net/gmlcov/1.0"
xmlns:gmljp2="http://www.opengis.net/gmljp2/2.0"
xmlns:gmd="http://www.isotc211.org/2005/gmd"
xmlns:gco="http://www.isotc211.org/2005/gco"
xmlns:swe="http://www.opengis.net/swe/2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <gml:gridDomain/>
  <gml:rangeSet>
   <gml:File>
       <gml:rangeParameters/>
     <gml:fileName>gmljp2://codestream/0</gml:fileName>
     <gml:fileStructure>inapplicable</gml:fileStructure>
   </gml:File>
  </gml:rangeSet>
  <gmlcov:rangeType/>
  <gmljp2:featureMember>
   <gmljp2:GMLJP2RectifiedGridCoverage gml:id="ID_1">
   <gml:boundedBy>
     <gml:Envelope srsName="http://www.opengis.net/def/crs/EPSG/0/4326"
axisLabels="Lat Long" uomLabels="deg deg" srsDimension="2">
      <gml:lowerCorner>9.9 9.9</gml:lowerCorner>
      <gml:upperCorner>14.9 12.9</gml:upperCorner>
     </gml:Envelope>
   </gml:boundedBy>
   <gml:domainSet>
      <gml:RectifiedGrid gml:id="rg0001_C0002" dimension="2"
            srsName="http://www.opengis.net/def/crs/EPSG/0/4326">
        <gml:limits>
         <gml:GridEnvelope>
           <gml:low>1 1</gml:low>
           <gml:high>3 10</gml:high>
         </gml:GridEnvelope>
        </gml:limits>
        <gml:axisLabels>Lat Long</gml:axisLabels>
        <gml:origin>
         <gml:Point gml:id="P0001"
srsName="http://www.opengis.net/def/crs/EPSG/0/4326">
           <gml:pos>9.9 9.9</gml:pos>
         </gml:Point>
        </gml:origin>
        <gml:offsetVector
srsName="http://www.opengis.net/def/crs/EPSG/0/4326">0 3.71e-005
        </gml:offsetVector>
        <gml:offsetVector
srsName="http://www.opengis.net/def/crs/EPSG/0/4326">-3.71e-005 0
        </gml:offsetVector>
      </gml:RectifiedGrid>
     </gml:domainSet>
     <gml:rangeSet>
      <gml:File>
        <gml:rangeParameters/>
        <gml:fileName>gmljp2://codestream/0</gml:fileName>
        <gml:fileStructure>inapplicable</gml:fileStructure>
      </gml:File>
     </gml:rangeSet>
     <gmlcov:rangeType/>
     <gmlcov:metadata>
      <gmljp2:Metadata>
        <gmljp2:isoMetadata>
      <gmd:MD_Metadata>
           <gmd:fileIdentifier/>
           <gmd:characterSet/>
           <gmd:parentIdentifier/>
           <gmd:hierarchyLevelName/>
           <gmd:contact/>
           <gmd:dateStamp/>
           <gmd:identificationInfo>
            <gmd:MD_DataIdentification>
              <gmd:citation>
               <gmd:CI_Citation>
               <gmd:title/>
               <gmd:alternateTitle/>
               <gmd:date/>
              </gmd:CI_Citation>
              </gmd:citation>
              <gmd:abstract/>
              <gmd:resourceFormat/>
              <gmd:language/>
              <gmd:extent>
               <gmd:EX_Extent/>
              </gmd:extent>
            </gmd:MD_DataIdentification>
           </gmd:identificationInfo>
         </gmd:MD_Metadata>
        </gmljp2:isoMetadata>
      </gmljp2:Metadata>
     </gmlcov:metadata>
   </gmljp2:GMLJP2RectifiedGridCoverage>
  </gmljp2:featureMember>
   <gmljp2:featureMember>
   <gmljp2:GMLJP2Features gml:id="ID_FE_2">
     <gmljp2:feature>
      <gml:FeatureCollection gml:id="ID_07">
        <gml:featureMember>
         <gml:Observation gml:id="ID_08">
           <gml:validTime/>
           <gml:resultOf/>
         </gml:Observation>
        </gml:featureMember>
      </gml:FeatureCollection>
     </gmljp2:feature>
   </gmljp2:GMLJP2Features>
  </gmljp2:featureMember>
</gmljp2:GMLJP2CoverageCollection>

GMLCOV for JPEG2000

GMLCOV defines the associated JPEG 2000 file as a geographic 2D coverage.

Such coverage descriptions are based directly on the GMLCOV namespace gmlcov and do not require to define a specific application schema for each JPEG 2000 instance. There can be only ONE element of the gmlcov:AbstractCoverageType per codestream even though the GMLCOV element can describe more than one field (band) if the codestream also describes more than one filed or band. Clause 9 provides details on the mapping of coverage description instances and codestreams in the multiple codestream case.

Requirement 17   /req/filename-codestream
The fileName subelement of the rangeSet in the coverage description shall contain a reference to the corresponding codestream in the JPEG2000 file. The fileStructure subelement shall be “inapplicable”.

The following sketches a valid GMLCOV XML file that describes a single field (one band) embedded in a JPEG2000 XML box. Please note the use of fileName and fileStructure:


<gmljp2:GMLJP2CoverageCollection gml:id="JPEG2000_0"
     xmlns:gml="http://www.opengis.net/gml/3.2"
     xmlns:gmlcov="http://www.opengis.net/gmlcov/1.0"
     xmlns:gmljp2="http://www.opengis.net/gmljp2/2.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://www.opengis.net/gmljp2/2.0 gmlJP2.xsd">
  <gml:gridDomain/>
  <gml:rangeSet>
   <gml:File>
       <gml:rangeParameters/>
     <gml:fileName>gmljp2://codestream/0</gml:fileName>
     <gml:fileStructure>inapplicable</gml:fileStructure>
   </gml:File>
  </gml:rangeSet>
  <gmlcov:rangeType/>
  <gmljp2:featureMember>
   <gmljp2:GMLJP2RectifiedGridCoverage gml:id="ID_1">
     <gml:boundedBy>
      <gml:Null>withheld</gml:Null>
     </gml:boundedBy>
     <gml:domainSet>
      <gml:RectifiedGrid gml:id="rg0001_C0002" dimension="2"
            srsName="http://www.opengis.net/def/crs/EPSG/0/4326">
        <gml:limits>
         <gml:GridEnvelope>
           <gml:low>0 0</gml:low>
           <gml:high>6208 3103</gml:high>
         </gml:GridEnvelope>
        </gml:limits>
        <gml:axisLabels>Lat Long</gml:axisLabels>
        <gml:origin>
         <gml:Point gml:id="P0001"
srsName="http://www.opengis.net/def/crs/EPSG/0/4326">
           <gml:pos>41.4756576954751 2.04345415526392</gml:pos>
         </gml:Point>
        </gml:origin>
        <gml:offsetVector
srsName="http://www.opengis.net/def/crs/EPSG/0/4326">0 3.71e-005</gml:offsetVector>
        <gml:offsetVector
srsName="http://www.opengis.net/def/crs/EPSG/0/4326">-3.71e-005 0</gml:offsetVector>
      </gml:RectifiedGrid>
     </gml:domainSet>
     <gml:rangeSet>
      <gml:File>
        <gml:rangeParameters/>
        <gml:fileName>gmljp2://codestream/0</gml:fileName>
        <gml:fileStructure>inapplicable</gml:fileStructure>
      </gml:File>
     </gml:rangeSet>
     <gml:coverageFunction>
      <gml:MappingRule/>
     </gml:coverageFunction>
     <gmlcov:rangeType/>
    </gmljp2:GMLJP2RectifiedGridCoverage>
  </gmljp2:featureMember>
</gmljp2:GMLJP2CoverageCollection>

Packaging GML in JPEG 2000 (core)

Introduction

This clause describes the mechanisms for packaging coverage information data and eventual GML application schemas inside JPEG 2000 data files. It also provides rules for encoding references between GML instances and GML application schemas, and between GML instances. Finally it provides the rules for associating coverage descriptions (see Clauses 6 and 7) and JPEG 2000 codestreams.

Use of JPEG 2000 boxes

The JPEG 2000 file format is defined as a contiguous set of boxes, where a box is defined as an abstract data structure used to hold arbitrary data. Different types of boxes are defined to contain different kinds of data: for example, the codestream and XML box types are used to contain, respectively, wavelet-encoded image data and XML data.  Additionally, certain types of boxes known as super-boxes may contain other boxes.

This standard requires the use of three types of boxes in order to store and reference GML data in the JPEG 2000 file.

•   The ASOC (Association) super-box contains at least two child boxes and is used to declare a relationship between the first child box and the remaining children.

•   The LBL (Label) box is used to contain a short string, typically serving as an identifier.

•   The XML box is used to contain XML data, e.g. GMLJP2 instances.

 

Requirement 18   /req/xml-boxes
GMLJP2 instance data shall be stored in XML boxes. In order to allow references between these XML boxes, each XML box shall be associated with a label inside of an association box. This label serves as an identifier by which the XML data can be referenced.

All GML instance, schema, and dictionary data is stored in XML boxes or will be linked to external files. An example JPEG 2000 file with an association box structure is shown in Figure 4.

 

Requirement 19   /req/xml-box-signal
The use of JPX format extension from JPEG2000 Part 2 (Annex M) shall be signalled with the value ‘jpx\040’ in the brand field of the file type box and the presence of GMLJP2 XML data shall be signalled with the value 67 in a reader requirement box.

For convenience, M6.2 de 15444-2 is repeated here:

- M.6.2 Expression representation

The expressions of the requirements to fully understand all aspects, and to display the file as desired are stored in the Reader Requirements box, which is a mandatory feature of a JPX file format. If the Reader Requirements box is not present, the File Type box describes the full functionality of the file.

- in Table M.13. The Reader Requirement Box is identified as Required.

•   (however) in case of absence, “If the Reader Requirements box is not present, the File Type box describes the full functionality of the file.”

•   use of  “Brand field in File type box”  :  The brand field shall always be “jpx\040” for JPX files.

According to Clause 3.2 of [ISO N2887], the presence of GML data in a JPX file be signaled using the Reader Requirements box (defined in Annex M of [ISO 15444-2]) with a value of 67 (XMLGISMetaData) as the SF (standard flag) in paragraph M.11.1, meaning that the file contains GML data based on the OGC standard. The data is then packaged in XML data which is annotated with JPX labels, where the annotation works via the “association” (ASOC) box of part 2. The topmost ASOC box will contain a LBL box whose content is “gml.data”, and several additional ASOC boxes of which each of them contains a LBL box giving a name to the data, and an XML box containing the actual GML payload data.

The Reader Requirements Box should respect the required fields structure as defined in the ISO 15444-2 standard. The FUAM field should be correctly set to interpret the standard flag value for the GML content.

Example JPEG 2000 file and boxes
Figure : Example JPEG 2000 file and boxes

Use of JPEG 2000 Part I and Part II extensions

It is recommended to use the JPEG2000 Part I (ISO 15444-1) that is widely implemented and defines the core JPEG 2000 and that includes the syntax of the JPEG 2000 codestream.

Because the association and label boxes are defined by Part II of the JPEG 2000 standard, all GMLJP2 files SHALL implement the JPX file format as defined in [ISO 15444-2], to the extent required to support those box types.

NOTE:    These two box types are the only Part II extensions used by the GMLJP2 standard.

Requirement 20   /req/jpx-jp2-compatible
GMLJP2 will use JPX format specified in JPEG2000 part II Annex M, and shall consequently signal with the value ‘jpx\040’ in the compatibility list of the File Type box (see Annex M.8 of [ISO 15444-2]. Moreover and except if opacity channels (if any) are specified outside the scope of JP2, GMLJP2 files shall be written as JP2 compatible by including the string ‘jp2\040’ within the compatibility list of the File Type box (see Annex I of [ISO 15444-1] and Annex M.2.1 of [ISO 15444-2]).

Note:   In order to promote interoperability and support by JPX reader, it is highly recommended to only use the baseline set of JPX features, and to signal this compliance to JPX baseline with the value ‘jpxb’ (0x6a70 7862) in the compatibility list of the File Type box (see Annex M.9.2 of [ISO 15444-2]).

 

Requirement 21   /req/jp2-outer-box
The single “outer” association box contains a first box which is a label box. This shall contain the label gml.data. The outer association box shall contain at least one additional association box containing GML instance data. This association box shall have a first box that is a label box with the label gml.root-instance and an XML box. This XML box shall only contain GML instance data for the following items and shall not contain XML schemas, CRS dictionaries or units of measure dictionary instance.

Note:   GML instance data can be composed by a coverage description, metadata instances, annotation instances and feature instances and future extended elements.

The minimal structure case for the XML box packaging for a single codestream and for a multiple codestream is the same as shown in figure 6.

Minimal packaging of GML boxes
Figure : Minimal packaging of GML boxes

XML schemas, CRS dictionaries or units of measure dictionaries can be stored as external XML files and referenced form the GMLJP2 file. In case that there is a need for storing them in the file, any number of association boxes may follow the gml.root-instance box as containers for them.

 

Requirement 22   /req/jp2-other-inner-box
Each of the association boxes, other than the gml.root-instance and gml.data boxes, shall have a label (the first box shall be a label box in each case).  The value of the label is any value allowed by JPEG 2000 Part II.

This label is used in references to the XML box content using the mechanism described in Clause 10.6.

Packaging of GML Boxes for CRS dictionaries, XML schemas, and units of measure dictionaries stored internally
Figure : Packaging of GML Boxes for CRS dictionaries, XML schemas, and units of measure dictionaries stored internally

Note: the above boxes can also be stored as external XML files and referenced from the GMLJP2 file.

XML references in a JPEG2000 package (core)

This clause describes the GMLJP2 URI syntax, a URI structure for references to schemas (xsi:schemaLocation) and instance elements or dictionary instance boxes, other XML data, or non-XML data through the use of URI references, e.g. xlink:href, gml:uom, gml:srsName, gml:resultOf.  These can reside either externally or within the JPEG 2000 file. GMLJP2 URIs are required for ALL references.

References to XML schemas

GML instance data may reference a supporting XML schema (specifically, a GML application schema) through the XML schema location attribute (xsi:schemaLocation) whose value is a list of URI pairs (namespace, schemaLocation). 

This standard has been crafted in a way that common uses (such as geographical georeferencing or including ISO metadata) do not require creating a specific application schema for each JPEG2000 instance and just using elements from the general schemas and referencing the general schemas could be enough. Nevertheless, it is possible that you need to define own GML feature types and feature collections or you own metadata schema. In this case, the specific application schema can be accessible in the web or can be included in a different XML box.

 

Requirement 23   /gmljp2-schemalocation:
   When XML schema definitions are embedded in a JPEG200 file, then schemaLocation attribute is mandatory.

 

Requirement 24   /req/gmljp2-xmlSchema
The GMLJP2 file processor should follow the assessment rules for schemas as laid out in XML Schema Specification, Part I Structures, Section 4.3.2.

For convenience these rules are repeated here:

Given a namespace name (or none) and (optionally) a URI reference from xsi:schemaLocation or xsi:noNamespaceSchemaLocation, schema-aware processors may implement any combination of the following strategies, in any order:

1.     Do nothing, for instance because a schema containing components for the given namespace name is already known to be available, or because it is known in advance that no efforts to locate schema documents will be successful (for example in embedded systems);

2.     Based on the location URI, identify an existing schema document, either as a resource which is an XML document or a <schema> element information item, in some local schema repository;

3.     Based on the namespace name, identify an existing schema document, either as a resource which is an XML document or a <schema> element information item, in some local schema repository;

4.     Attempt to resolve the location URI, to locate a resource on the web which is or contains or references a <schema> element;

5.     Attempt to resolve the namespace name to locate such a resource.

Whenever possible, configuration and/or invocation options for selecting and/or ordering the implemented strategies should be provided.

External references

References to external application schemas are possible and recommended for the common general schemas.

 

Requirement 25   /req/external-references
When an external application schema is referenced in the xsi:schemaLocation attribute or any resource is referenced in an xlink:href, it shall be referenced using a http://reference type to an XML instance, a relative reference shall be interpreted as relative to the jpeg2000 file position.

Note that the relative reference meaning has been changed from the previous version of this standard. Where (in the previous version) the reference to the schemaLocation was done by URI using the GMLJP2 URI convention, with such references referring to schemas within the JPEG 2000 file.

Internal references within a JPEG2000 file.

Requirement 26 /req/internal-references
The structure of an internal GMLJP2 URI shall be as follows: gmljp2://[resource.type]/[resource.id][#fragment-id]

where

•gmljp2 is the URI scheme

•resource.type is one of the following:

•   xml codestream values for resource.id depend upon the value of resource.type, as explained below.

•values for fragment-identifier depend on the value of resource.type

Internal references to XML boxes within a JPEG2000 file

 

Requirement 27 /req/internal-references-to-xmlbox
When an specific application schema (xsi:schemaLocation) or any resource referenced (e.g. xlink:href) is included in a different XML Box it shall be referenced using a full reference. The URIs with a resource.type of xml identify a particular XML data box in the JPEG 2000 file shall have the following form: gmljp2://xml/[label] or gmljp2://xml/[label][#id]

where [label] identifies a labeled XML box within the gml.data box, and [id] is a GML id of an element inside the XML. If [id] is omitted, then the URI refers to the entire XML document.

Dependencies: /req/internal-references

Note that label text is arbitrary and is constrained only by the syntactical restrictions of the URI [IETF 2396] and of the label box in JPEG 2000 [ISO 15444-2].

GML instance documents may use URIs of this form to import schema, dictionary entries, or other XML data stored in the gml.data box.

 

EXAMPLE 1 gmljp2://xml/myschema.xsd

Identifies a schema in the XML box labelled myschema.xsd.

EXAMPLE 2 gmljp2://xml/uom.xml

Identifies a UOM dictionary in the XML box labelled uom.xml.

EXAMPLE 3 gmljp2://xml/uom.xml#meter

Identifies the meter entry in the UOM dictionary in the XML box labelled uom.xml.

Note that instances, e.g. GML elements, can only be referenced within labeled boxes.

This is an example of a notation that follows the above requirements:


<gmljp2:GMLJP2CoverageCollection gml:id="JPEG2000_0"
     xmlns:gml="http://www.opengis.net/gml/3.2"
     xmlns:gmlcov="http://www.opengis.net/gmlcov/1.0"
     xmlns:gmljp2="http://www.opengis.net/gmljp2/2.0"
     xmlns:swe="http://www.opengis.net/swe/2.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://www.opengis.net/gmljp2/2.0 gmlJP2.xsd">
  <gml:gridDomain/>
  <gml:rangeSet>
   <gml:File>
       <gml:rangeParameters/>
     <gml:fileName>gmljp2://codestream/0</gml:fileName>
     <gml:fileStructure>inapplicable</gml:fileStructure>
   </gml:File>
  </gml:rangeSet>
  <gmlcov:rangeType/>
  <gmljp2:featureMember>
   <gmljp2:GMLJP2RectifiedGridCoverage gml:id="ID_1">
     <gml:domainSet>
       <gml:RectifiedGrid gml:id="rg0001_C0002" dimension="2"
            srsName="http://www.opengis.net/def/crs/EPSG/0/4326">
        <gml:limits>
         <gml:GridEnvelope>
           <gml:low>0 0</gml:low>
           <gml:high>6731 8983</gml:high>
         </gml:GridEnvelope>
        </gml:limits>
        <gml:axisLabels>Lat Long</gml:axisLabels>
        <gml:origin>
         <gml:Point gml:id="P0001"
srsName="http://www.opengis.net/def/crs/EPSG/0/4326">
           <gml:pos>41.4756576954751 2.04345415526392</gml:pos>
         </gml:Point>
        </gml:origin>
<gml:offsetVector
srsName="http://www.opengis.net/def/crs/EPSG/0/4326" >0 3.71e005</gml:offsetVector>
        <gml:offsetVector
srsName="http://www.opengis.net/def/crs/EPSG/0/4326">-3.71e-005 0</gml:offsetVector>
      </gml:RectifiedGrid>
     </gml:domainSet>
     <gml:rangeSet>
      <gml:File>
        <gml:rangeParameters/>
        <gml:fileName>gmljp2://codestream/0</gml:fileName>
        <gml:fileStructure>inapplicable</gml:fileStructure>
      </gml:File>
     </gml:rangeSet>
     <gmlcov:rangeType/>
     <gmljp2:feature>
      <my_srf:RoadCollection gml:id="ID_ROADS"     xmlns:my_srf=" http://www.bob.bob/example1"
  xsi:schemaLocation="http://www.bob.bob/example1 gmljpg2://xml/SpringRoadField.xsd">
        <my_srf:road>
         <my_srf:Road gml:id="ID_ROAD">
           <my_srf:position>
            <gml:LineString  gml:id="ID_LINEROAD">
              <gml:pos>1 1</gml:pos>
              <gml:pos>2 9</gml:pos>
            </gml:LineString>
           </my_srf:position>
           <my_srf:width>4.1</my_srf:width>
        <my_srf:name>M30</my_srf:name>
         </my_srf:Road>
        </my_srf:road>
      </my_srf:RoadCollection>
     </gmljp2:feature>
   </gmljp2:GMLJP2RectifiedGridCoverage>
  </gmljp2:featureMember>
</gmljp2:GMLJP2CoverageCollection>

Internal references to codestream within a JPEG2000 file

 

Requirement 28 /req/internal-references-to-codestream
A codestream shall be referenced using a full reference. URIs with resource.type of codestream identifying a particular codestream. These URIs have the following form: gmljp2://codestream/[codestream-number]

where [codestream-number] is an integer, greater than or equal to 0, that identifies a particular codestream in the JPEG 2000 file.  By convention, codestreams are to be numbered in lexical order of their appearance in the file.

GML instance documents may use URIs of this form to refer to particular codestreams in the file.

EXAMPLE 1 gmljp2://codestream/0

Identifies the first codestream in the file.

EXAMPLE 2 gmljp2://codestream/1

Identifies the second codestream in the file.

NOTE:  Care must be taken to preserve the integrity of such numerical codestream references when restructuring or rewriting the JPEG 2000 file in such a way that codestreams could get added, removed, or reordered; in other words, the codestream IDs are always in a strictly increasing order starting from 0.

Codestream references

Single codestream case

A single JPEG 2000 codestream is used to represent a single geographic 2D coverage. The GML data (instance data, schemas) associated within this codestream are contained in an association box as discussed in the next clause.

Minimal instance example for a single codestream

The GML data at the minimum, consists of a root gmljp2:JPEG2000Coverage which is a member of a codestream-specific coverage information, which in turn contains a GMLCOV gmlcov:AbstractCoverage member. This simple RectifiedGridCoverage example given below demonstrates the GMLCOV portion of the encoding of a georectified image as a GMLCOV coverage.

 

<gmljp2:GMLJP2CoverageCollection gml:id="JPEG2000_0"
     xmlns:gml="http://www.opengis.net/gml/3.2"
     xmlns:gmlcov="http://www.opengis.net/gmlcov/1.0"
     xmlns:gmljp2="http://www.opengis.net/gmljp2/2.0"
     xmlns:swe="http://www.opengis.net/swe/2.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://www.opengis.net/gmljp2/2.0 gmlJP2.xsd">
  <gml:gridDomain/>
  <gml:rangeSet>
   <gml:File>
       <gml:rangeParameters/>
     <gml:fileName>gmljp2://codestream</gml:fileName>
     <gml:fileStructure>inapplicable</gml:fileStructure>
   </gml:File>
  </gml:rangeSet>
  <gmlcov:rangeType/>
  <gmljp2:featureMember>
   <gmljp2:GMLJP2RectifiedGridCoverage gml:id="CodeStream">
     <gml:boundedBy>
      <gml:Envelope srsName="http://www.opengis.net/def/crs/EPSG/0/4326"
        axisLabels="Lat Long" uomLabels="deg deg" srsDimension="2">
   <gml:lowerCorner>12 12</gml:lowerCorner>
   <gml:upperCorner>13.5 13.5</gml:upperCorner>
      </gml:Envelope>
     </gml:boundedBy>
   <gml:domainSet>
      <gml:RectifiedGrid gml:id="rg0001_C0002" dimension="2"
            srsName="http://www.opengis.net/def/crs/EPSG/0/4326">
        <gml:limits>
         <gml:GridEnvelope>
           <gml:low>0 0</gml:low>
           <gml:high>8718 7812</gml:high>
         </gml:GridEnvelope>
        </gml:limits>
        <gml:axisLabels>Lat Long</gml:axisLabels>
        <gml:origin>
         <gml:Point gml:id="P0001"
srsName="http://www.opengis.net/def/crs/EPSG/0/4326">
           <!– “Upper-left” image origin –>
           <gml:pos>9.9 9.9</gml:pos>
         </gml:Point>
        </gml:origin>
        <gml:offsetVector
srsName="http://www.opengis.net/def/crs/EPSG/0/4326">0 1
        </gml:offsetVector>
        <gml:offsetVector
srsName="http://www.opengis.net/def/crs/EPSG/0/4326">-1 0
        </gml:offsetVector>
      </gml:RectifiedGrid>
     </gml:domainSet>
     <gml:rangeSet>
      <gml:File>
        <gml:rangeParameters/>
        <gml:fileName>gmljp2://codestream</gml:fileName>
        <gml:fileStructure>inapplicable</gml:fileStructure>
      </gml:File>
     </gml:rangeSet>
     <gmlcov:rangeType>
      <swe:DataRecord>
        <swe:field name="red">
         <swe:Quantity definition="http://opengis.net/def/property/OGC/0/Radiance">
           <swe:description>Red Channel</swe:description>
           <swe:nilValues>
            <swe:NilValues id="NIL_VALUES">
              <swe:nilValue reason="http://www.opengis.net/def/nil/OGC/0/BelowDetectionRange">0</swe:nilValue>
              <swe:nilValue reason="http://www.opengis.net/def/nil/OGC/0/AboveDetectionRange">255</swe:nilValue>
            </swe:NilValues>
           </swe:nilValues>
           <swe:uom code="W/cm2"/>
           <swe:constraint>
            <swe:AllowedValues id="VALUE_SPACE">
              <swe:interval>0 255</swe:interval>
              <swe:significantFigures>3</swe:significantFigures>
            </swe:AllowedValues>
           </swe:constraint>
         </swe:Quantity>
        </swe:field>
      </swe:DataRecord>
     </gmlcov:rangeType>
   </gmljp2:GMLJP2RectifiedGridCoverage>
  </gmljp2:featureMember>
</gmljp2:GMLJP2CoverageCollection>

Note that the rangeSet is a required member of RectifiedGridCoverage, and so it must be included in the RectifiedGridCoverage. However, for GMLJP2 the range data is actually stored within the codestream in the JPEG 2000 file: there is no “file structure” to be specified.  The rangeSet members are therefore set to “inapplicable” except fileName that is set to gmljp2://codestream/{codestream_number}.

Multiple codestreams case

The multiple codestream encoding enables multiple images of the same or different type (different geometry, different radiometry) to be packaged in a single JPEG 2000 file. Stereo image pairs, triangulation blocks, orthoimagery with associated digital elevation models, and multi-source image assessment are examples of the use of multiple codestreams.

Note: The order of the coverage elements in the GMLJP2CoverageCollection will usually be the same than the codestreams but the actual association of a gmljp2:JPEG2000Coverage element with its codestream is done by the fileName element in the rangeSet.

Some parts of the GMLJP2 XML could be repeated in the description of several codestreams. In this case, the use of gml:id and xlink:href general GML mechanism can be used to reference elements and avoid duplication.

The root element GMLJP2CoverageCollection can describe a collection of codestreams.. The first codestream is described by the 1st sub-elements of the collection and the next ones by further GMLJP2Coverage elements. These nested coverage collection description is shown in the example.

Minimal instance example for multiple codestreams

The GML data, at the minimum, consists of a root gmljp2: GMLJP2CoverageCollection for each codestream.


<gmljp2:GMLJP2CoverageCollection gml:id="JPEG2000_0"
     xmlns:gml="http://www.opengis.net/gml/3.2"
     xmlns:gmlcov="http://www.opengis.net/gmlcov/1.0"
     xmlns:gmljp2="http://www.opengis.net/gmljp2/2.0"
     xmlns:swe="http://www.opengis.net/swe/2.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://www.opengis.net/gmljp2/2.0 gmlJP2.xsd">
  <gml:gridDomain/>
  <gml:rangeSet>
   <gml:File>
       <gml:rangeParameters/>
     <gml:fileName>gmljp2://codestream</gml:fileName>
     <gml:fileStructure>inapplicable</gml:fileStructure>
   </gml:File>
  </gml:rangeSet>
  <gmlcov:rangeType/>
  <gmljp2:featureMember>
   <gmljp2:GMLJP2RectifiedGridCoverage gml:id="CodeStream0">
   <gml:domainSet>
      <gml:RectifiedGrid gml:id="RG_CodeStream0" dimension="2"
            srsName="http://www.opengis.net/def/crs/EPSG/0/4326">
        <gml:limits>
         <gml:GridEnvelope>
           <gml:low>0 0</gml:low>
           <gml:high>8718 7812</gml:high>
         </gml:GridEnvelope>
        </gml:limits>
        <gml:axisLabels>Lat Long</gml:axisLabels>
        <gml:origin>
         <gml:Point gml:id="P0001" srsName="http://www.opengis.net/def/crs/EPSG/0/4326">
           <!– “Upper-left” image origin –>
           <gml:pos>9.9 9.9</gml:pos>
         </gml:Point>
        </gml:origin>
        <gml:offsetVector srsName="http://www.opengis.net/def/crs/EPSG/0/4326">0 1
        </gml:offsetVector>
        <gml:offsetVector srsName="http://www.opengis.net/def/crs/EPSG/0/4326">-1 0
        </gml:offsetVector>
      </gml:RectifiedGrid>
     </gml:domainSet>
     <gml:rangeSet>
      <gml:File>
        <gml:rangeParameters/>
        <gml:fileName>gmljp2://codestream/0</gml:fileName>
        <gml:fileStructure>inapplicable</gml:fileStructure>
      </gml:File>
     </gml:rangeSet>
     <gmlcov:rangeType>
      <swe:DataRecord>
        <swe:field name="codestream0">
        </swe:field>
      </swe:DataRecord>
     </gmlcov:rangeType>
   </gmljp2:GMLJP2RectifiedGridCoverage>
  </gmljp2:featureMember>
   <gmljp2:featureMember>
   <gmljp2:GMLJP2RectifiedGridCoverage gml:id="CodeStream1">
   <gml:domainSet>
      <gml:RectifiedGrid gml:id="RG_CodeStream1" dimension="2"
            srsName="http://www.opengis.net/def/crs/EPSG/0/4326">
        <gml:limits>
         <gml:GridEnvelope>
           <gml:low>0 0</gml:low>
           <gml:high>8718 7812</gml:high>
         </gml:GridEnvelope>
        </gml:limits>
        <gml:axisLabels>Lat Long</gml:axisLabels>
        <gml:origin/>
        <gml:offsetVector/>
      </gml:RectifiedGrid>
     </gml:domainSet>
     <gml:rangeSet>
      <gml:File>
        <gml:rangeParameters/>
        <gml:fileName>gmljp2://codestream/1</gml:fileName>
        <gml:fileStructure>inapplicable</gml:fileStructure>
      </gml:File>
     </gml:rangeSet>
     <gmlcov:rangeType>
      <swe:DataRecord>
        <swe:field name="codestream0">
        </swe:field>
      </swe:DataRecord>
     </gmlcov:rangeType>
   </gmljp2:GMLJP2RectifiedGridCoverage>
  </gmljp2:featureMember>
  <gmljp2:featureMember>
   <gmljp2:GMLJP2RectifiedGridCoverage gml:id="CodeStream2">
   <gml:domainSet>
   <gml:RectifiedGrid gml:id="RG_CodeStream2" dimension="2"
            srsName="http://www.opengis.net/def/crs/EPSG/0/4326">
        <gml:limits>
         <gml:GridEnvelope>
           <gml:low>0 0</gml:low>
           <gml:high>8718 7812</gml:high>
         </gml:GridEnvelope>
        </gml:limits>
        <gml:axisLabels>Lat Long</gml:axisLabels>
        <gml:origin/>
        <gml:offsetVector/>
      </gml:RectifiedGrid>
  </gml:domainSet>
     <gml:rangeSet>
      <gml:File>
        <gml:rangeParameters/>
     <gml:fileName>gmljp2://codestream/2</gml:fileName>
        <gml:fileStructure>inapplicable</gml:fileStructure>
      </gml:File>
     </gml:rangeSet>
     <gmlcov:rangeType>
      <swe:DataRecord>
        <swe:field name="codestream0">
        </swe:field>
      </swe:DataRecord>
     </gmlcov:rangeType>
   </gmljp2:GMLJP2RectifiedGridCoverage>
  </gmljp2:featureMember>
</gmljp2:GMLJP2CoverageCollection>

Image annotation (informative)

Introduction

In general, an annotation is a combination of a representation feature of interest (FOI) in the real world, a styled label that annotates the feature (such as a text label, an image, a video, graphics, audio, etc) and an association (abstract or a graphical explicit representation e.g. a line or an arrow) (see figure 7). Annotations are intended for visualization so that they are deeply link with visualization styles.

In this standard, an annotation is an association between a label that annotates a JPEG2000 image or some geometric feature of interest (FOI) within the JPEG2000 image. The geometric properties of the FOI may be defined by a GML geometry, which can be a point, line string, etc in the same CRS coordinates than the image. If no geometric region is defined the annotation applies to the entire image, i.e. the JPEG 2000 codestream. Labels associated to FOIs may be defined using different encodings depending of the software that generates them.

As an illustrative example, this standard is proposing the use of a combination of GML and KML. The reason behind this is to complement the limitations of GML and KML. Regions of Interest and embedded geographic features (typed objects) are best expressed in GML since GML has a precise notion of feature types (while KML does not) and GML supports arbitrary CRS (current versions of KML only supports WGS84). HTML  provides symbology for labels but the current versions of GML does not provide a recognized symbology mechanism (support for SVG introduced in GML 3.0 has been deprecated in newer versions). For the FOI the standard recommends the use GML (the application can portrayal in its own symbolization or cannot assume that the user will recognize them on the image). To describe the label to annotate the FOI KML is recommended (the application that portrayals it will be required to dynamically re-project the WGS84 KML data into the JPEG2000 CRS before presenting it). In addition, an explicit graphical association between the ROI and the label (e.g. a line or a curve) can be provided (the application that portrayals it can represent it if needed).

An alternative way of doing this mapping of the GML (feature type) to a SLD/SE symbolization that can also be packaged in the GMLJP2 so fulfilling requirements for disconnected systems. In this case, KML label could be generated on the fly from the GML and SDL/SE

In the future, the use of SLD/SE may enable the creation of a Portrayal Registry in which symbols, styles, etc are stored and reused by several JPEG2000 images.

Single annotation represented on top of a JPEG2000 image
Figure : Single annotation represented on top of a JPEG2000 image

Use-cases

GMLJP2 is intended to handle a variety of annotation use cases including the following:

Example 1: Creating a GMLJP2 annotated image:

•   Capture any object types (e.g. building – classify the building etc.) (GML)

•   Apply a style to generate a symbolization (KML)

•   Write the GML, KML and style (SLD/SE) into the GMLJP2 package

 

Example 2: Viewing a GMLJP2 annotated image

•   Retrieve the symbolization (KML) from the GMLJP2 and visualize as image overlay

•   Example 3: Apply user specified style to annotation in a GMLJP2 image

•   Retrieve the object type (GML) from the GMLJP2 and apply User style to generate KML (or SVG etc) and then visualize as image overlay.

•   Example 4: Apply default style to annotations in a GMLJP2 image

•   Retrieve the object type (GML), SLD/SE from the GMLJP2 and apply the SLD/SE to generate KML and then visualize as image overlay.

•   Currently, this standard does not provide any concrete annotation schema.

Annex A Abstract Test Suite
(normative)

A GMLJP2 implementation must satisfy the following system characteristics to be conformant with this specification.

A.1                          Conformance Test Class: core

The OGC URI identifier of this conformance class is:

http://www.opengis.net/spec/GMLJP2/2.0/conf/core

Tests identifiers below are relative to

http://www.opengis.net/spec/GMLJP2/2.0/conf/core

A.1.1                       GMLJP2 file contains a GMLCOV coverage

Test id:

/conf/core/gmljp2-gmlcov

Test Purpose:

Requirement /req/gmljp2-gmlcov: A GMLJP2 encoded file conformant to this standard shall use a GMLCOV coverage description following the OGC12-108 GML Application Schema - Coverages - JPEG2000 Coverage Encoding Extension to describe the coverage collection and to describe the individual coverages.

Test method:

Check if the GMLJP2 XML instances use elements form the http://www.opengis.net/gmlcov/1.0. Test passes if http://www.opengis.net/gmlcov/1.0 is used.

 

A.1.2                       GMLJP2 coverage metadata coherence with JPEG2000 header

Test id:

/conf/core/header-precedence

Test Purpose:

Requirement /req/header-precedence: Coverage metadata in a GMLJP2 XML instance about the internal structure of the JPEG2000 file (e.g. number of codestreams, number of rows and columns of a codestream) shall be coherent with the JPEG2000 binary header information. In case of discrepancies the JPEG2000 binary headers information takes precedence.

Test method:

Verify that the image headers values are the same that are included in the GMLJP2 XML instance. Test passes if they are the same.

 

A.1.3                       GMLJP2 file GMLCOV precedence

Test id:

/conf/core/gmlcov-precedence

Test Purpose:

Requirement /req/gmlcov-precedence: gmlcov:metadata information shall be coherent with the corresponding GMLCOV information in gml:domainSet or gmlcov:rangeType (e.g. geometric or radiometric information in ISO19139 format).

Test method:

Verify if the redundant information in the gmlcov:metadata and in the corresponding elements of gmlcov is the same. Test passes if it is the same.

 

A.1.4                       Usage of gmlcov:metadata instead of gml:metaDataProperty

Test id:

/conf/core/gml-metaDataProperty

Test Purpose:

Requirement /req/gml-metaDataProperty: gml:metaDataProperty shall neither encode metadata about the coverage collection nor the individual coverages.

Test method:

Verify that gml:metaDataProperty is not used in the coverage collection and in the individual coverages. Test passes if it is not used.

 

A.1.5                       CRS is well defined externally by URI

Test id:

/conf/core/gmlcov-CRS-byref

Test Purpose:

Requirement /req/gmlcov-CRS-byref: CRS SHALL be identified by URI following the OGC document 07-092r3 and maintained in http://www.opengis.net/def.

Test method:

Verify that CRS are declared using URIs. Test passes if all CRSs are URIs.

 

A.1.6                       CRS is defined for rectified coverages

Test id:

/conf/core/gmlcov-RectifiedGridCoverage-CRS

Test Purpose:

Requirement /req/gmlcov-RectifiedGridCoverage-CRS

Test method:

Verify that all GMLJP2RectifiedGridCoverage have CRS defined in the domainSet. Test passes all GMLJP2RectifiedGridCoverage have a CRSs defined.

 

A.1.7                       UoM in rangeType are defined when applicable

Test id:

/conf/core/gmlcov-rangetype-uom

Test Purpose:

Requirement /req/gmlcov-rangetype-uom

Test method:

Verify that all swe:DataRecords that declare variables that requires units have them populated (gmlcov:rangeType/swe:DataRecord/swe:uom). Test passes if they are present.

 

 

A.1.8                       UoM are defined by reference

Test id:

/conf/core/gmlcov-uom-byref

Test Purpose:

Requirement /req/gmlcov-uom-byref

Test method:

Verify if all UoM in the GEMLJP2 XML document are defined using URIs. Test passes if all are URIs.

 

A.1.9                       GMLJP2 file gmlcov-nil-values

Test id:

/conf/core/gmlcov-nil-values

Test Purpose:

Requirement /req/gmlcov-nil-values

Test method:

Verify that the tag nil-values have value and a reason. Test passes if all these have it.

 

A.1.10                    Nil-values by reference

Test id:

/conf/core/gmlcov-nil-reason-byref

Test Purpose:

Requirement /req/gmlcov-nil-reason-byref: In those cases where the reason is identified by reference to an authority and code, it SHALL be identified by URI following the OGC document [09-046r2].

Test method:

Verify that the all reasons for nill values are defined as URI’s. Test passes if there are.

 

A.1.11                    GMLJP2 file root is a coverage collection

Test id:

/conf/core/gmlcov-coverage-collection-container

Test Purpose:

Requirement /req/gmlcov-coverage-collection-container

Test method:

Verify that the root element is a gmljp2:GMLJP2CoverageCollection and the elements gml:domainSet, the gml:rangeSet and the gmlcov:rangeType have been left blank as possible. Test passes if the root is as expected.

 

A.1.12                    GMLJP2 file coverages

Test id:

/conf/core/gmlcov-coverage-container

Test Purpose:

Requirement /req/gmlcov-coverage-container

Test method:

Verify that there are as many gmljp2:featureMembers derived from gmlcov:AbstractCoverageType as codestreams are present in the image. Test passes if both numbers are equal.

 

A.1.13                    GMLJP2 file gmlcov-metadata

Test id:

/conf/core/gmlcov-metadata

Test Purpose:

Requirement /req/gmlcov-metadata

Test method:

Verify the presence of the gmlcov-metadata if metadata is available. If so, test passes if gmlcov-metadata is populated.

 

A.1.14                    GMLJP2 file features

Test id:

/conf/core/gmlcov-feature-container

Test Purpose:

Requirement /req/gml-feature-container

Test method:

Verify that gmljp2:GMLJP2Features (for features common to all codestreams) or gmljp2:feature (for features that are related to a single codestream) contain features as necessary that are not coverages or annotations. If so, test passes if these features are not coverages or annotations.

 

A.1.15                    GMLJP2 file annotations

Test id:

/conf/core/annotation-container

Test Purpose:

Requirement /req/annotation-container

Test method:

Verify that annotations are contained only in the gmljp2:annotation element as specified. Test passes if they are.

 

A.1.16                    GMLJP2 file styles

Test id:

/conf/core/annotation-container

Test Purpose:

Requirement /req/style-container

Test method:

Verify that style information is contained only in the gmljp2:style element as specified. If so, test passes.

 

A.1.17                    GMLJP2 file /req/gmlcov-filename-codestream

Test id:

/conf/core/gmlcov-filename-codestream

Test Purpose:

Requirement /req/filename-codestream

Test method:

Verify the correspondence of the rangeSet members fileName and fileStructure are populated as gmljp2://codestream/# (# being a number) and inapplicable. If so, test passes.

 

A.1.18                    GMLJP2 file XML boxes

Test id:

/conf/core/xml-boxes

Test Purpose:

Requirement /req/xml-boxes

Test method:

Verify that the image file has an XML box and association box with label that may serve as an identifier in GMLJP2 descriptions. If so, test passes.

 

A.1.19                    GMLJP2 file XML boxes signaled correctly

Test id:

/conf/core/xml-box-signal

Test Purpose:

Requirement /req/xml-box-signal

Test method:

Verify that the use of JPX format extension is signalled with the value ‘jpx\040’ in the brand field of the file type box and that the XML box is signaled with the value 67 indicating GML or Geographic metadata (XMLGISMetaData). If so, test passes.

 

A.1.20                    GMLJP2 file is a jpx and jp2 compatible

Test id:

/conf/core/jpx-jp2-compatible

Test Purpose:

Requirement /req/jpx-jp2-compatible

Test method:

Verify that the JPEG 2000 is marked as “jpx” in the compatibility list. Verify that the JPEG 2000 is marked as “jp2” in the compatibility list (except if opacity channel is specified outside the scope of jp2). If so, test passes.

 

A.1.21                    GMLJP2 file /req/ jp2-outer-box

Test id:

/conf/core/jp2-outer-box

Test Purpose:

Requirement /req/jp2-outer-box

Test method:

Verify the structure and naming of the boxes and outer box is as specified, with the XML instance data preceded by a label box with the label gml.root-instance. If so, test passes.

 

A.1.22                    GMLJP2 file /req/jp2-other-outer-box

Test id:

/conf/core/jp2-other-outer-box

Test Purpose:

Requirement /req/jp2-other-inner-box

Test method:

Verify the structure and naming of the boxes is as specified. If so, test passes.

 

A.1.23                    GMLJP2 file /req/gmlcov-schemalocation

Test id:

/conf/core/gmljp2-schemalocation

Test Purpose:

Requirement /req/gmljp2-schemalocation

Test method:

Verify that when a XML resource embedded in a JPEG200 file  includes a schema definition, a reference to a schemaLocation is provided. If so, test passes.

 

A.1.24                    GMLJP2 file /req/external-references

Test id:

/conf/core/external-references

Test Purpose:

Requirement /req/external-references

Test method:

Verify that the external references to schemaLocations are made using http references. If so, test passes.

 

A.1.25                    GMLJP2 file /req/internal-references

Test id:

/conf/core/internal-references

Test Purpose:

Requirement /req/internal-references

Test method:

Verify that the internal references to schemaLocations are made using gmljp2: references. If so, test passes.

 

A.1.26                    GMLJP2 file /req/internal-references-to-xmlbox

Test id:

/conf/core/internal-references-to-xmlbox

Test Purpose:

Requirement /req/internal-references-to-xmlbox

Test method:

Verify that the internal references to schemaLocations in xmlboxes are made using gmljp2://xml/ references. If so, test passes.

 

A.1.27                    GMLJP2 file /req/internal-references-to-codestream

Test id:

/conf/core/ internal-references-to-codestream

Test Purpose:

Requirement /req/internal-references-to-codestream

Test method:

Verify that the internal references to schemaLocations in codestreams are made using gmljp2://codestream/ references. If so, test passes.

 

 

Annex B UML diagrams
(informative)

This annex provides a UML class model of the GMLJP2 XML data structure defined in the Section 8. Figure 8 diagram shows that a GMJP2CoverageCollection is composed by featureMember’s that can be GMLJP2ReferenceableGridCoverage, GMLJP2GridCoverage or GMLJP2ReferencedGridCoverage (one for each codestream) all of them derived from the abstract GMLJP2Coverage that is extended from the GMLCOV::DiscreteCoverage and includes features, styles and annotations. GMLJP2ReferenceableGridCoverage can additionally contain generic features and styles.

The model contains many extension points for future extensions. In particular, the extension point of GMLCOV::Coverage is used to specifically contain metadata of several types.

GMLJP2 data structure UML diagram
Figure : GMLJP2 data structure UML diagram

Annex C XML Schemas documents
(informative)

In addition to this document, this standard includes some normative XML Schema Documents. These XML Schema Documents are included in this document. These XML Schema Documents are also posted online at the URL http://schemas.opengis.net/gmljp2/2.0. In the event of a discrepancy between the document and online versions of the XML Schema Documents, the online schema files SHALL be considered authoritative.

This XML Schema Document is named:

gmljp2.xsd

These XML Schema Documents use and build on GML 3.2.1 and GMLCov 1.0 XML Schemas

The GMLJP2 application schema is included in this annex: gmlJP2.xsd


<?xml version=“1.0” encoding=“UTF-8”?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:gmljp2="http://www.opengis.net/gmljp2/2.0"
xmlns:gml="http://www.opengis.net/gml/3.2"
xmlns:gmlcov="http://www.opengis.net/gmlcov/1.0"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:gmd="http://www.isotc211.org/2005/gmd"
xmlns:eop="http://www.opengis.net/eop/2.0"
xmlns:dc="http://purl.org/dc/elements/1.1/"
targetNamespace="http://www.opengis.net/gmljp2/2.0" elementFormDefault="qualified" version="3.1.1 2010-01-28">
  <import namespace="http://www.w3.org/1999/xlink" schemaLocation="http://www.w3.org/1999/xlink.xsd"/>
  <import namespace="http://www.opengis.net/gmlcov/1.0" schemaLocation="http://schemas.opengis.net/gmlcov/1.0/gmlcovAll.xsd"/>
  <import namespace="http://www.opengis.net/gml/3.2" schemaLocation="http://schemas.opengis.net/gml/3.2.1/gml.xsd"/>
  <import namespace="http://www.isotc211.org/2005/gmd" schemaLocation="http://schemas.opengis.net/iso/19139/20070417/gmd/gmd.xsd"/>
  <import namespace="http://www.opengis.net/eop/2.0" schemaLocation="http://schemas.opengis.net/omeo/1.0/eop.xsd"/>
  <import namespace="http://purl.org/dc/elements/1.1/" schemaLocation="http://schemas.opengis.net/csw/2.0.2/rec-dcmes.xsd"/>
  <!– ==============================================================
                                   GMLJP2 Root elements and type
   ==============================================================–>
  <element name="GMLJP2CoverageCollection"
      type="gmljp2:GMLJP2CoverageCollectionType"
      substitutionGroup="gmlcov:AbstractCoverage">
   <annotation>
     <documentation/>
   </annotation>
  </element>
  <complexType name="GMLJP2CoverageCollectionType">
   <complexContent>
     <extension base="gmlcov:AbstractCoverageType">
      <sequence>
        <element name="featureMember" maxOccurs="unbounded">
         <complexType>
           <complexContent>
            <extension base="gml:AbstractFeatureMemberType">
              <sequence>
               <choice maxOccurs="unbounded">
                 <element ref="gmljp2:GMLJP2GridCoverage"/>
                 <element ref="gmljp2:GMLJP2RectifiedGridCoverage"/>
                 <element ref="gmljp2:GMLJP2ReferenceableGridCoverage"/>
                 <element ref="gmljp2:GMLJP2Features"/>
               </choice>
              </sequence>
              <attributeGroup ref="gml:AssociationAttributeGroup"/>
            </extension>
           </complexContent>
         </complexType>
        </element>
        <element name="style" type="gmljp2:GenericWithAssocPropertyType"
            minOccurs="0" maxOccurs="unbounded"/>
        <element name="extension" type="gmljp2:GenericWithAssocPropertyType"
            minOccurs="0" maxOccurs="unbounded"/>
      </sequence>
     </extension>
   </complexContent>
  </complexType>
  <element name="GMLJP2GridCoverage" type="gmljp2:GMLJP2CoverageType"
         substitutionGroup="gmlcov:GridCoverage">
   <annotation>
     <documentation/>
   </annotation>
  </element>
  <element name="GMLJP2RectifiedGridCoverage"  
     type="gmljp2:GMLJP2CoverageType"
      substitutionGroup="gmlcov:RectifiedGridCoverage">
   <annotation>
     <documentation/>
   </annotation>
  </element>
  <element name="GMLJP2ReferenceableGridCoverage"
       type="gmljp2:GMLJP2CoverageType"
      substitutionGroup="gmlcov:ReferenceableGridCoverage">
   <annotation>
     <documentation/>
   </annotation>
  </element>
  <element name="GMLJP2Features" type="gmljp2:GMLJP2FeaturesType"
        substitutionGroup="gml:AbstractFeature"/>
  <complexType name="GMLJP2FeaturesType">
   <complexContent>
     <extension base="gml:AbstractFeatureType">
      <sequence>
        <element name="feature">
         <complexType>
           <complexContent>
            <extension base="gml:AbstractFeatureMemberType">
              <sequence>
               <element ref="gml:AbstractFeature" minOccurs="0"
                     maxOccurs="unbounded"/>
              </sequence>
              <attributeGroup ref="gml:AssociationAttributeGroup"/>
            </extension>
           </complexContent>
         </complexType>
        </element>
        <element name="style" type="gmljp2:GenericWithAssocPropertyType"
               minOccurs="0" maxOccurs="unbounded"/>
        <element name="extension" type="gmljp2:GenericWithAssocPropertyType"
               minOccurs="0" maxOccurs="unbounded"/>
      </sequence>
     </extension>
   </complexContent>
  </complexType>
  <!– ==============================================================
                                     GMLJP2 coverage for a codestream
   ==============================================================–>
  <complexType name="GMLJP2CoverageType">
   <annotation>
     <documentation/>
   </annotation>
   <complexContent>
     <extension base="gmlcov:AbstractDiscreteCoverageType">
      <sequence>
        <element name="feature" type="gml:FeaturePropertyType" minOccurs="0"
               maxOccurs="unbounded"/>
        <element name="annotation" type="gmljp2:GenericWithAssocPropertyType"
               minOccurs="0" maxOccurs="unbounded"/>
        <element name="style" type="gmljp2:GenericWithAssocPropertyType"
               minOccurs="0" maxOccurs="unbounded"/>
        <element name="extension" type="gmljp2:GenericWithAssocPropertyType"
               minOccurs="0" maxOccurs="unbounded"/>
      </sequence>
     </extension>
   </complexContent>
  </complexType>
  <!– ==============================================================
                                                          Metadata Types
   ==============================================================–>
  <element name="Metadata" type="gmljp2:GenericMetadataType"
         substitutionGroup="gmlcov:Extension"/>
  <complexType name="GenericMetadataType">
   <complexContent>
     <restriction base="gmlcov:ExtensionType">
      <sequence>
        <choice minOccurs="0">
         <element name="isoMetadata" type="gmd:MD_Metadata_PropertyType"/>
         <element name="eopMetadata" maxOccurs="unbounded">
           <complexType>
            <sequence>
              <element ref="eop:EarthObservation"/>
            </sequence>
           </complexType>
         </element>
         <element name="dcMetadata" maxOccurs="unbounded">
           <complexType>
            <sequence minOccurs="0" maxOccurs="unbounded">
              <element ref="dc:DC-element"/>
            </sequence>
           </complexType>
         </element>
         <element name="metadata">
           <complexType mixed="true">
            <sequence>
              <any namespace="##other" processContents="lax" minOccurs="0"
                    maxOccurs="unbounded"/>
            </sequence>
            <attributeGroup ref="gml:AssociationAttributeGroup"/>
           </complexType>
         </element>
        </choice>
      </sequence>
     </restriction>
   </complexContent>
  </complexType>
  <!– ==============================================================
                                                          Generic Types
   ==============================================================–>
  <complexType name="GenericWithAssocPropertyType">
   <sequence>
     <any namespace="##other" processContents="lax"/>
   </sequence>
   <attributeGroup ref="gml:AssociationAttributeGroup"/>
  </complexType>
</schema>

Annex D GMLJP2 examples
(informative)

D.1.   ISO19115-ISO19139 metadata example


<?xml version=“1.0” encoding=“UTF-8”?>
<gmljp2:GMLJP2CoverageCollection gml:id="JPEG2000_0" xsi:schemaLocation="http://www.opengis.net/gmljp2/2.0 gmlJP2.xsd"
xmlns:gml="http://www.opengis.net/gml/3.2"
xmlns:gmlcov="http://www.opengis.net/gmlcov/1.0"
xmlns:gmljp2="http://www.opengis.net/gmljp2/2.0"
xmlns:gmd="http://www.isotc211.org/2005/gmd"
xmlns:gco="http://www.isotc211.org/2005/gco"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<gml:gridDomain/>
  <gml:rangeSet>
   <gml:File>
       <gml:rangeParameters/>
     <gml:fileName>gmljp2://codestream</gml:fileName>
     <gml:fileStructure>inapplicable</gml:fileStructure>
   </gml:File>
  </gml:rangeSet>
  <gmlcov:rangeType/>
<gmljp2:featureMember>
   <gmljp2:GMLJP2RectifiedGridCoverage gml:id="ID_1">
     <gml:boundedBy>
      <gml:Null>withheld</gml:Null>
     </gml:boundedBy>
     <gml:domainSet>
      <gml:RectifiedGrid gml:id="rg0001_C0002" dimension="2"
srsName="http://www.opengis.net/def/crs/EPSG/0/4326">
        <gml:limits>
         <gml:GridEnvelope>
           <gml:low>0 0</gml:low>
           <gml:high>6208 3103</gml:high>
         </gml:GridEnvelope>
        </gml:limits>
        <gml:axisLabels>Lat Long</gml:axisLabels>
        <gml:origin>
         <gml:Point gml:id="P0001"
srsName="http://www.opengis.net/def/crs/EPSG/0/4326">
           <gml:pos>41.4756576954751 2.04345415526392</gml:pos>
         </gml:Point>
        </gml:origin>
        <gml:offsetVector
srsName="http://www.opengis.net/def/crs/EPSG/0/4326">0 3.71e-005</gml:offsetVector>
        <gml:offsetVector
srsName="http://www.opengis.net/def/crs/EPSG/0/4326">-3.71e-005 0</gml:offsetVector>
      </gml:RectifiedGrid>
     </gml:domainSet>
     <gml:rangeSet>
      <gml:File>
        <gml:rangeParameters/>
        <gml:fileName>gmljp2://codestream/0</gml:fileName>
        <gml:fileStructure>inapplicable</gml:fileStructure>
      </gml:File>
     </gml:rangeSet>
     <gmlcov:metadata>
      <gmljp2:Metadata>
        <gmljp2:isoMetadata>
         <gmd:MD_Metadata>
           <gmd:fileIdentifier><gco:CharacterString>111111</gco:CharacterString>
           </gmd:fileIdentifier>
           <gmd:hierarchyLevel>
           <gmd:MD_ScopeCode
eListValue="http://schemas.opengis.net/iso/19139/20070417/resources/Codelist/ML_gmxCodelists.xml#MD_ScopeCode" codeList="dataset">dataset</gmd:MD_ScopeCode></gmd:hierarchyLevel>
             <gmd:hierarchyLevelName>
            <gco:CharacterString>dataset</gco:CharacterString>
             </gmd:hierarchyLevelName>
             <gmd:contact>
            <gmd:CI_ResponsibleParty>
              <gmd:individualName>
              <gco:CharacterString>GRAMP</gco:CharacterString>
              </gmd:individualName>
              <gmd:organisationName>
              <gco:CharacterString>Departament de Geografia, UAB</gco:CharacterString>
              </gmd:organisationName>
              <gmd:contactInfo>
              <gmd:CI_Contact>
                <gmd:phone>
               <gmd:CI_Telephone>
                 <gmd:voice>
                 <gco:CharacterString>+34 93 581 41 33</gco:CharacterString>
                 </gmd:voice>
            </gmd:CI_Telephone>
                </gmd:phone>
                <gmd:address>
               <gmd:CI_Address>
                 <gmd:city>
                 <gco:CharacterString>Cerdanyola del Valles</gco:CharacterString>
                 </gmd:city>
                 <gmd:postalCode>
           <gco:CharacterString>08193</gco:CharacterString>
                 </gmd:postalCode>
                 <gmd:electronicMailAddress>            <gco:CharacterString>joanmanuel.soriano@uab.cat</gco:CharacterString>
                 </gmd:electronicMailAddress>
               </gmd:CI_Address>
                </gmd:address>
                <gmd:onlineResource>
               <gmd:CI_OnlineResource>
                 <gmd:linkage>
         <gmd:URL>http://mediterrani.uab.es/web/catala/index.htm</gmd:URL>
                 </gmd:linkage>
                 <gmd:function>
                 <gmd:CI_OnLineFunctionCode
codeList="http://idec.icc.cat/schema/resources/Codelist/ML_gmxCodelists.xml#CI_OnLineFunctionCode" codeListValue="information">Informacio</gmd:CI_OnLineFunctionCode>
                 </gmd:function>
               </gmd:CI_OnlineResource>
                </gmd:onlineResource>
              </gmd:CI_Contact>
              </gmd:contactInfo>
              <gmd:role>
              <gmd:CI_RoleCode
codeList="http://idec.icc.cat/schema/resources/Codelist/ML_gmxCodelists.xml#CI_RoleCode" codeListValue="originator">Creador</gmd:CI_RoleCode>
               </gmd:role>
              </gmd:CI_ResponsibleParty>
             </gmd:contact>
             <gmd:dateStamp>
            <gco:Date>2006-12-13</gco:Date>
             </gmd:dateStamp>
             <gmd:metadataStandardName>
            <gco:CharacterString>ISO 19115:2003/Cor.1:2006 Geographic Information - Metadata</gco:CharacterString>
             </gmd:metadataStandardName>
             <gmd:metadataStandardVersion>
            <gco:CharacterString>IS</gco:CharacterString>
             </gmd:metadataStandardVersion>
             <gmd:spatialRepresentationInfo>
            <gmd:MD_Georectified>
              <gmd:numberOfDimensions>
              <gco:Integer>2</gco:Integer>
              </gmd:numberOfDimensions>
              <gmd:axisDimensionProperties>
              <gmd:MD_Dimension>
                <gmd:dimensionName>
                <gmd:MD_DimensionNameTypeCode
codeList="http://idec.icc.cat/schema/resources/Codelist/ML_gmxCodelists.xml#MD_DimensionNameTypeCode" codeListValue="row">Fila</gmd:MD_DimensionNameTypeCode>
                </gmd:dimensionName>
                <gmd:dimensionSize>
               <gco:Integer>7734</gco:Integer>
                </gmd:dimensionSize>
                <gmd:resolution>
               <gco:Length uom="m">1</gco:Length>
                </gmd:resolution>
              </gmd:MD_Dimension>
              </gmd:axisDimensionProperties>
              <gmd:axisDimensionProperties>
              <gmd:MD_Dimension>
                <gmd:dimensionName>
               <gmd:MD_DimensionNameTypeCode
codeList="http://idec.icc.cat/schema/resources/Codelist/ML_gmxCodelists.xml#MD_DimensionNameTypeCode" codeListValue="column">Columna</gmd:MD_DimensionNameTypeCode>
                </gmd:dimensionName>
                <gmd:dimensionSize>
               <gco:Integer>7950</gco:Integer>
                </gmd:dimensionSize>
                <gmd:resolution>
               <gco:Length uom="m">1</gco:Length>
                </gmd:resolution>
              </gmd:MD_Dimension>
              </gmd:axisDimensionProperties>
              <gmd:cellGeometry>
              <gmd:MD_CellGeometryCode
codeList="http://idec.icc.cat/schema/resources/Codelist/ML_gmxCodelists.xml#MD_CellGeometryCode" codeListValue="area">Area</gmd:MD_CellGeometryCode>
              </gmd:cellGeometry>
              <gmd:transformationParameterAvailability>
              <gco:Boolean>true</gco:Boolean>
              </gmd:transformationParameterAvailability>
              <gmd:checkPointAvailability>
              <gco:Boolean>false</gco:Boolean>
              </gmd:checkPointAvailability>         
              <gmd:pointInPixel>
         <gmd:MD_PixelOrientationCode>center</gmd:MD_PixelOrientationCode>
              </gmd:pointInPixel>
            </gmd:MD_Georectified>
             </gmd:spatialRepresentationInfo>
             <gmd:referenceSystemInfo>
            <gmd:MD_ReferenceSystem>
              <gmd:referenceSystemIdentifier>
              <gmd:RS_Identifier>
                <gmd:code>
               <gco:CharacterString>EPSG:23031</gco:CharacterString>
                </gmd:code>
              </gmd:RS_Identifier>
              </gmd:referenceSystemIdentifier>
            </gmd:MD_ReferenceSystem>
             </gmd:referenceSystemInfo>
             <gmd:identificationInfo>
            <gmd:MD_DataIdentification>
               <gmd:citation>
              <gmd:CI_Citation>
                <gmd:title>
               <gco:CharacterString>Finestra de Vol america 1956-57. Fotograma: 28464; passada: 280; full IGN: 445; data: 05-10-1956</gco:CharacterString>
             </gmd:title>
                <gmd:date>
               <gmd:CI_Date>
                 <gmd:date>
                 <gco:Date>2006-12-01</gco:Date>
                 </gmd:date>
                 <gmd:dateType>
                 <gmd:CI_DateTypeCode
codeList="http://idec.icc.cat/schema/resources/Codelist/ML_gmxCodelists.xml#CI_DateTypeCode" codeListValue="creation">Creacio</gmd:CI_DateTypeCode>
                 </gmd:dateType>
               </gmd:CI_Date>
                </gmd:date>
                <gmd:editionDate>
               <gco:Date>2006-12-01</gco:Date>
                </gmd:editionDate>
              </gmd:CI_Citation>
              </gmd:citation>
              <gmd:abstract>
              <gco:CharacterString>Correccio geometrica d’un fotograma escanejat, a resolucio de 800 DPI, corresponent al vol america realitzat entre 1956 i 1957. Es tracta del full 445 del Instituto Geografico Nacional (IGN).</gco:CharacterString>
              </gmd:abstract>
              <gmd:pointOfContact>
              <gmd:CI_ResponsibleParty>
                <gmd:individualName>
               <gco:CharacterString>GRAMP</gco:CharacterString>
                </gmd:individualName>
                <gmd:organisationName>
               <gco:CharacterString>Departament de Geografia, UAB</gco:CharacterString>
                </gmd:organisationName>
                <gmd:contactInfo>
               <gmd:CI_Contact>
                 <gmd:address>
                 <gmd:CI_Address>
                   <gmd:city>
                  <gco:CharacterString>Cerdanyola del Valles</gco:CharacterString>
                   </gmd:city>
                   <gmd:postalCode>
                  <gco:CharacterString>08193</gco:CharacterString>
                   </gmd:postalCode>
                   <gmd:electronicMailAddress>
                  <gco:CharacterString>joanmanuel.soriano@uab.cat</gco:CharacterString>
                   </gmd:electronicMailAddress>
                 </gmd:CI_Address>
                 </gmd:address>
               </gmd:CI_Contact>
                </gmd:contactInfo>
                <gmd:role>
               <gmd:CI_RoleCode codeList="http://idec.icc.cat/schema/resources/Codelist/ML_gmxCodelists.xml#CI_RoleCode" codeListValue="originator">Creador</gmd:CI_RoleCode>
                </gmd:role>
              </gmd:CI_ResponsibleParty>
              </gmd:pointOfContact>
              <gmd:descriptiveKeywords>
              <gmd:MD_Keywords>
                <gmd:keyword>
               <gco:CharacterString>Fotografia Aeria</gco:CharacterString>
                </gmd:keyword>
                <gmd:type>
               <gmd:MD_KeywordTypeCode codeList="http://idec.icc.cat/schema/resources/Codelist/ML_gmxCodelists.xml#MD_KeywordTypeCode" codeListValue="theme">Tema</gmd:MD_KeywordTypeCode>
                </gmd:type>
              </gmd:MD_Keywords>
              </gmd:descriptiveKeywords>
              <gmd:language>
              <gmd:LanguageCode
codeList="http://idec.icc.cat/schema/resources/Codelist/ML_gmxCodelists.xml#LanguageCode" codeListValue="cat">Catala</gmd:LanguageCode>
              </gmd:language>
              <gmd:topicCategory>
  <gmd:MD_TopicCategoryCode>imageryBaseMapsEarthCover</gmd:MD_TopicCategoryCode>
              </gmd:topicCategory>
              <gmd:extent>
              <gmd:EX_Extent>
                <gmd:geographicElement>
               <gmd:EX_GeographicBoundingBox>
                 <gmd:extentTypeCode>
                 <gco:Boolean>true</gco:Boolean>
                 </gmd:extentTypeCode>
                 <gmd:westBoundLongitude>
                 <gco:Decimal>1.06474287929127</gco:Decimal>
                 </gmd:westBoundLongitude>
                 <gmd:eastBoundLongitude>
                 <gco:Decimal>1.16161798316134</gco:Decimal>
                 </gmd:eastBoundLongitude>
                 <gmd:southBoundLatitude>
                 <gco:Decimal>41.240141115081</gco:Decimal>
                 </gmd:southBoundLatitude>
                 <gmd:northBoundLatitude>
                 <gco:Decimal>41.3113229349326</gco:Decimal>
              </gmd:northBoundLatitude>
               </gmd:EX_GeographicBoundingBox>
                </gmd:geographicElement>
              </gmd:EX_Extent>
              </gmd:extent>
            </gmd:MD_DataIdentification>
           </gmd:identificationInfo>
           </gmd:MD_Metadata>
        </gmljp2:isoMetadata>
      </gmljp2:Metadata>
     </gmlcov:metadata>
     <gmlcov:rangeType/>
   </gmljp2:GMLJP2RectifiedGridCoverage>
</gmljp2:featureMember>
</gmljp2:GMLJP2CoverageCollection>

D.2.   Earth Observation profile example

NB: It should be noted that EOP schema uses URN instead of URL.


<?xml version=“1.0” encoding=“UTF-8”?>
<gmljp2:GMLJP2CoverageCollection gml:id="JPEG2000_0" xsi:schemaLocation="http://www.opengis.net/gmljp2/2.0 gmlJP2.xsd"
xmlns:gml="http://www.opengis.net/gml/3.2"
xmlns:gmlcov="http://www.opengis.net/gmlcov/1.0"
xmlns:gmljp2="http://www.opengis.net/gmljp2/2.0"
xmlns:gmd="http://www.isotc211.org/2005/gmd"
xmlns:swe="http://www.opengis.net/swe/2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <gml:gridDomain/>
  <gml:rangeSet>
   <gml:File>
       <gml:rangeParameters/>
     <gml:fileName>gmljp2://codestream/</gml:fileName>
     <gml:fileStructure>inapplicable</gml:fileStructure>
   </gml:File>
  </gml:rangeSet>
  <gmlcov:rangeType/>
  <gmljp2:featureMember>
   <gmljp2:GMLJP2RectifiedGridCoverage gml:id="ID_1">
     <gml:boundedBy>
      <gml:Null>withheld</gml:Null>
     </gml:boundedBy>
     <gml:domainSet>
      <gml:RectifiedGrid gml:id="rg0001_C0002" dimension="2"
srsName="http://www.opengis.net/def/crs/EPSG/0/4326">
        <gml:limits>
         <gml:GridEnvelope>
           <gml:low>0 0</gml:low>
           <gml:high>6208 3103</gml:high>
         </gml:GridEnvelope>
        </gml:limits>
        <gml:axisName>x</gml:axisName>
        <gml:axisName>y</gml:axisName>
        <gml:origin>
         <gml:Point gml:id="P0001"
srsName="http://www.opengis.net/def/crs/EPSG/0/4326">
           <gml:pos>41.4756576954751 2.04345415526392</gml:pos>
         </gml:Point>
        </gml:origin>
        <gml:offsetVector
srsName="http://www.opengis.net/def/crs/EPSG/0/4326">0     3.7163372079825e-005</gml:offsetVector>
        <gml:offsetVector
srsName="http://www.opengis.net/def/crs/EPSG/0/4326">-3.71633720798261e-005 0</gml:offsetVector>
      </gml:RectifiedGrid>
     </gml:domainSet>
  <gml:rangeSet>
      <gml:File>
        <gml:rangeParameters/>
        <gml:fileName>gmljp2://codestream/0</gml:fileName>
        <gml:fileStructure>inapplicable</gml:fileStructure>
      </gml:File>
     </gml:rangeSet>
     <gml:coverageFunction>
      <gml:MappingRule/>
     </gml:coverageFunction>
     <gmlcov:rangeType/>
     <gmlcov:metadata>
      <gmljp2:Metadata>
        <gmljp2:eopMetadata>
         <eop:EarthObservation
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://www.opengis.net/eop/2.0 http://schemas.opengis.org/omeo/1.0/eop.xsd
            http://www.opengis.net/opt/2.0 http://schemas.opengis.net/omeo/1.0/opt.xsd"
            xmlns:xlink="http://www.w3.org/1999/xlink"
            xmlns:gml="http://www.opengis.net/gml/3.2"
            xmlns:eop="http://www.opengis.net/eop/2.0"
            xmlns:opt="http://www.opengis.net/opt/2.0"
            xmlns:ows="http://www.opengis.net/ows/2.0"
            xmlns:swe="http://www.opengis.net/swe/1.0"
            xmlns:om="http://www.opengis.net/om/2.0"
gml:id="opt_example_1">
           <om:phenomenonTime>
            <gml:TimePeriod gml:id="tp_2">
              <gml:beginPosition>2001-08-22T11:02:47.000</gml:beginPosition>
              <gml:endPosition>2001-08-22T11:02:47.999</gml:endPosition>
            </gml:TimePeriod>
           </om:phenomenonTime>
           <om:resultTime>
            <!– repeat of archiving date? –>
            <gml:TimeInstant gml:id="archivingdate_1">
              <gml:timePosition>2001-08-22T11:02:47.999</gml:timePosition>
            </gml:TimeInstant>
           </om:resultTime>
           <om:procedure>
            <eop:EarthObservationEquipment gml:id="eop_2">
              <eop:platform>
               <eop:Platform>
                 <eop:shortName>PHR</eop:shortName>
                 <eop:serialIdentifier>1A</eop:serialIdentifier>
                </eop:Platform>
              </eop:platform>
              <eop:instrument>
               <eop:Instrument>
                 <eop:shortName>PHR</eop:shortName>
               </eop:Instrument>
              </eop:instrument>
              <eop:sensor>
               <eop:Sensor>
                 <eop:sensorType>OPTICAL</eop:sensorType>
                 <eop:operationalMode
codeSpace="urn:eop:PHR:sensorMode">PX</eop:operationalMode>
                 <eop:resolution uom="m">0.7</eop:resolution>
               </eop:Sensor>
              </eop:sensor>
              <eop:acquisitionParameters>
               <eop:Acquisition>
                 <eop:orbitNumber>12</eop:orbitNumber>
                 <eop:lastOrbitNumber>12</eop:lastOrbitNumber>
                 <eop:orbitDirection>ASCENDING</eop:orbitDirection>
                 <eop:illuminationAzimuthAngle
uom="deg">10</eop:illuminationAzimuthAngle>
                 <eop:acrossTrackIncidenceAngle
uom="deg">14.0</eop:acrossTrackIncidenceAngle>
                 <eop:alongTrackIncidenceAngle
uom="deg">13.9</eop:alongTrackIncidenceAngle>
                 <eop:pitch uom="deg">0</eop:pitch>
                 <eop:roll uom="deg">0</eop:roll>
                 <eop:yaw uom="deg">0</eop:yaw>
               </eop:Acquisition>
              </eop:acquisitionParameters>
            </eop:EarthObservationEquipment>
           </om:procedure>
           <om:observedProperty xlink:href="#params1"/>
           <om:featureOfInterest>
            <eop:Footprint gml:id="fp_2">
              <eop:multiExtentOf>
               <gml:MultiSurface gml:id="ms_2" srsName=" urn:EPSG:4326">
                 <gml:surfaceMembers>
                  <gml:Polygon gml:id="fppoly_2">
                    <gml:exterior>
                     <gml:LinearRing>
                       <gml:posList>2.1025 43.516667 2.861667 43.381667 2.65
                        42.862778 1.896944 42.996389 2.1025 43.516667
                       </gml:posList>
                     </gml:LinearRing>
                    </gml:exterior>
                  </gml:Polygon>
                 </gml:surfaceMembers>
               </gml:MultiSurface>
              </eop:multiExtentOf>
              <eop:centerOf>
               <gml:Point gml:id="pt_2" srsName=" urn:EPSG::4326">
                 <gml:pos>2.374167 43.190833</gml:pos>
               </gml:Point>
              </eop:centerOf>
            </eop:Footprint>
           </om:featureOfInterest>
           <om:result>
            <opt:EarthObservationResult gml:id="eor_2">
              <eop:browse>
               <eop:BrowseInformation>
                 <eop:type>QUICKLOOK</eop:type>
                 <eop:referenceSystemIdentifier
codeSpace="EPSG"> urn:EPSG:4326</eop:referenceSystemIdentifier>
                 <eop:fileName>
                  <ows:ServiceReference
xmlns="http://www.opengis.net/ows/2.0" xlink:href="http://www.mybrowse.com/et"><ows:RequestMessage></ows:RequestMessage></ows:ServiceReference>
                 </eop:fileName>
                 <eop:fileName
href="http://eop.xxx.xx/catalog/E123N45_0101_01234.jpg"></eop:fileName>
               </eop:BrowseInformation>
              </eop:browse>
              <eop:mask>
               <eop:MaskInformation>
                 <eop:type>CLOUD</eop:type>
                 <eop:format>VECTOR</eop:format>
                 <eop:fileName>
                  <ows:ServiceReference
xmlns="http://www.opengis.net/ows/2.0" xlink:href="http://www.mybrowse.com/et"><ows:RequestMessage></ows:RequestMessage></ows:ServiceReference>
                 </eop:fileName>
                 <!– <eop:fileName> http://eop.xxx.xx/catalog/E123N45_0101_01234.gml</eop:fileName –>
               </eop:MaskInformation>
              </eop:mask>
              <opt:cloudCoverPercentage
uom="%">30</opt:cloudCoverPercentage>
            </opt:EarthObservationResult>
           </om:result>
           <eop:metaDataProperty>
            <eop:EarthObservationMetaData>
              <eop:identifier>E123N45_0101_01234</eop:identifier>
              <eop:acquisitionType>NOMINAL</eop:acquisitionType>
              <eop:productType>TBD</eop:productType>
              <eop:status>ACQUIRED</eop:status>
              <eop:downlinkedTo>
               <eop:DownlinkInformation>
                 <eop:acquisitionStation
codeSpace="urn:eop:PHR:stationCode"
                  >TLS</eop:acquisitionStation>
               </eop:DownlinkInformation>
              </eop:downlinkedTo>
              <eop:archivedIn>
               <eop:ArchivingInformation>
                 <eop:archivingCenter codeSpace="urn:eop:PHR:stationCode"
                  >TLS</eop:archivingCenter>
                 <eop:archivingDate>2001-08-22T11:02:47.999</eop:archivingDate>
               </eop:ArchivingInformation>
              </eop:archivedIn>
              <eop:imageQualityDegradation
uom="%">0</eop:imageQualityDegradation>
              <eop:processing>
               <eop:ProcessingInformation/>
              </eop:processing>
            </eop:EarthObservationMetaData>
           </eop:metaDataProperty>
         </eop:EarthObservation>
        </gmljp2:eopMetadata>
      </gmljp2:Metadata>
     </gmlcov:metadata>
   </gmljp2:GMLJP2RectifiedGridCoverage>
  </gmljp2:featureMember>
</gmljp2:GMLJP2CoverageCollection>

D.3.   Dublin Core metadata example


<?xml version=“1.0” encoding=“UTF-8”?>
<gmljp2:GMLJP2CoverageCollection gml:id="JPEG2000_0" xsi:schemaLocation="http://www.opengis.net/gmljp2/2.0 gmlJP2.xsd"
xmlns:gml="http://www.opengis.net/gml/3.2"
xmlns:gmlcov="http://www.opengis.net/gmlcov/1.0"
xmlns:gmljp2="http://www.opengis.net/gmljp2/2.0"
xmlns:gmd="http://www.isotc211.org/2005/gmd"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <gml:gridDomain/>
  <gml:rangeSet>
   <gml:File>
       <gml:rangeParameters/>
     <gml:fileName>gmljp2://codestream/</gml:fileName>
     <gml:fileStructure>inapplicable</gml:fileStructure>
   </gml:File>
  </gml:rangeSet>
  <gmlcov:rangeType/>
  <gmljp2:featureMember>
   <gmljp2:GMLJP2RectifiedGridCoverage gml:id="ID_1">
     <gml:boundedBy>
      <gml:Null>withheld</gml:Null>
     </gml:boundedBy>
     <gml:domainSet>
      <gml:RectifiedGrid gml:id="rg0001_C0002" dimension="2"
srsName="http://www.opengis.net/def/crs/EPSG/0/4326">
        <gml:limits>
         <gml:GridEnvelope>
           <gml:low>0 0</gml:low>
           <gml:high>6208 3103</gml:high>
         </gml:GridEnvelope>
        </gml:limits>
        <gml:axisName>x</gml:axisName>
        <gml:axisName>y</gml:axisName>
        <gml:origin>
         <gml:Point gml:id="P0001"
srsName="http://www.opengis.net/def/crs/EPSG/0/4326">
           <gml:pos>41.4756576954751 2.04345415526392</gml:pos>
         </gml:Point>
        </gml:origin>
        <gml:offsetVector
srsName="http://www.opengis.net/def/crs/EPSG/0/4326">0     3.7163372079825e-005</gml:offsetVector>
        <gml:offsetVector srsName="urn:ogc:def:crs:EPSG::4326">-3.71633720798261e-005 0</gml:offsetVector>
      </gml:RectifiedGrid>
     </gml:domainSet>
     <gml:rangeSet>
      <gml:File>
        <gml:rangeParameters/>
        <gml:fileName>gmljp2://codestream/0</gml:fileName>
        <gml:fileStructure>inapplicable</gml:fileStructure>
      </gml:File>
     </gml:rangeSet>
     <gml:coverageFunction>
      <gml:MappingRule/>
     </gml:coverageFunction>
     <gmlcov:rangeType/>
     <gmlcov:metadata>
      <gmljp2:Metadata>
        <gmljp2:dcMetadata
xsi:schemaLocation="http://purl.org/dc/elements/1.1/ http://schemas.opengis.net/csw/2.0.2/rec-dcmes.xsd">
         <dc:title>Features that are common to all codestreams</dc:title>
         <dc:publisher>ogc</dc:publisher>
        </gmljp2:dcMetadata>
      </gmljp2:Metadata>
     </gmlcov:metadata>
   </gmljp2:GMLJP2RectifiedGridCoverage>
  </gmljp2:featureMember>
</gmljp2:GMLJP2CoverageCollection>

D.4.   C.4 Free text metadata example


<gmljp2:GMLJP2CoverageCollection gml:id="JPEG2000_0" xsi:schemaLocation="http://www.opengis.net/gmljp2/2.0 gmlJP2.xsd"
xmlns:gml="http://www.opengis.net/gml/3.2"
xmlns:gmlcov="http://www.opengis.net/gmlcov/1.0"
xmlns:gmljp2="http://www.opengis.net/gmljp2/2.0"
xmlns:gmd="http://www.isotc211.org/2005/gmd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <gml:gridDomain/>
  <gml:rangeSet>
   <gml:File>
       <gml:rangeParameters/>
     <gml:fileName>gmljp2://codestream/</gml:fileName>
     <gml:fileStructure>inapplicable</gml:fileStructure>
   </gml:File>
  </gml:rangeSet>
  <gmlcov:rangeType/>
  <gmljp2:featureMember>
   <gmljp2:GMLJP2RectifiedGridCoverage gml:id="ID_1">
     <gml:boundedBy>
      <gml:Null>withheld</gml:Null>
     </gml:boundedBy>
     <gml:domainSet>
      <gml:RectifiedGrid gml:id="rg0001_C0002" dimension="2"
srsName="http://www.opengis.net/def/crs/EPSG/0/4326">
        <gml:limits>
         <gml:GridEnvelope>
           <gml:low>0 0</gml:low>
           <gml:high>6208 3103</gml:high>
         </gml:GridEnvelope>
        </gml:limits>
        <gml:axisName>x</gml:axisName>
        <gml:axisName>y</gml:axisName>
        <gml:origin>
         <gml:Point gml:id="P0001"
srsName="http://www.opengis.net/def/crs/EPSG/0/4326">
           <gml:pos>41.4756576954751 2.04345415526392</gml:pos>
         </gml:Point>
        </gml:origin>
        <gml:offsetVector
srsName="http://www.opengis.net/def/crs/EPSG/0/4326">0     3.7163372079825e-005</gml:offsetVector>
        <gml:offsetVector srsName="urn:ogc:def:crs:EPSG::4326">-3.71633720798261e-005 0</gml:offsetVector>
      </gml:RectifiedGrid>
     </gml:domainSet>
     <gml:rangeSet>
      <gml:File>
        <gml:rangeParameters/>
        <gml:fileName>gmljp2://codestream/0</gml:fileName>
        <gml:fileStructure>inapplicable</gml:fileStructure>
      </gml:File>
     </gml:rangeSet>
     <gml:coverageFunction>
      <gml:MappingRule/>
     </gml:coverageFunction>
     <gmlcov:rangeType/>
     <gmlcov:metadata>
      <gmljp2:Metadata>
        <gmljp2:metadata>Some simple textual metadata</gmljp2:metadata>
      </gmljp2:Metadata>
     </gmlcov:metadata>
   </gmljp2:GMLJP2RectifiedGridCoverage>
  </gmljp2:featureMember>
</gmljp2:GMLJP2CoverageCollection>

Annex E Bibliography

[1]
ISO 19139, Geographic Information – Metadata – XML schema implementation.
[2]
OGC 12-083 GMLJP2 Extensions
[3]
OGC 12-108 GML Application Schema - Coverages - JPEG2000 Coverage Encoding Extension

 

Annex F Revision History

 

Date Release Editor Primary clauses modified Description

25 July 2004

0.0.1

Ron Lake

All

Initial document, formatted for OGC template

10 August 2004

0.1.0

David Burggraf

All

Added content to clauses in Sections 7 and 8; reviewed and made minor modifications to all other clauses.

18 May 2005

0.2.0

Martin Kyle

All

Upgrade based on results to date of Interoperability Experiment

19 May 2005

0.2.1

David Burggraf

7, 8, Annexes A-D

Updates made to address discussion points in GMLJP2 Interoperability Experiment

19 May 2005

0.2.2

Martin Kyle

All

Formatting Changes based on OGC endorsed ISO spec format

20 May 2005

0.2.3

Sean Forde

All

Incorporation of gmljp2 URI syntax, updated label names, added comments

23 May 2005

0.2.4

David Burggraf

7, 8, Annexes A-D

Updated sample schemas and instances

23 May 2005

0.2.5

Martin Kyle

All

 Final review, clean up, and remaining issues

23 May 2005

0.2.6

Sean Forde

8.0

Small formatting and syntax changes; modified wording in clause 8.0; removed incorrect abbreviations for JP2 box types; added missing box type labels to box graphics

23 May 2005

0.2.7

Sean Forde

3, 6.6, 6.7, 7.5,7.6

Added requirement to comply with OGC document 05-010 for URN references to CRS and UOM when referring to such entities by reference

23 May 2005

0.2.8

Martin Kyle

7.6; 8.0

Small abbreviation fixes and grammatical fixes

21 June 2005

0.2.9

Sean Forde

3, 7.5,8.2, A.1

Added reference to OGC doc 05-011for CRS definitions; corrected box diagram

22 June 2005

0.2.10

Arliss Whiteside

All

Formatting and miscellaneous comments

26 June 2005

0.3.0

Martin Kyle

All

Add future work items, merge comments from 0.2.9, proof for RFC

25 November 2005

1.0.0

Martin Kyle

All

Updates based on friendly amendments from GML WG at November TC in Bonn, Germany and recommendations for profile standardization. Prep for R1 vote and release

28 November 2005

1.0.0

Carl Reed

All

Grammatical and informative edits

29 November 2005

1.0.0

Martin Kyle

All

Final proof

20 December 2005

1.0.0

Martin Kyle

Annex A, C, D

Update location of xlinks.xsd using authoritative relative reference at OGC schema repository

6 Oct 2008

1.1.0

Michael P. Gerlek

All

Updated to new OGC template; redrew all figures and tables; extensive editorial revisions; significant syntactic and semantic corrections throughout; changed requirement of "GML coverage / rectified grid" to be more loosely defined; added nil value commentary

04 Oct 2010

2.0.0

David Burggraf

All

General review and edits

18 Jul 2012

2.0.1

Lucio Colaiacomo,..

All

General review and edits

23 Jan 2013

2.0.2

Lucio Colaiacomo, Joan Masó.

All

General review and edits. Requirements specified

06 May 2013

2.0.3

SWG

All

General Review

20 July 2013

2.0.4

Joan Masó.

All

General review and cleaning

20 Sep 2013

2.0.5-7

Joan Masó, Emmanuel Devys, Lucio Colaiacomo

All

General review and cleaning. Review of the schemas.

10 Oct 2013

2.0.8

Emmanuel Devys

Annex B

UML models included

12 Dec 2013

2.0.9

Joan Maso, Emmanuel Devys, Lucio Colaiacomo

All

General revision with modification requested by OGC Architecture Board

17 April 2014

2.0.X

Joan Maso, Emmanuel Devys, Lucio Colaiacomo

All

General revision for resolution of RFC comments