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 OGC GML in JPEG 2000 (GMLJP2) Encoding Standard defines how the OGC/ISO Geography Markup Language (GML) standard is used within JPEG 2000 images and other gridded coverage data for adding geospatial content to imagery. Specifically, this OGC standard defines requirements for the encoding and decoding of JPEG 2000 images and other gridded coverage data that contain XML documents that use GML and GML-based schema.

This document defines the use of GML within the XML boxes of the JP2 and JPX file format for JPEG 2000 (extending the JP2 file format, as specified in [ISO 15444-1] and [ISO 15444-2] in Annexes M and N). Further, an application schema for JPEG 2000 that can be extended to include geometrical feature descriptions and annotations is specified. The document also specifies the encoding and packaging rules for GML use in JPEG 2000.

ii.   Preface

This standard resulted from work in the 2004 OGC GML in JPEG 2000 Interoperability Experiment (IE). A group of OGC member organizations introduced a candidate specification document [OGC 04-045], which was later adopted by OGC as a public Discussion Paper, that became the basis for conducting the Interoperability Experiment.  The Activity Plan for the GML in JPEG 2000 Interoperability Experiment was formally approved by OGC in February 2005.  The resulting version 1.0.0 of this standard [OGC 05-047r3] was published in January of 2006.

Version 2 of the JPEG 2000 (GMLJP2) Encoding Standard was the result of discussions within 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. However, version 1.0 was not widely implemented due to loosely-specified coverage schema, rules for the georeference mechanism, and conformance clauses. Additionally, at the time it had to compete with the GeoJP2 image format[1],[2], which uses standard GeoTIFF metadata tags inside a header (specifically, a uuid) box in the JP2 format. Thus, GeoJP2 images may be thought of roughly as GeoTIFF files with image data stored in a JPEG 2000 format. The quickly developed and easily implementable GeoJP2 image format has been a “de facto” standard[3], which both benefits from and is limited by its use of the mature set of GeoTIFF metadata descriptions that, for example, do not currently support sensor model imagery.

New work on GMLJP2 was formally begun in 2012. The goal was to develop a version that provides a generic application schema for JPEG 2000 coverage while relying on the OGC GML Coverage Application Schema (GMLCOV). GMLCOV was later renamed Coverage Implementation Schema (CIS) version 1.0. The intended target audience for the new GMLJP2 version 2 (then and now) are: developers intending to implement geospatially enabled JPEG 2000 encoders and readers, developers of both WFS and WCS who wish to provide support for JPEG 2000 formats, and developers who wish to use GML to give imagery a geospatial context. This document aims to provide not only a clear and testable set of requirements, but also to supply an overview with useful hints and best practices beyond what would be contained in a purely normative text.

This revision of the GMLJP2 standard is fully conformant to GML 3.2.1 standard and guidelines, to the CIS 1.0 coverage encoding standard, as well as to the ReferenceableGridCoverage Extension standard.

iii.   Document terms and definitions

This document uses the standard terms defined in Sub-clause 5.3 of [OGC 06-121r8], which is based on the ISO/IEC Directives, Part 2, Rules for the structure and drafting of International Standards.  Please note that 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 requirement.  No normative, semantic difference between “SHALL” and “shall” is intended.

iv.   Document contributor contact point

The following organizations submitted this document to the Open Geospatial Consortium:

Name

Organization

Emmanuel Devys IGN, France
Joan Masó CREAF, Spain
Lucio Colaiacomo EUSC SatCen, Spain
Eric Hirschorn KeyW, USA

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

  • EUSC (Raul Alonso Reyes)
  • GALDOS Inc. (Darko Androsevic)
  • NGA (Steven Rogan)

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.

All questions regarding this document should be directed to the editors:

  • Lucio Colaiacomo, European Union Satellite Center
  • Joan Masó Pau, UAB-CREAF
  • Emmanuel Devys, Institut National de l’Information Géographique et Forestière (IGN)
  • Eric Hirschorn, KeyW Corporation

v.   Changes to the OGC Abstract Specification

The OGC Abstract Specification does not require any changes to accommodate the technical contents of this document.

vi.   Changes since the previous approved version

The previous approved version of this standard is [OGC 08-085r5].  Changes reflected in this document address the following topics:

  1. Integration with the ReferenceableGridCoverage Extension [OGC 16-083r2] via a new conformance class gmljp2rgrid.
  2. Two requirements have been added to the conformance class core.
  3. As the coverage standard GMLCOV has been renamed CIS, this document has been updated accordingly.

vii.   Future work

Further extensions may address image annotations, which are not addressed normatively in this document. Image annotations are discussed in section 12 (informative). Currently, this standard does not provide any concrete annotation schema.

Sensor model encodings for use with the ReferenceableGridCoverage Extension have been developed[4],[5]. Work towards the formal adoption of such encodings by OGC is anticipated.

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 a GMLJP2 extension.

viii.   Security Considerations

No security considerations have been made for this standard.

 

Foreword

Version 2.x supercedes the original GMLJP2 encoding standard [OGC 05-047r3], due to the extent of the technical revisions.

This document refers to OGC 12-108 GML Application Schema Coverages JPEG 2000 Coverage Encoding Extension (cf. http://docs.opengeospatial.org/is/12-108/12-108.html).

Version 2.1 addresses both rectified grid coverages, supported by the previous version 2.0 that was superseded by the corrigendum 2.0.1 (both with title Part 1: Core), and referenceable grid coverages, providing additional capabilities for this standard such as support for a wide range of sensor models described with GML 3.2 or SensorML 2.0.

The short form of the name of this OGC standard shall be GMLJP2.

GMLJP2 is normatively based on, and thus compliant with, the OGC Coverage Implementation Schema (CIS).  In this document, the acronym CIS specified without a version number refers specifically[6] to CIS version 1.0.

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 geospatial information including geographic features, coverages, observations, topology, geometry, coordinate reference systems, units of measure, time, and value objects. A coverage is, loosely speaking, the digital representation of a spatio-temporally varying phenomenon. The formal definition of coverage in ISO 19123:2003 (also OGC Abstract Topic 6) defines coverages formally as the 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 many application areas, such as remote sensing, meteorology and mapping of bathymetry, elevation, soil, and vegetation. The Coverage Implementation Schema (CIS) version 1.0 (previously known as GMLCOV), utilized by GMLJP2, uses GML version 3.2 Coverages, together with SWE Common, to provide a common implementation schema that is 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 geospatial information within the image, such as the geographic coordinates of the image, annotations, or references to features.

This GMLJP2 standard includes the following items.

  • How CIS coverage descriptions and GML within JPEG 2000 standard data are used with an extendable GML application schema. This includes a georeferencing capability that is based on GML, thus inline with the OGC and TC211 standard for the encoding of geospatial data.
  • Packaging mechanisms that allow for inclusion of CIS coverage descriptions and GML within JPEG 2000 data files. These include setting up the “Brand field in the File type” and “Reader Requirements” boxes with values required to signal the presence of GMLJP2 XML and a JPX file data, respectively.
  • Support for the geo-referenceable type of grid coverage based on adopted extensions of GML, namely the ReferenceableGridCoverage Extension [OGC 16-083r2], has been added.  With newly added support for geo-referenceable systems, GMLJP2 transitions from an imagery format focused on rectified “map” images to a more general format with a potentially much wider set of capabilities with respect to grid coverages, for example, sensor model imagery.
  • Annotations, meaning associations between regions of interest and video, graphics, text, etc. and how can be expressed in several XML encodings, including but not limited to: KML, SVG, or some GML application schema. The visualization of the coverage can also make use of KML.
  • ISO metadata, Earth Observation profile metadata, and other profiles and examples for imagery metadata.


1.    Scope

This document defines a means for encoding and packaging of CIS rectified and referenceable grid coverages and supporting structures within the XML boxes of the header of the JPEG 2000 data format.

Thus, this document provides a way to georeference the data associated with the range sets of the coverage: that is, imagery and other gridded data contained in a JPEG 2000 file.  

The document in addition provides guidelines for the packaging of single as well as multiple codestreams, where each codestream represents a separate image or other gridded data.

Further, this document provides guidelines for the enhancement of the following supporting structures and other data associated with CIS grid coverage domain sets: metadata, features, annotations, styles, coordinate reference systems, and units of measure.

Finally, this document provides as a concrete implementation of this encoding standard an associated application schema that can be extended to include geometrical feature descriptions and annotations.

2.    Conformance

Standardization target of this document are concrete GMLJP2 2.1 instance documents that are headers of JPEG 2000 images, as generated and read by JPEG 2000 encoders and decoders, respectively.

This document establishes two conformance classes:

Requirements and conformance test URIs defined in this document are relative to http://www.opengis.net/spec/GMLJP2/2.1/

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

3.    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: IETF RFC 2396, Uniform Resource Identifiers (URI): Generic Syntax, 1998

[ISO 15444-1]          ISO: ISO/IEC 15444-1:2004, JPEG 2000 image coding system: Core coding system, 2004

[ISO 15444-2]          ISO: ISO/IEC 15444-2:2004, JPEG 2000 image coding system: Extensions, 2004

[ISO 15444-4]          ISO: ISO/IEC 15444-4:2004, JPEG 2000 image coding system: Conformance testing, 2004

[ISO 19105]             ISO: ISO 19105:2000, Geographic information – Conformance and Testing, 2000

[ISO N2887]           ISO: ISO/IEC JTC 1/SC 29/WG1 N2887 (Klaus Jung), Including GML data based on the OpenGIS standard in JPEG 2000 family files, 2003

OGC [07-036]          OGC: OGC 07-036, Geography Markup Language V3.2.1, 2007. http://portal.opengeospatial.org/files/?artifact_id=20509

OGC [06-121r3]       OGC: OGC 06-121r3, OWS Web Services Common Specification, 2007. http://portal.opengeospatial.org/files/?artifact_id=20040

OGC [09-046r2]       OGC: OGC 09-046r2, OGC Naming Authority – Procedures, 2010. http://portal.opengeospatial.org/files/?artifact_id=37800

OGC [11-135]          OGC: OGC 11-135, Name Type Specification for Coordinate Reference Systems, 2011. http://portal.opengeospatial.org/files/?artifact_id=46361

OGC [10-157r4]      OGC: OGC 10-157r4, Earth Observation Metadata profile of Observation & Measurements, 2016. http://docs.opengeospatial.org/is/10-157r4/10-157r4.html

OGC [09-146r2]       OGC: OGC 09-146r2, OGC Coverage Implementation Schema, version 1.0.1, 2012. http://portal.opengeospatial.org/files/?artifact_id=48553

OGC [12-108]          OGC: OGC 12-108, GML Application Schema - JPEG 2000 Coverage Encoding Extension, 2015. http://docs.opengeospatial.org/is/12-108/12-108.html

OGC [16-083r2]       OGC: OGC 16-083r2, OGC Coverage Implementation Schema - ReferenceableGridCoverage Extension, 2017. http://docs.opengeospatial.org/is/16-083r2/16-083r2.html

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


 

4.    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      annotation

A marking on illustrative material for clarification.

[ISO 19117]

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 

A collection of one or more bitstreams and the main header, tile-part headers, and the EOC required for their decoding and expansion into image data.

[ISO/IEC 15444-1]

NOTE:   This is the image data in a compressed form with all 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 

A 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 

A set of mathematical rules for specifying how coordinates are to be assigned to points.

[ISO 19111]

4.6       coverage 

A 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. (ISO 19123)

4.7       curve 

A 1-dimensional geometric-primitive, representing the continuous image of a line.

[ISO 19107]

4.8       datum 

A 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 

A 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      elevation 

Synonym for height (pending future revision of the definition from OGC TC).

4.11      feature 

An abstraction of real-world phenomena.

[ISO 19101]

NOTE: A feature may occur as a type or an instance. “Feature type” or “feature instance” are to 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.12      function 

A 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.13      grid 

A 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.14      height 

Distance of a point from a chosen reference surface measured upward along a line perpendicular to that surface.

[ISO 19111]

NOTE: A height below the reference surface will have a negative value, applying to both gravity-related and ellipsoidal heights.

4.15      map 

A pictorial representation of geographic data.

4.16      object 

An 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.17      pixel 

Smallest element of a digital image to which attributes are assigned.

[ISO 19101-2]

NOTE 1:   This term originated as a contraction of “picture element”

NOTE 2:   Related to the concept of a grid cell

4.18      point 

A 0-dimensional geometric primitive, representing a position.

[ISO 19107]

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

4.19      range 

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

4.20      rectified grid 

A grid for which there is an affine transformation between the grid coordinates and the coordinates of an external coordinate reference system.

[ISO 19123]

4.21      referenceable grid 

A grid associated with a transformation that can be used to convert grid coordinate values to values of coordinates referenced to an external coordinate reference system.

[ISO 19123]

4.22      set 

An unordered collection of related items (objects or values) with no repetition.

[ISO 19107]

5.    Conventions

5.1  Abbreviated terms

ASOC                Association

CIS                     Coverage Implementation Schema

EOP                   Earth Observation Profile

EPSG                 European Petroleum Survey Group[7] (changed to the International Association of Oil and Gas Producers)

FLIR                  Forward Looking Infrared

GeoXACML     Geospatial eXtensible Access Control Markup Language

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

SAR                   Synthetic Aperature Radar

URI                    Uniform Resource Identifier

WCS                  Web Coverage Service

WMS                 Web Map Service

XML                  Extensible Markup Language


 

5.2  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 : Namespace mappings

Prefix

Namespace URI

Standard of namespace

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

CIS 1.0

gmlcovrgrid

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

ReferenceableGridCoverage Extension 1.0

gmljp2

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

GMLJP2 2.1

6.    Roles of GML in JPEG 2000 for geographic imagery (informative)

6.1  Introduction

The description of the roles played by CIS and GMLJP2 imagery provide the context for the supporting mechanisms described in Clause 7.  When encoding information according to one of the types described in this section, the corresponding encoding mechanism specified in Clause 7 is to be used.

The role of CIS in relation to JPEG 2000 is to provide an XML encoding of the coverage metadata necessary to turn a JPEG 2000 document into either a georeferenced or georeferenceable image.  Using the CIS coverage encoding standard, this is accomplished by providing the description of the image geometry and radiometry. In addition, GML data can be used for the encoding of geographic features, annotations, annotation and feature styling, and supporting components for coordinate reference systems (CRS) and unit of measure (UoM) definitions.

The CIS and GML data are stored within the JPEG 2000 file using the XML Box mechanisms provided by the JPEG 2000 standard and the encodings described in Clause 8 of this document.

6.2  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 (collection or set of coverages) is used to encapsulate CIS 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 CIS 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 CIS 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. CIS can be used to provide the geometry and, optionally, elevation information.

5.     “Referenceable” images, such as those collected by remote sensing systems, with or without associated digital elevation models. The ReferenceableGridCoverage type of CIS together with its RefererenceableGridCoverage Extension can be used to provide the geometry and, optionally, elevation information.

6.     Images that correspond to elevation data and associated metadata

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

8.     Images that are required to be accompanied by arbitrary feature data.  An example of this would be the replacing of a pair of files, one a GeoTIFF image and the other a Shapefile containing vector feature layer data, by a single GMLJP2 file. That a GMLJP2 file can be packaged with both kinds of data makes the example possible.

9.     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.

10.  Images that require an associated sensor model for analysis and geopositioning.  Sensor model imagery is particularly well suited to be supported by the GMLJP2ReferenceableGridCoverage type. The RefererenceableGridCoverage Extension provides a connection from the domain set of a GMLJP2ReferenceableGridCoverage to SensorML via the ReferenceableGridBySensorModel subtype.

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

12.  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 with various coverage range types, e.g., pressure and temperature, as separate codestreams with associated schemas.

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

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

7.    JPEG 2000 Coverage description requirements

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

1. A single codestream (raster) associated with a single coverage with a XML encoding of the metadata necessary to make the JPEG 2000 document a georeferenced or georeferenceable image;

2. A sequence (collection) of codestreams with a sequence of corresponding coverages;

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

4. 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).

Clause 7 describes details for the use of CIS to encode different aspects of the coverage data, while Clause 8 describes the complete structure of a GMLJP2 XML encoding.

Requirements class core establishes how representations of coverages, metadata, GML features, and annotations can be embedded in the JPEG 2000 encoding format. Its identifying URL is http://www.opengis.net/spec/gmljp2/2.1/req/core.

This standard depends on OGC 09-146r2, OGC Coverage Implementation Schema (February 2012) version 1.0.1 and on OGC 12-108, GML Application Schema - Coverages - JPEG 2000 Coverage Encoding Extension, for support of GMLJP2 grid coverage elements:

  • gmljp2: GMLJP2GridCoverage;
  • gmljp2: GMLJP2RectifiedGridCoverage; and
  • gmljp2: GMLJP2ReferenceableGridCoverage.

Finally, requirements class gmljp2rgrid establishes GMLJP2ReferenceableGridCoverage as a referenceable grid coverage type that is tied to the ReferenceableGridCoverage Extension [OGC 16-083r2]. The sole clause providing the requirements for class gmljp2rgrid is section 11.

Requirement 1  /req/core/gmljp2-gmlcov
A JPEG 2000 encoded file conformant to this standard shall use a CIS coverage description following the OGC 12-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_JPEG 2000/coverages/1.0/req/JPEG 2000-coverage

 

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

7.1  Coverage metadata

This clause describes the use of CIS to encode data associated with 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.     CIS information, from the GML Coverage; and

3.     Image information, from the JPEG 2000 image header.

Some metadata can be at the coverage collection level and other metadata 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. CIS provides a metadata property, gmlcov:metadata, that can be attached to any CIS object and can be used to encode metadata about the coverage. The GML metadata property, gml:metaDataProperty, can be attached to any GML object and 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.

 

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

 

Requirement 3  /req/core/gmlcov-precedence
JPEG 2000 encoded files including gmlcov:metadata with information redundant with the CIS information in gml:domainSet or gmlcov:rangeType (e.g. geometric or radiometric information in ISO19139 format) shall be coherent. In case of discrepancies the gml:domainSet or gmlcov:rangeType information takes precedence.

 

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

Note:   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 : 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 of 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 embed ISO19115/19139 metadata:


<?xml version=“1.0” encoding=“UTF-8”?>
<gmljp2:GMLJP2CoverageCollection gml:id="JPEG 2000_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, smoke, 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.

An example on how to embed EO profile metadata is Annex D.2.

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

7.2  Image annotation

An image’s 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), or in a CRS coordinates defined by the CIS reference part (e.g. GML), or in a common CRS in case it would be different from the CRS defined by the CIS coverage. 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 12 for a more complete (informative) reference to annotation approaches.  Note that section 12 is not normative.

7.3  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.

Requirement 5  /req/core/gml-geographicFeatures
Geographic features included in a JPEG 2000 encoded image using GMLJP2 under the gmljp2:GMLJP2Features element shall 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 need an associated GML application schema.

7.4  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 OGC KML).

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

•  OGC Styled Layer Descriptors / Symbology Encoding

•  OGC GML default styling

•  OGC KML fragments

7.5  Coordinate reference systems

For 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 GML encoding rules, 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:

· For reference to an authority and authority-maintained code, as documented in OGC 11-135, see http://www.opengis.net/def/crs/ for the OGC defined CRSs; or

· Reference to CRS definition.

Requirement 6  /req/core/gmlcov-CRS-byref
In those cases where a CRS is identified by reference to an authority and code, the CRS SHALL be identified by URI following the rules specified in OGC document OGC 11-135 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 7  /req/core/gmlcov-RectifiedGridCoverage-CRS
The RectifiedGridCoverage model of CIS requires the definition of the CRS associated to each coverage. This is done using the srsName attribute of the gml:RectifiedGrid element in the domainSet.

 

There is no default CRS. There is only one CRS for each RectifiedGridCoverage, which is expressed using the gml:RectifiedGrid element (in srsName) in the domainSet. Other sub-elements may also duplicate this srsName definition.

Note: GMLJP2 rectified grids follow the recommendation in GML 3.2.1 [OGC 07-036] subclause 19.2.2.  This corresponds with the pixelInCell value of ImageCRS set to “Cell center” as specified in ISO 19111. This can be interpreted as the origin of the RectifiedGrid is the center point of the first image pixel.

7.6  Units of measure

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

· For reference to an authority and authority-maintained code, in a similar way as for CRSs, as documented in OGC 11-135, see http://www.opengis.net/def/uom/; some of them are also defined in:

http://schemas.opengis.net/definitions/1.1.0/unitsDictionaryv1.xml; or

· A reference to a UOM definition (see Subclause 7.7).

7.7  Reference to UOM definition

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

Requirement 8  /req/core/gmlcov-rangetype-uom
In a JPEG 2000 encoded file with coverage values with units of measure, the element tag must occur in the CIS (gmlcov:rangeType/swe:DataRecord/swe:uom).

 

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

 

Recommendation: The use of the unitless “unity” unit of measure is recommended (instead of “unknown”) for values without unit of measure, when the swe:uom element is mandatory:

<swe:uom code=“unity”/>         <!– Unity for value without unit of measures –>

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.

Table : 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 meter

length

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

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.

7.8  Nil values

The semantic intent for sample values in a coverage dataset, such as for “nodata” pixels or samples (nil values), whose values were invalid, not acquired, or were clipped due to high or low saturation, should be specified. Possible reasons for NIL values can be seen in Table 4, which are taken from http://www.opengis.net/def/nil/OGC/0/, while others are defined in OGC 07-036 section 8.2.3.1 on gml:NilReasonType.

Requirement 10    /req/core/gmlcov-nil-values
In a JPEG 2000 encoded file with nil-values, the element tag shall occur in the CIS (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 11   /req/core/gmlcov-nil-reason-byref
In those cases where the reason is identified by reference to an authority and code, the nil value SHALL be identified by URI following the rules defined in OGC document [09-046r2] and maintained in http://www.opengis.net/def (URIs of Definitions in OGC Namespace).

Although 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 : NIL reasons

OGC URI

Meaning

Recommendation

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

Above detection range

The client shows the pixel as white.

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

Below detection range

The client shows the pixel as black.

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

No value available

Render such that any underlying data shows through, i.e., according to “transparency” rules. If no data is “underneath”, the client renders 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.

Render such that any underlying data show through, i.e., according to “transparency” rules. If no data is “underneath”, the client renders the default background color.

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

The value will be available later.

Render such that any underlying data shows through, i.e., according to “transparency” rules. If no data is “underneath”, the client renders 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.

Render such that any underlying data shows through, i.e., according to “transparency” rules. If no data is “underneath”, the client renders the default background color.

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

The value is not divulged.

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

8.    Encoding rules for GML in JPEG 2000

8.1  Introduction

This clause 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 provide a geographic context to the imagery placed in JPEG 2000 files. This is accomplished by providing a CIS 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 12   /req/core/gmlcov-coverage-collection-container
A GMLJP2 XML description of an image shall have a gmljp2:GMLJP2CoverageCollection as single root element derived from gmlcov:AbstractCoverageType that is a container for other elements. The sub-elements gml:domainSet, gml:rangeSet and gmlcov:rangeType (which are inherited from the CIS schema) shall be populated with nilReason “inapplicable” value, and indicate that the GMLJP2CoverageCollection is a Collection as indicated below ; the boundedBy element may provide the bounding box for the collection.

 


<gml:domainSet nilReason="inapplicable"/>
 <gml:rangeSet>
      <gml:DataBlock>
         <gml:rangeParameters nilReason="inapplicable"/>
         <gml:doubleOrNilReasonTupleList>inapplicable</gml:doubleOrNilReasonTupleList>
      </gml:DataBlock>
 </gml:rangeSet>
 <gmlcov:rangeType>
      <swe:DataRecord>
         <swe:field name="Collection"> </swe:field>
      </swe:DataRecord>
 </gmlcov:rangeType>


 

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

 

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

 

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

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

Note: For a very large GML document, we strongly recommended using the GML xlink.href mechanism to link to the 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 16   /req/core/annotation-container
When annotations related to the JPEG 2000 file are to be included, these annotations shall be child elements of the gmljp2:annotation element 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 12).

 

 

Requirement 17   /req/core/style-container
When styling information of the features or annotations associated with the JPEG 2000 file are to be included independently of the features, these styles shall be included in a gmljp2:style element of either the coverage collection or of 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 may further define other child elements of the gmljp2:GMLJP2CoverageType in the future.

A schema defining GMLJP2 XML usage is provided in this standard that includes CIS 1.0, GML 3.2, ISO metadata, DC (Dublin Core) metadata, and EOP (Earth Observation Profile) metadata.

All child elements in the gmljp2:GMLJP2CoverageType are derived from gml:AssociationAttributeGroup and as such can be described either in-line or by reference (via xlink:href).


Table : Parts of the gmljp2:GMLJP2CoverageCollection 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 : 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 begins with the GMLJP2CoverageCollection root element that contains one or more coverage subelements.  A GMLJP2CoverageCollection also supports metadata and feature data, which may be included either inline or referenced via xlink:href.  In the example, a single GMLJP2RectifiedGridCoverage instance as well as metadata and feature data descriptions are provided inline:


<gmljp2:GMLJP2CoverageCollection gml:id="JPEG 2000_0"
 xsi:schemaLocation="http://www.opengis.net/gmljp2/2.1 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.1"
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:domainSet nilReason=“inapplicable”/>
 <gml:rangeSet>
   <gml:DataBlock>
    <gml:rangeParameters nilReason=“inapplicable”/>
    <gml:doubleOrNilReasonTupleList>inapplicable</gml:doubleOrNilReasonTupleList>
   </gml:DataBlock>
 </gml:rangeSet>
 <gmlcov:rangeType>
   <swe:DataRecord>
    <swe:field name="Collection"> </swe:field>
   </swe:DataRecord>
 </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">
          <gml:pos>9.9 9.9</gml:pos>
         </gml:Point>
       </gml:origin>
       <gml:offsetVector>0 3.71e-005</gml:offsetVector>
       <gml:offsetVector>-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>
      <swe:DataRecord>
       <swe:field name=“Panchromatic”>
         <swe:Quantity definition=“http://www.opengis.net/def/ogc-eo/opt/SpectralMode/PANCHROMATIC”>
          <swe:description>Panchromatic Channel</swe:description>
          <swe:uom code=“unity”/>
          <!– Unity for value without unit of measures –>
         </swe:Quantity>
       </swe:field>
      </swe:DataRecord>
    </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>


 

8.2  CIS for JPEG 2000

CIS defines the associated JPEG 2000 file as a geospatial 2d coverage.

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

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

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


<gmljp2:GMLJP2CoverageCollection gml:id="CCID1"
 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.1"
 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.1 
 http://schemas.opengis.net/gmljp2/2.1/gmljp2.xsd">
   <!– Note: The Coverage container defines a collection grid limited to a single point
 whose value is set to 0; its domainSet is defined by a .Grid restricted to a single point
 whose value is 0 (in order to fulfil Requirement 11), whose rangeType field name is “Collection” –>
 <gml:domainSet nilReason=“inapplicable”/>
 <gml:rangeSet>
   <gml:DataBlock>
    <gml:rangeParameters nilReason=“inapplicable”/>
  <gml:doubleOrNilReasonTupleList>inapplicable</gml:doubleOrNilReasonTupleList>
   </gml:DataBlock>
 </gml:rangeSet>
 <gmlcov:rangeType>
   <swe:DataRecord>
    <swe:field name="Collection"> </swe:field>
   </swe:DataRecord>
 </gmlcov:rangeType>
   <gmljp2:featureMember>
      <gmljp2:GMLJP2RectifiedGridCoverage gml:id="RGC01_CCID1">
         <gml:boundedBy>
                 <gml:Envelope srsName="http://www.opengis.net/def/crs/EPSG/0/4326"
                    axisLabels="Lat Long" uomLabels="deg deg" srsDimension="2">
              <gml:lowerCorner>1.0 1.0</gml:lowerCorner>
              <gml:upperCorner>3.0 10.0</gml:upperCorner>
           </gml:Envelope>
         </gml:boundedBy>
         <gml:domainSet>
           <gml:RectifiedGrid gml:id="RG_RGC01_CCID1"
               dimension="2" srsName="http://www.opengis.net/def/crs/EPSG/0/4326">
              <gml:limits>
                 <gml:GridEnvelope>
                    <gml:low>0 0</gml:low>
                    <gml:high>99 29</gml:high>
                 </gml:GridEnvelope>
              </gml:limits>
              <gml:axisLabels>Lat Long</gml:axisLabels>
              <gml:origin>
                 <gml:Point gml:id="P0001_RGC01_CCID1">
                    <!– “Upper-left” image origin –>
                    <gml:pos>2.95 1.05</gml:pos>
                 </gml:Point>
              </gml:origin>
              <gml:offsetVector>0 0.1</gml:offsetVector>
              <gml:offsetVector>-0.1 0</gml:offsetVector>
           </gml:RectifiedGrid>
         </gml:domainSet>
         <gml:rangeSet>
           <gml:File>
              <gml:rangeParameters/>
              <gml:fileName>gmljp2://codestream/0</gml:fileName>
              <gml:fileStructure>Record Interleaved</gml:fileStructure>
           </gml:File>
         </gml:rangeSet>
         <gmlcov:rangeType>
           <swe:DataRecord>
              <swe:field name="Panchromatic">
                 <swe:Quantity definition="http://www.opengis.net/def/ogc-eo/opt/SpectralMode/PANCHROMATIC">
                    <swe:description>Panchromatic Channel</swe:description>
                    <swe:uom code="unity"/>
                    <!– Unity for value without unit of measures –>
                 </swe:Quantity>
              </swe:field>
           </swe:DataRecord>
         </gmlcov:rangeType>
      </gmljp2:GMLJP2RectifiedGridCoverage>
   </gmljp2:featureMember>
</gmljp2:GMLJP2CoverageCollection>


 

9.    Packaging GML in JPEG 2000

9.1  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.

9.2  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 19   /req/core/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 are 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 20   /req/core/xml-box-signal
The presence of GMLJP2 XML data shall be signaled by specifying the value 67 in a Reader Requirements box.

For convenience, M6.2 of ISO 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 of ISO 15444-2, the Reader Requirements 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 “jpx040” for JPX files.

According to Subclause 3.2 of [ISO N2887], the presence of GML data in a JPX file can 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 GML 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 an LBL box whose content is "gml.data" and several additional ASOC boxes, of which each of them contains an 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 field 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

9.3  Use of JPEG 2000 Part I and Part II extensions

It is recommended using the JPEG 2000 Part I (ISO 15444-1) that is widely implemented, defines the core JPEG 2000, and 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 21   /req/core/jp2-compatible
Even if GMLJP2 will use JPEG 2000 part II, GMLJP2 files shall be written as JP2 compatible by including the string “jp2” within the compatibility list of the File Type box (see Annex I of [ISO 15444-1]).


 

Requirement 22   /req/core/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 5.

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 from 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 23   /req/core/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 Subclause 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.

10. XML references in a JPEG 2000 package

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.

Requirement 24   /req/core/gmlcov-XML-ReferencesByURIs
GMLJP2 references SHALL be identified by URI following the rules specified in OGC document OGC 11-135 and maintained in http://www.opengis.net/def (URIs of Definitions in OGC Namespace).

10.1  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 such a way that common uses (such as geographical georeferencing or including ISO metadata) do not require using new or pre-existing application schema(s) for each JPEG 2000 instance. Therefore, using or referencing elements from the official OGC or ISO schemas is usually sufficient. Nevertheless, it is possible that one may need to define schema describing one’s own GML feature types and feature collections, or perhaps one’s own metadata set.  Such application schema may be accessed via the web, using xlink:href, or located within a different XML box within the same image file.

Requirement 25   /req/core/gmljp2-schemalocation
When XML schema definitions are embedded in a JPEG200 file, then the schemaLocation attribute is mandatory.

 

Requirement 26   /req/core/gmljp2-xmlSchema
The GMLJP2 file processor shall 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; or

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 are to be provided.

10.2  External references

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

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

Note that the relative reference meaning has been changed from the original version 1.0 of this standard. In version 1.0, 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.

10.3  Internal references within a JPEG 2000 file.

Requirement 28   /req/core/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, and resource.type can be either the xml codestream values for resource.id or values for the fragment-id.

NOTE 1:     For resource.type with xml codestream values for resource.id, the xml codestream values depend upon the value of resource.type, as explained below.

NOTE 2:     For resource.type with values for fragment-id, the values for fragment-id depend on the value of resource.type.


10.4  Internal references to XML boxes within a JPEG 2000 file

Requirement 29   /req/core/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 is of an element inside the XML. If [id] is omitted, then the URI refers to the entire XML document.

Dependency: /req/core/internal-references

Note: 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="CCID1"
 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.1"
 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.1 
 http://schemas.opengis.net/gmljp2/2.1/gmljp2.xsd">
<gml:domainSet nilReason=“inapplicable”/>
 <gml:rangeSet>
   <gml:DataBlock>
    <gml:rangeParameters nilReason=“inapplicable”/>
    <gml:doubleOrNilReasonTupleList>inapplicable</gml:doubleOrNilReasonTupleList>
   </gml:DataBlock>
 </gml:rangeSet>
 <gmlcov:rangeType>
   <swe:DataRecord>
    <swe:field name="Collection"> </swe:field>
   </swe:DataRecord>
 </gmlcov:rangeType>
   <gmljp2:featureMember>
      <gmljp2:GMLJP2RectifiedGridCoverage gml:id="RGC01_CCID1">
         <gml:boundedBy>
           <gml:Envelope srsName="http://www.opengis.net/def/crs/EPSG/0/4326"
                axisLabels="Lat Long" uomLabels="deg deg" srsDimension="2">
              <gml:lowerCorner>1.0 1.0</gml:lowerCorner>
              <gml:upperCorner>3.0 10.0</gml:upperCorner>
           </gml:Envelope>
         </gml:boundedBy>
         <gml:domainSet>
           <gml:RectifiedGrid gml:id="RG_RGC01_CCID1" dimension="2"
                srsName="http://www.opengis.net/def/crs/EPSG/0/4326">
              <gml:limits>
                 <gml:GridEnvelope>
                    <gml:low>0 0</gml:low>
                    <gml:high>99 29</gml:high>
                 </gml:GridEnvelope>
              </gml:limits>
              <gml:axisLabels>Lat Long</gml:axisLabels>
              <gml:origin>
                 <gml:Point gml:id="P0001_RGC01_CCID1">
                    <!– “Upper-left” image origin –>
                    <gml:pos>2.95 1.05</gml:pos>
                 </gml:Point>
              </gml:origin>
              <gml:offsetVector>0 0.1</gml:offsetVector>
              <gml:offsetVector>-0.1 0</gml:offsetVector>
           </gml:RectifiedGrid>
         </gml:domainSet>
         <gml:rangeSet>
           <gml:File>
              <gml:rangeParameters/>
              <gml:fileName>gmljp2://codestream/0</gml:fileName>
              <gml:fileStructure>Record Interleaved</gml:fileStructure>
           </gml:File>
         </gml:rangeSet>
         <gmlcov:rangeType>
           <swe:DataRecord>
              <swe:field name="Panchromatic">
                 <swe:Quantity definition="http://www.opengis.net/def/ogc-eo/opt/SpectralMode/PANCHROMATIC">
                    <swe:description>Panchromatic Channel</swe:description>
                    <swe:uom code="unity"/>
                    <!– Unity for value without unit of measures –>
                 </swe:Quantity>
              </swe:field>
           </swe:DataRecord>
         </gmlcov:rangeType>
      </gmljp2:GMLJP2RectifiedGridCoverage>
   </gmljp2:featureMember>
</gmljp2:GMLJP2CoverageCollection>


10.5  Internal references to codestream within a JPEG 2000 file

Requirement 30   /req/core/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.

10.6   Codestream references

10.6.1   Single codestream case

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

10.6.2   Minimal instance example for a single codestream

At a minimum GML data consists of a root gmljp2:GMLJP2CoverageCollection that is a collection of codestream-specific coverage information, which in turn contains a concrete CIS gmlcov:AbstractCoverage member instance. This simple RectifiedGridCoverage example given below demonstrates the CIS portion of the encoding of a georectified image as a CIS coverage.


<gmljp2:GMLJP2CoverageCollection gml:id="CCID1"
 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.1"
 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.1 
http://schemas.opengis.net/gmljp2/2.1/gmljp2.xsd">
 <gml:domainSet nilReason=“inapplicable”/>
 <gml:rangeSet>
   <gml:DataBlock>
    <gml:rangeParameters nilReason=“inapplicable”/>
  <gml:doubleOrNilReasonTupleList>inapplicable</gml:doubleOrNilReasonTupleList>
   </gml:DataBlock>
 </gml:rangeSet>
 <gmlcov:rangeType>
   <swe:DataRecord>
    <swe:field name="Collection"> </swe:field>
   </swe:DataRecord>
 </gmlcov:rangeType>
   <gmljp2:featureMember>
      <gmljp2:GMLJP2RectifiedGridCoverage gml:id="RGC01_CCID1">
         <gml:boundedBy>
           <!– Note: This boundedBy element for each Coverage member is recommended. –>
           <gml:Envelope srsName="http://www.opengis.net/def/crs/EPSG/0/4326"
             axisLabels="Lat Long" uomLabels="deg deg" srsDimension="2">
              <gml:lowerCorner>1.0 1.0</gml:lowerCorner>
              <gml:upperCorner>3.0 10.0</gml:upperCorner>
           </gml:Envelope>
         </gml:boundedBy>
         <gml:domainSet>
           <gml:RectifiedGrid gml:id="RG_RGC01_CCID1" dimension="2"
               srsName="http://www.opengis.net/def/crs/EPSG/0/4326">
              <gml:limits>
                 <gml:GridEnvelope>
                    <gml:low>0 0</gml:low>
                    <gml:high>99 29</gml:high>
                 </gml:GridEnvelope>
              </gml:limits>
              <gml:axisLabels>Lat Long</gml:axisLabels>
              <gml:origin>
                 <gml:Point gml:id="P0001_RGC01_CCID1">
                    <!– “Upper-left” image origin –>
                    <gml:pos>2.95 1.05</gml:pos>
                 </gml:Point>
              </gml:origin>
              <gml:offsetVector>0 0.1</gml:offsetVector>
              <gml:offsetVector>-0.1 0</gml:offsetVector>
           </gml:RectifiedGrid>
         </gml:domainSet>
         <gml:rangeSet>
           <gml:File>
              <gml:rangeParameters/>
              <gml:fileName>gmljp2://codestream/0</gml:fileName>
              <gml:fileStructure>Record Interleaved</gml:fileStructure>
           </gml:File>
         </gml:rangeSet>
         <gmlcov:rangeType>
           <swe:DataRecord>
              <swe:field name="Panchromatic">
                 <swe:Quantity definition="http://www.opengis.net/def/ogc-eo/opt/SpectralMode/PANCHROMATIC">
                    <swe:description>Panchromatic Channel</swe:description>
                    <swe:uom code="unity"/>
                    <!– Unity for value without unit of measures –>
                 </swe:Quantity>
              </swe:field>
           </swe:DataRecord>
         </gmlcov:rangeType>
      </gmljp2:GMLJP2RectifiedGridCoverage>
   </gmljp2:featureMember>
</gmljp2:GMLJP2CoverageCollection>


Note that, as GMLJP2RectifiedGridCoverage is based on gmlcov:RectifiedGridCoverage of CIS, it is necessary that rangeSet be defined in the GMLJP2RectifiedGridCoverage instance. 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}.

10.6.3    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 gmljp2:GMLJP2RectifiedGridCoverage and gmljp2:GMLJP2ReferenceableGridCoverage elements will usually be the same as their respective codestreams, but the actual association of a gmljp2:GMLJP2Coverage 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. The nested coverage collection description is shown in the example.

10.6.4    Minimal instance example for multiple codestreams

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


<gmljp2:GMLJP2CoverageCollection gml:id="CCID1"
 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.1"
 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.1 
 http://schemas.opengis.net/gmljp2/2.1/gmljp2.xsd">
 <gml:domainSet nilReason=“inapplicable”/>
 <gml:rangeSet>
   <gml:DataBlock>
    <gml:rangeParameters nilReason=“inapplicable”/>
  <gml:doubleOrNilReasonTupleList>inapplicable</gml:doubleOrNilReasonTupleList>
   </gml:DataBlock>
 </gml:rangeSet>
 <gmlcov:rangeType>
   <swe:DataRecord>
    <swe:field name="Collection"> </swe:field>
   </swe:DataRecord>
 </gmlcov:rangeType>
   <gmljp2:featureMember>
      <gmljp2:GMLJP2RectifiedGridCoverage gml:id="RGC01_CCID1">
         <gml:boundedBy>
           <gml:Envelope srsName="http://www.opengis.net/def/crs/EPSG/0/4326"
                axisLabels="Lat Long" uomLabels="deg deg" srsDimension="2">
              <gml:lowerCorner>1.0 1.0</gml:lowerCorner>
              <gml:upperCorner>3.0 10.0</gml:upperCorner>
           </gml:Envelope>
         </gml:boundedBy>
         <gml:domainSet>
           <gml:RectifiedGrid gml:id="RG_RGC01_CCID1" dimension="2"
                  srsName="http://www.opengis.net/def/crs/EPSG/0/4326">
              <gml:limits>
                 <gml:GridEnvelope>
                    <gml:low>0 0</gml:low>
                    <gml:high>99 29</gml:high>
                 </gml:GridEnvelope>
              </gml:limits>
              <gml:axisLabels>Lat Long</gml:axisLabels>
              <gml:origin>
                 <gml:Point gml:id="P0001_RGC01_CCID1">
                    <!– “Upper-left” image origin –>
                    <gml:pos>2.95 1.05</gml:pos>
                 </gml:Point>
              </gml:origin>
              <gml:offsetVector>0 0.1</gml:offsetVector>
              <gml:offsetVector>-0.1 0</gml:offsetVector>
           </gml:RectifiedGrid>
         </gml:domainSet>
         <gml:rangeSet>
           <gml:File>
              <gml:rangeParameters/>
              <gml:fileName>gmljp2://codestream/0</gml:fileName>
              <gml:fileStructure>Record Interleaved</gml:fileStructure>
           </gml:File>
         </gml:rangeSet>
         <gmlcov:rangeType>
           <swe:DataRecord>
              <swe:field name="Panchromatic">
                 <swe:Quantity definition="http://www.opengis.net/def/ogc-eo/opt/SpectralMode/PANCHROMATIC">
                    <swe:description>Panchromatic Channel</swe:description>
                    <swe:uom code="unity"/>
                    <!– Unity for value without unit of measures –>
                 </swe:Quantity>
              </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=“Panchromatic”>
         <swe:Quantity definition=“http://www.opengis.net/def/ogc-eo/opt/SpectralMode/PANCHROMATIC”>
          <swe:description>Panchromatic Channel</swe:description>
          <swe:uom code=“unity”/>
          <!– Unity for value without unit of measures –>
         </swe:Quantity>
       </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=“Panchromatic”>
         <swe:Quantity definition=“http://www.opengis.net/def/ogc-eo/opt/SpectralMode/PANCHROMATIC”>
          <swe:description>Panchromatic Channel</swe:description>
          <swe:uom code=“unity”/>
          <!– Unity for value without unit of measures –>
         </swe:Quantity>
       </swe:field>
      </swe:DataRecord>
    </gmlcov:rangeType> 
   </gmljp2:GMLJP2RectifiedGridCoverage>
  </gmljp2:featureMember>
</gmljp2:GMLJP2CoverageCollection>


11. A Coverage Type on the Georeferenceable Grid for JPEG 2000

Class gmljp2rgrid lays the foundation for a ReferenceableGridCoverage type of the GMLJP2 standard to be used with the extension standard GMLCOVRGRID of CIS.  Every compliant coverage instance of this type must conform to the requirements stated here in Clause 11.

The GMLJP2ReferenceableGridCoverage coverage type is a fully conformant derived type of ReferenceableGridCoverage of CIS.  Figure 7 shows the expected type structure of GMLJP2ReferenceableGridCoverage, which must conform to Requirement 1 of the ReferenceableGridCoverage Extension.

UML diagram of the GMLJP2ReferenceableGridCoverage structure
Figure : UML diagram of the GMLJP2ReferenceableGridCoverage structure

Requirement 31   /req/gmljp2rgrid/GMLJP2ReferenceableGridCoverage-structure
A coverage of type GMLJP2ReferenceableGridCoverage is in conformance with the ReferenceableGridCoverage Extension standard, as described in Figure 7.  A coverage of type GMLJP2ReferenceableGridCoverage has a domain geometry that is a subtype of AbstractReferenceableGrid (of CIS), such that a concrete instance of AbstractReferenceableGrid shall be selected from and fully conformant with the Extension standard. 
Dependency: http://www.opengis.net/spec/GMLCOV/GMLCOVRGRID/1.0/req/gmlcovrgrid

 

Requirement 32   /req/gmljp2rgrid/GMLJP2ReferenceableGridCoverage-CRS
The GMLJP2ReferenceableGridCoverage model of GMLJP2 requires the definition of the external CRS associated to each coverage; this is done using the srsName attribute of an element deriving from gmlcov:AbstractReferenceableGrid in the domainSet.

Each GMLJP2ReferenceableGridCoverage has an external CRS that applies to the domain set only after it has been transformed by an associated transformation specified by a concrete instance of AbstractReferenceableGrid.  As there is no default external CRS, there is instead a single external CRS carried in the domain set, via srsName.

In addition, a GMLJP2ReferenceableGridCoverage will conditionally have an internal CRS that applies to the domain set prior to the application of the transformation.  An example of an internal CRS is that of the local imaging plane of an electro-optical sensor grid of a camera, while the corresponding external CRS is that of the imaged ground coordinates, which would typically be described with a ProjectedCRS or GeodeticCRS.  An optional support element “gridCRS” is available to some AbstractReferenceableGrid types (e.g. ReferenceableGridByTransformation and ReferenceableGridBySensorModel) for specifying a sequence of CRS definitions in GML.  It is recommended that for such AbstractReferenceableGrid types, the first CRS definition of the gridCRS be specified as an ImageCRS that represents the internal CRS, while any subsequent CRS definitions represent any additional CRSs that may be required by the specific referenceable grid transformation.  It is also recommended that none of these additional CRSs after the first be an ImageCRS.

Note: The ImageDatum[8] of the ImageCRS determines the origin of the image coordinate system (CD_PixelinCell), which may be specified to be located at either the center or corner of the first image pixel, i.e. with the gml:pixelInCell subelement of the gml:ImageDatum set to “Cell center” or “Cell corner”, respectively.  This choice may be decided based either on the policy associated with a specific implementation of a referenceable grid transformation or on the details of the initial image collection and subsequent processing, issues that are beyond the scope of this document.  If no ImageCRS is specified for the gridCRS, CD_PixelinCell is assumed to be set to “Cell center”.

 

 

12.Image annotation (informative)

12.1  Introduction

In the general case not limited to imagery, an annotation is a combination of a 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, and possibly including audio), and an association between the FOI and the label such as an abstract or a graphically explicit representation, e.g. a line or an arrow (see Figure 8). As annotations are intended for visualization, they are dependent on visualization styles.

In this standard, an annotation is more restricted to be an association between a label that annotates a JPEG 2000 image or some geometric feature of interest (FOI) within the JPEG 2000 image.  The geometric properties of the FOI may be defined by a GML geometry, which can be e.g. a point or line string in the same CRS coordinates as the image. If no geometric region is defined, the annotation applies to the entire image that is contained in 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 supports the use of a combination of GML and KML, to complement their individual limitations. 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 descriptions, while current versions of KML only support 3d geographic coordinates (i.e., unprojected latitude, longitude, and altitude). While HTML provides symbology for labels, the current version of GML does not provide a recognized symbology mechanism. Note that support for SVG was introduced in GML 3.0, which would have provided such a mechanism, but which has been deprecated in more recent versions. Thus, for the FOI, the GMLJP2 standard recommends the use of GML. The application should portray the FOIs in a way, unfortunately without any symbology support from GML, that ensures that the user will be able to recognize the symbols drawn on the image. To describe the label to annotate the FOI, KML is recommended. The application that renders the labels will be required to dynamically reproject the KML data (in geographic coordinates) into the JPEG 2000 CRS before presenting it. In addition, it would be helpful if an explicit graphical association between the ROI and the label (e.g. a line or a curve) were provided by the application.

An alternative way of achieving the mapping of the GML (feature types) is to make use of the OGC Styled Layer Descriptor (SLD) Profile [OGC 05-078r4] and the OGC Symbology Encoding (SE) Implementation Specification [OGC 05-077r4], which together define encodings that extend the WMS Encoding Standard for comprehensive symbology support. An SLD/SE symbolization can be packaged in a GMLJP2 that would fulfill requirements for both standalone or networked systems. The KML label could then be generated on the fly from the GML together with the SDL/SE definitions. In the future, the use of SLD/SE may enable the creation of a Portrayal Registry in which symbols, styles, and other definitions are stored, enabling reuse by a set of JPEG 2000 images.

Single annotation represented on top of a JPEG 2000 image
Figure : Single annotation represented on top of a JPEG 2000 image

12.2  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.

Annex : Abstract Test Suites (Normative)

A GMLJP2 implementation must satisfy the following system characteristics to be conformant with this specification, organized into a conformance class, core, and a conformance class, gmljp2rgrid, that is for conformance testing of GMLJP2ReferenceableGridCoverage.

 

Test identifiers below are relative to

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

 

A.1 Conformance Test Class: core

The OGC URI identifier of this conformance class is: http://www.opengis.net/spec/GMLJP2/2.1/conf/core

 

This conformance class is the same as its equivalent in version 2.0 (superseded by corrigendum 2.0.1)

A.1.1                       GMLJP2 file contains a CIS coverage

Test id:

/conf/core/gmljp2-gmlcov

Test Purpose:

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

Test method:

Check if the GMLJP2 XML instances use elements from  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 JPEG 2000 header

Test id:

/conf/core/header-precedence

Test Purpose:

Requirement /req/core/header-precedence: Coverage metadata in a GMLJP2 XML instance about the internal structure of the JPEG 2000 file (e.g. number of codestreams, number of rows and columns of a codestream) shall be coherent with the JPEG 2000 binary header information. In case of discrepancies the JPEG 2000 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 CIS precedence

Test id:

/conf/core/gmlcov-precedence

Test Purpose:

Requirement /req/core/gmlcov-precedence: gmlcov:metadata information shall be coherent with the corresponding CIS 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 CIS 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/core/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                       Geographic features conformant with GML 3.2.1

Test id:

/conf/core/gml-geographicFeatures

Test Purpose:

Requirement /req/core/gml-geographicFeatures: Geographic features (if any) included in a JPEG 2000 encoded image using GMLJP2 shall be encoded as GML 3.2 features.

Test method:

Verify that geographic features (if any) under the gmljp2:GMLJP2Features element comply with the rules for GML application schemas as defined in Clause 21 of the GML 3.2.1 standard [OGC 07-036].

A.1.6                       CRS is well defined externally by URI

Test id:

/conf/core/gmlcov-CRS-byref

Test Purpose:

Requirement /req/core/gmlcov-CRS-byref: CRS SHALL be identified by URI following the OGC document OGC 11-135 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.7                       CRS is defined for rectified grid coverages

Test id:

/conf/core/gmlcov-RectifiedGridCoverage-CRS

Test Purpose:

Requirement /req/core/gmlcov-RectifiedGridCoverage-CRS

Test method:

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

A.1.8                       UoM in rangeType are defined when applicable

Test id:

/conf/core/gmlcov-rangetype-uom

Test Purpose:

Requirement /req/core/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.9                       UoM are defined by reference

Test id:

/conf/core/gmlcov-uom-byref

Test Purpose:

Requirement /req/core/gmlcov-uom-byref

Test method:

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

A.1.10                    GMLJP2 file gmlcov-nil-values

Test id:

/conf/core/gmlcov-nil-values

Test Purpose:

Requirement /req/core/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.11                    Nil-values by reference

Test id:

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

Test Purpose:

Requirement /req/core/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 nil values are defined as URI’s. Test passes if there are.

A.1.12                    GMLJP2 file root is a coverage collection

Test id:

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

Test Purpose:

Requirement /req/core/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 populated according to requirement 11. Test passes if the root is as expected.

A.1.13                    GMLJP2 file coverages

Test id:

/conf/core/gmlcov-coverage-container

Test Purpose:

Requirement /req/core/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.14                    GMLJP2 file gmlcov-metadata

Test id:

/conf/core/gmlcov-metadata

Test Purpose:

Requirement /req/core/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.15                    GMLJP2 file features

Test id:

/conf/core/gmlcov-feature-container

Test Purpose:

Requirement /req/core/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.16                    GMLJP2 file annotations

Test id:

/conf/core/annotation-container

Test Purpose:

Requirement /req/core/annotation-container

Test method:

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

A.1.17                    GMLJP2 file styles

Test id:

/conf/core/annotation-container

Test Purpose:

Requirement /req/core/style-container

Test method:

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

A.1.18                    GMLJP2 file reference to codestream

Test id:

/conf/core/filename-codestream

Test Purpose:

Requirement /req/core/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.19                    GMLJP2 file XML boxes

Test id:

/conf/core/xml-boxes

Test Purpose:

Requirement /req/core/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.20                    GMLJP2 file XML boxes signaled correctly

Test id:

/conf/core/xml-box-signal

Test Purpose:

Requirement /req/core/xml-box-signal

Test method:

Verify that the XML box is signaled with the value 67 indicating GML or GIS metadata (XMLGISMetaData). If so, test passes.

A.1.21                    GMLJP2 file is a jp2 compatible

Test id:

/conf/core/jp2-compatible

Test Purpose:

Requirement /req/core/jp2-compatible

Test method:

Verify that the JPEG 2000 is marked as “jp2” in the compatibility list. If so, test passes.

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

Test id:

/conf/core/jp2-outer-box

Test Purpose:

Requirement /req/core/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.23                    GMLJP2 file /req/core/jp2-other-inner-box

Test id:

/conf/core/jp2-other-inner-box

Test Purpose:

Requirement /req/core/jp2-other-inner-box

Test method:

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

A.1.24                    XML references are well defined externally by URI

Test id:

/conf/core/gmlcov-XML-ReferencesByURIs

Test Purpose:

Requirement /req/core/gmlcov-XML-ReferencesByURIs: XML references SHALL be identified by URI following the OGC document OGC 11-135 and maintained in http://www.opengis.net/def.

Test method:

Verify that XML references are declared using URIs. Test passes if all XML references are URIs.

A.1.25                    GMLJP2 file /req/core/gmljp2-schemalocation

Test id:

/conf/core/gmljp2-schemalocation

Test Purpose:

Requirement /req/core/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.26                    GMLJP2 file /req/core/gmljp2-xmlSchema

Test id:

/conf/core/gmljp2-xmlSchema

Test Purpose:

Requirement /req/core/gmljp2-xmlSchema

Test method:

Verify that when XML resources embedded in a JPEG200 file includes a schema definition, verify that such resources follow the specified assessment rules. If so, test passes.

A.1.27                    GMLJP2 file /req/core/external-references

Test id:

/conf/core/external-references

Test Purpose:

Requirement /req/core/external-references

Test method:

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

A.1.28                    GMLJP2 file /req/core/internal-references

Test id:

/conf/core/internal-references

Test Purpose:

Requirement /req/core/internal-references

Test method:

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

A.1.29                    GMLJP2 file /req/core/internal-references-to-xmlbox

Test id:

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

Test Purpose:

Requirement /req/core/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.30                    GMLJP2 file /req/core/internal-references-to-codestream

Test id:

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

Test Purpose:

Requirement /req/core/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.

A.2  Conformance Test Class: gmljp2rgrid

The OGC URI identifier of this conformance class is:

http://www.opengis.net/spec/GMLJP2/2.1/conf/gmljp2rgrid

This Conformance class is for support of the GMLJP2ReferenceableGridCoverage as a derived type of ReferenceableGridCoverage of CIS that exclusively uses the ReferenceableGridCoverage Extension for concrete instances of AbstractReferenceableGrid of CIS.

A.2.1                       Use of ReferenceableGridCoverage Extension

Test id:

/conf/gmljp2rgrid/GMLJP2ReferenceableGridCoverage-structure

Test Purpose:

Requirement

/req/gmljp2rgrid/GMLJP2ReferenceableGridCoverage-structure

Test method:

For every instance of GMLJP2ReferenceableGridCoverage found in the GMLJP2 document under test:

Check if the GMLJP2ReferenceableGridCoverage instance’s domainSet element has a valid concrete instance of AbstractReferenceableGrid (of CIS) that is selected from the ReferenceableGridCoverage Extension.

Test passes if all GMLJP2ReferenceableGridCoverage instances pass this check.

A.2.2                       External CRS is defined

Test id:

/conf/gmljp2rgrid/GMLJP2ReferenceableGridCoverage-CRS

Test Purpose:

Requirement

/req/gmljp2rgrid/GMLJP2ReferenceableGridCoverage-CRS

Test method:

Verify that all GMLJP2ReferenceableGridCoverage instances have an external CRS defined in the domainSet. Test passes if all GMLJP2ReferenceableGridCoverage instances have an external CRS defined.

Annex : UML diagrams (Informative)

This Annex provides a UML class model of the GMLJP2 XML data structure defined in Clause 8. Figure 9 diagram shows that a GMJP2CoverageCollection is composed by featureMembers that can be GMLJP2GridCoverage, GMLJP2RectifiedGridCoverage, or GMLJP2ReferenceableGridCoverage (one for each codestream), where all of them are derived from the abstract GMLJP2Coverage that is extended from the gmlcov:AbstractDiscreteCoverageType and includes features, styles, and annotations.

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

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

Annex : XML Schemas documents (Informative)

In addition to this document, this standard includes some normative XML Schema Documents. These XML Schema Documents are posted online at the URL http://schemas.opengis.net/gmljp2/2.1. In the event of a discrepancy between the bundled and online versions of the XML Schema Documents, the online 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 CIS 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.1"
xmlns:gml="http://www.opengis.net/gml/3.2"
xmlns:gmlcov=”http://www.opengis.net/gmlcov/1.0”
xmlns:gmlcovrgrid="http://www.opengis.net/gmlcov/gmlcovrgrid/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.1"
xmlns:dc="http://purl.org/dc/elements/1.1/"
targetNamespace="http://www.opengis.net/gmljp2/2.1"
   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/gmlcov/gmlcovrgrid/1.0"
   schemaLocation="http://schemas.opengis.net/gmlcov/gmlcovrgrid/1.0/gmlcovrgrid.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.1"
   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 : GMLJP2 examples (Informative)

D.1.   ISO19115-ISO19139 metadata example


<?xml version=“1.0” encoding=“UTF-8”?>
<gmljp2:GMLJP2CoverageCollection gml:id="JPEG 2000_0"
   xsi:schemaLocation="http://www.opengis.net/gmljp2/2.1 http://schemas.opengis.net/gmljp2/2.1/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.1"
xmlns:swe="http://www.opengis.net/swe/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:domainSet nilReason=“inapplicable”/>
 <gml:rangeSet>
   <gml:DataBlock>
    <gml:rangeParameters nilReason=“inapplicable”/>
  <gml:doubleOrNilReasonTupleList>inapplicable</gml:doubleOrNilReasonTupleList>
   </gml:DataBlock>
 </gml:rangeSet>
 <gmlcov:rangeType>
   <swe:DataRecord>
    <swe:field name="Collection"> </swe:field>
   </swe:DataRecord>
 </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>6208 3103</gml:high>
         </gml:GridEnvelope>
       </gml:limits>
       <gml:axisLabels>Lat Long</gml:axisLabels>
       <gml:origin>
         <gml:Point gml:id="P0001">
          <gml:pos>41.4756576954751 2.04345415526392</gml:pos>
         </gml:Point>
       </gml:origin>
       <gml:offsetVector>0 3.71e-005</gml:offsetVector>
       <gml:offsetVector>-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>
      <swe:DataRecord>
       <swe:field name=“Panchromatic”>
         <swe:Quantity definition=“http://www.opengis.net/def/ogc-eo/opt/SpectralMode/PANCHROMATIC”>
          <swe:description>Panchromatic Channel</swe:description>
          <swe:uom code=“unity”/>
          <!– Unity for value without unit of measures –>
         </swe:Quantity>
       </swe:field>
      </swe:DataRecord>
    </gmlcov:rangeType>
     <gmlcov:metadata>
      <gmljp2:Metadata>
       <gmljp2:isoMetadata>
         <gmd:MD_Metadata>
          <gmd:fileIdentifier>
           <gco:CharacterString>111111</gco:CharacterString>
          </gmd:fileIdentifier>
          <gmd:hierarchyLevel>
          <gmd:MD_ScopeCode
             codeListValue="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>
   </gmljp2:GMLJP2RectifiedGridCoverage>
</gmljp2:featureMember>
</gmljp2:GMLJP2CoverageCollection>


D.2.   Earth Observation profile example

NB: Note that the EOP schema uses URN instead of URL.


<?xml version=“1.0” encoding=“UTF-8”?>
<gmljp2:GMLJP2CoverageCollection gml:id="JPEG 2000_0"
 xsi:schemaLocation="http://www.opengis.net/gmljp2/2.1 http://schemas.opengis.net/gmljp2/2.1/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.1"
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:domainSet nilReason=“inapplicable”/>
 <gml:rangeSet>
   <gml:DataBlock>
    <gml:rangeParameters nilReason=“inapplicable”/>
  <gml:doubleOrNilReasonTupleList>inapplicable</gml:doubleOrNilReasonTupleList>
   </gml:DataBlock>     
 </gml:rangeSet>
 <gmlcov:rangeType>
   <swe:DataRecord>
    <swe:field name="Collection"> </swe:field>
   </swe:DataRecord>
 </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>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">
          <gml:pos>41.4756576954751 2.04345415526392</gml:pos>
         </gml:Point>
       </gml:origin>
       <gml:offsetVector>0 3.7163372079825e-005</gml:offsetVector>
       <gml:offsetVector>-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>
    <gmlcov:rangeType>
      <swe:DataRecord>
       <swe:field name=“Panchromatic”>
         <swe:Quantity definition=“http://www.opengis.net/def/ogc-eo/opt/SpectralMode/PANCHROMATIC”>
          <swe:description>Panchromatic Channel</swe:description>
          <swe:uom code=“unity”/>
          <!– Unity for value without unit of measures –>
         </swe:Quantity>
       </swe:field>
      </swe:DataRecord>
    </gmlcov:rangeType>
     <gmlcov:metadata>
      <gmljp2:Metadata>
       <gmljp2:eopMetadata>
         <eop:EarthObservation
           xmlns:xlink="http://www.w3.org/1999/xlink"
           xmlns:eop="http://www.opengis.net/eop/2.1"
           xmlns:opt="http://www.opengis.net/opt/2.1"
           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: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: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="JPEG 2000_0"
 xsi:schemaLocation="http://www.opengis.net/gmljp2/2.1 http://schemas.opengis.net/gmljp2/2.1/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.1"
xmlns:swe="http://www.opengis.net/swe/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:domainSet nilReason=“inapplicable”/>
 <gml:rangeSet>
   <gml:DataBlock>
    <gml:rangeParameters nilReason=“inapplicable”/>
    <gml:doubleOrNilReasonTupleList>inapplicable</gml:doubleOrNilReasonTupleList>
   </gml:DataBlock>
 </gml:rangeSet>
 <gmlcov:rangeType>
   <swe:DataRecord>
    <swe:field name="Collection"> </swe:field>
   </swe:DataRecord>
 </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>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">
          <gml:pos>41.4756576954751 2.04345415526392</gml:pos>
         </gml:Point>
       </gml:origin>
       <gml:offsetVector>0     3.7163372079825e-005</gml:offsetVector>
       <gml:offsetVector>-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>
    <gmlcov:rangeType>
      <swe:DataRecord>
       <swe:field name=“Panchromatic”>
         <swe:Quantity definition=“http://www.opengis.net/def/ogc-eo/opt/SpectralMode/PANCHROMATIC”>
          <swe:description>Panchromatic Channel</swe:description>
          <swe:uom code=“unity”/>
          <!– Unity for value without unit of measures –>
         </swe:Quantity>
       </swe:field>
      </swe:DataRecord>
    </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.    Free text metadata example


<?xml version=“1.0” encoding=“UTF-8”?>
<gmljp2:GMLJP2CoverageCollection gml:id="JPEG 2000_0"
 xsi:schemaLocation="http://www.opengis.net/gmljp2/2.1 http://schemas.opengis.net/gmljp2/2.1/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.1”
xmlns:swe="http://www.opengis.net/swe/2.0"
xmlns:gmd="http://www.isotc211.org/2005/gmd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<gml:domainSet nilReason=“inapplicable”/>
 <gml:rangeSet>
   <gml:DataBlock>
    <gml:rangeParameters nilReason=“inapplicable”/>
    <gml:doubleOrNilReasonTupleList>inapplicable</gml:doubleOrNilReasonTupleList>
   </gml:DataBlock>
 </gml:rangeSet>
 <gmlcov:rangeType>
   <swe:DataRecord>
    <swe:field name="Collection"> </swe:field>
   </swe:DataRecord>
 </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>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">
          <gml:pos>41.4756576954751 2.04345415526392</gml:pos>
         </gml:Point>
       </gml:origin>
       <gml:offsetVector>0     3.7163372079825e-005</gml:offsetVector>
       <gml:offsetVector>-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>
    <gmlcov:rangeType>
      <swe:DataRecord>
       <swe:field name=“Panchromatic”>
         <swe:Quantity definition=“http://www.opengis.net/def/ogc-eo/opt/SpectralMode/PANCHROMATIC”>
          <swe:description>Panchromatic Channel</swe:description>
          <swe:uom code=“unity”/>
          <!– Unity for value without unit of measures –>
         </swe:Quantity>
       </swe:field>
      </swe:DataRecord>
    </gmlcov:rangeType>
     <gmlcov:metadata>
      <gmljp2:Metadata>
       <gmljp2:metadata>Some simple textual metadata</gmljp2:metadata>
      </gmljp2:Metadata>
    </gmlcov:metadata>
   </gmljp2:GMLJP2RectifiedGridCoverage>
  </gmljp2:featureMember>
</gmljp2:GMLJP2CoverageCollection>


D.5.    Unrectified image described with a coverage on a referenceable grid (example)

See http://gmljp2.aeroptic.com/ for sensor model imagery examples and documentation.

 


<?xml version=“1.0” encoding=“UTF-8” ?>
<gmljp2:GMLJP2CoverageCollection gml:id=“GMLJP2_0”
xmlns=“http://www.opengis.net/gml/3.2”
xmlns:gmlcovrgrid="http://www.opengis.net/gmlcov/gmlcovrgrid/1.0"
xmlns:gmlcov=“http://www.opengis.net/gmlcov/1.0”
xmlns:gmljp2="http://www.opengis.net/gmljp2/2.1"
xmlns:gml=“http://www.opengis.net/gml/3.2”
xmlns:swe=“http://www.opengis.net/swe/2.0”
xmlns:xlink=“http://www.w3.org/1999/xlink”
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation="http://www.opengis.net/gmljp2/2.1
  http://schemas.opengis.net/gmljp2/2.1/gmljp2.xsd">
  <boundedBy>
    <Envelope srsName=“http://www.opengis.net/def/crs/EPSG/0/4326”
      axisLabels=“Lat Long” uomLabels=“deg deg” srsDimension=“2”>
      <lowerCorner>42.71582 -71.2996</lowerCorner>
      <upperCorner>42.72006 -71.30496</upperCorner>
    </Envelope>
  </boundedBy>
  <domainSet nilReason=“inapplicable” />
  <rangeSet>
    <DataBlock>
      <rangeParameters nilReason=“inapplicable” />
        <doubleOrNilReasonTupleList>inapplicable</doubleOrNilReasonTupleList>
    </DataBlock>
  </rangeSet>
  <gmlcov:rangeType>
    <swe:DataRecord>
      <swe:field name=“Collection” />
    </swe:DataRecord>
  </gmlcov:rangeType>
  <gmljp2:featureMember>
    <gmljp2:GMLJP2ReferenceableGridCoverage gml:id=“RefGridCov_0”>
      <domainSet>
        <gmlcovrgrid:ReferenceableGridBySensorModel gml:id=“RefGrid_0”
          dimension=“2” srsDimension=“3”
          srsName="http://www.opengis.net/def/crs/EPSG/0/4979">
        <limits>
          <GridEnvelope>
            <low>0 0</low>
            <high>7759 10327</high>
          </GridEnvelope>
        </limits>
        <axisLabels>Row Column</axisLabels>
        <gmlcovrgrid:sensorModel xlink:title=“OGC:sensorML:CSM_FSMMG_v2102”
          xlink:href="http://gmljp2.aeroptic.com/sensorML/CSM_FSMMG_v2102.xml"/>
        <gmlcovrgrid:sensorInstance>
          <sml:SimpleProcess gml:id=“SensorML_0”
          xmlns=“http://www.opengis.net/gml/3.2”
          xmlns:gml=“http://www.opengis.net/gml/3.2”
          xmlns:sml=“http://www.opengis.net/sensorml/2.0”
          xmlns:swe=“http://www.opengis.net/swe/2.0”
          xmlns:xlink=“http://www.w3.org/1999/xlink”
          xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
          xsi:schemaLocation="http://www.opengis.net/sensorml/2.0
            http://schemas.opengis.net/sensorml/2.0/sensorML.xsd">
            <description>
              Aeroptic Airborne Frame Camera System encoded with CSM_FSMMG_v2102</description>
            <identifier codeSpace=“http://gmljp2.aeroptic.com/ossim/identifiers”>
              AeropticEOSM_v114</identifier>
            <name codeSpace=“http://gmljp2.aeroptic.com/ossim/names”>
              ossimAeropticEOSensorModel</name>
            <name codeSpace=“http://gmljp2.aeroptic.com/ossim/names”>
              ossimAeropticEOSensorModelBase</name>
            <name codeSpace=“http://gmljp2.aeroptic.com/ossim/names”>
              ossimBuckeyeSensor</name>
            <sml:typeOf xlink:title=“OGC:sensorML:CSM_FSMMG_v2102”
              xlink:href=“http://gmljp2.aeroptic.com/sensorML/CSM_FSMMG_v2102.xml” />
            <sml:configuration>
              <sml:Settings>
                <!– fsmmgSensorImage single values –>
                <sml:setValue ref=“parameters/fsmmgSensorImage/collectionTime”>
                  1494940251807225</sml:setValue>
                <!– fsmmgSensorSession single values –>
                <sml:setValue ref=“parameters/fsmmgSensorSession/sensorType”>
                  EO</sml:setValue>
                <sml:setValue ref=“parameters/fsmmgSensorSession/focus/focalLength”>
                  148.3</sml:setValue>
                <sml:setValue
                  ref=“parameters/fsmmgSensorSession/pixelGridCharacteristics/numberOfRowsInImage”>
                         7760</sml:setValue>
                <sml:setValue
                  ref=“parameters/fsmmgSensorSession/pixelGridCharacteristics/numberOfColumnsInImage”>
                  10328</sml:setValue>
                <sml:setValue
                  ref=“parameters/fsmmgSensorSession/pixelGridCharacteristics/rowSpacing”>
                        0.0052</sml:setValue>
                <sml:setValue
                  ref=“parameters/fsmmgSensorSession/pixelGridCharacteristics/columnSpacing”>
                  0.0052</sml:setValue>
                <!– fsmmgSensorImage array values –>
                <sml:setArrayValues
                  ref=“parameters/fsmmgSensorImage/positionOrientationState/perspectiveCenter”>
                  <sml:ArrayValues>
                    <sml:encoding>
                      <s:TextEncoding
                          tokenSeparator=“,” blockSeparator=“&#x0A;” decimalSeparator=“.” />
                    </sml:encoding>
                    <sml:value>
                      1505083.09478582,-4446383.37808881,4305623.97164075
                    </sml:value>
                  </sml:ArrayValues>
                </sml:setArrayValues>
                <sml:setArrayValues
                        ref=“parameters/fsmmgSensorImage/positionOrientationState/exteriorOrientation”>
                  <sml:ArrayValues>
                    <sml:encoding>
                      <swe:TextEncoding
                               tokenSeparator=“,” blockSeparator=“&#x0A;” decimalSeparator=“.” />
                    </sml:encoding>
                    <sml:value>
                      0.925936077460105,0.287696988367182,-0.244689238304933,-0.0811456576364252,
                      0.784285885452468,0.61506994084152,0.368860085539961,-0.549659979227605,0.749543957704257
                    </sml:value>
                  </sml:ArrayValues>
                </sml:setArrayValues>
                <!– fsmmgSensorSession array values –>
                <sml:setArrayValues
                  ref=“parameters/fsmmgSensorSession/principalPointOffset”>
                  <sml:ArrayValues>
                    <sml:encoding>
                      <swe:TextEncoding
                               tokenSeparator=“,” blockSeparator=“&#x0A;” decimalSeparator=“.” />
                    </sml:encoding>
                    <sml:value>0,0</sml:value>
                  </sml:ArrayValues>
                </sml:setArrayValues>
                <sml:setArrayValues ref=“parameters/fsmmgSensorSession/radialDistortion”>
                  <sml:ArrayValues>
                    <sml:encoding>
                      <swe:TextEncoding
                               tokenSeparator=“,” blockSeparator=“&#x0A;” decimalSeparator=“.” />
                    </sml:encoding>
                    <sml:value>0,2.42746313696e-007,8.75184423e-010,-4.4605e-014,0
                    </sml:value>
                  </sml:ArrayValues>
                </sml:setArrayValues>
                <sml:setArrayValues
                       ref=“parameters/fsmmgSensorSession/decenteringDistortion”><sml:ArrayValues>
                  <sml:encoding>
                    <swe:TextEncoding
                             tokenSeparator=“,” blockSeparator=“&#x0A;” decimalSeparator=“.” /></sml:encoding>
                      <sml:value>0,0,0,0</sml:value>
                    </sml:ArrayValues>
                  </sml:setArrayValues>
                </sml:Settings>
              </sml:configuration>
            </sml:SimpleProcess>
          </gmlcovrgrid:sensorInstance>
        </gmlcovrgrid:ReferenceableGridBySensorModel>
      </domainSet>
      <rangeSet>
        <File>
          <rangeParameters nilReason=“inapplicable” />
          <fileName>gmljp2://codestream</fileName>
          <fileStructure>inapplicable</fileStructure>
          <mimeType>image/jp2</mimeType>
        </File>
      </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>
                  <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.m-2.sr-1.nm-1” />
              <swe:constraint>
                <swe:AllowedValues>
                  <swe:interval>0 255</swe:interval>
                  <swe:significantFigures>3</swe:significantFigures>
                </swe:AllowedValues>
              </swe:constraint>
            </swe:Quantity>
          </swe:field>
          <swe:field name=“green”>
            <swe:Quantity definition=“http://opengis.net/def/property/OGC/0/Radiance”>
              <swe:description>Green Channel</swe:description>
              <swe:nilValues>
                <swe:NilValues>
                  <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.m-2.sr-1.nm-1” />
                <swe:constraint>
                  <swe:AllowedValues>
                    <swe:interval>0 255</swe:interval>
                    <swe:significantFigures>3</swe:significantFigures>
                  </swe:AllowedValues>
                </swe:constraint>
            </swe:Quantity>
          </swe:field>
          <swe:field name=“blue”>
            <swe:Quantity definition=“http://opengis.net/def/property/OGC/0/Radiance”>
              <swe:description>Blue Channel</swe:description>
                <swe:nilValues>
                  <swe:NilValues>
                    <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.m-2.sr-1.nm-1” />
                <swe:constraint>
                  <swe:AllowedValues>
                  <swe:interval>0 255</swe:interval>
                  <swe:significantFigures>3</swe:significantFigures>
                </swe:AllowedValues>
              </swe:constraint>
            </swe:Quantity>
          </swe:field>
        </swe:DataRecord>
      </gmlcov:rangeType>
    </gmljp2:GMLJP2ReferenceableGridCoverage>
  </gmljp2:featureMember>
</gmljp2:GMLJP2CoverageCollection>


 

Annex : Bibliography

[1]           ISO 19139, Geographic Information – Metadata – XML schema implementation.

 

 

Annex : 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 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 Masó, Emmanuel Devys, Lucio Colaiacomo

All

General revision with modification requested by OGC Architecture Board

17 April 2014

2.0.10

Joan Masó, Emmanuel Devys, Lucio Colaiacomo

All

General revision for resolution of RFC comments

04 Nov 2015

2.0.11

Lucio Colaiacomo, Raul Alonso Reyes, Emmanuel Devys

All

Corrigendum

09 July 2017

2.1.0 (draft)

Lucio Colaiacomo, Emmanuel Devys,

Eric Hirschorn

All

Revision for support of referenceable grid types defined by the ReferenceableGridCoverage Extension.

15 Feb 2018

2.1

Emmanuel Devys,

Eric Hirschorn

All

Edits requested by the OAB

14 Mar 2018

2.1

Lucio Colaiacomo, Emmanuel Devys,

Eric Hirschorn

All

Edits requested by Carl Reed.

 



[1] See discussion at: http://fileformats.archiveteam.org/wiki/GeoJP2

[2] Celartem, Inc (also known as LizardTech) claims the trademark to GeoJP2

[3] https://en.wikipedia.org/wiki/De_facto_standard

[4] For frame camera, see the SensorML 2.0 encoding of the CSM FSMMG at http://gmljp2.aeroptic.com

[5] One of the co-editors (E. Devys) has presented work on RPC replacement sensor model encodings.

[6] As CIS 1.1 formally adopts CIS 1.0 in one of its Requirements (Req 1), and includes the CIS 1.0 schema within its own, GMLJP2 2.1 may also be said to be compatible with CIS 1.1.  However, none of the coverage types of GMLJP2 2.1 are based on the GeneralGridCoverage type introduced in CIS 1.1.

[7] See www.epsg-registry.org for EPSG definitions.

[8] See ISO 19111, Annex B.3.5 (Image datum) for a discussion of the relationship between the image pixel grid and the pixel origin.