Change Requests | OGC

Open Geospatial Consortium, Inc.
OpenGIS® Implementation Specification:
Grid Coverage

R
ET

IR
ED

Revision 1.00

OpenGIS Project Document 01-004
Release Date: 12 January 2001

Copyright © Open Geospatial Consortium, Inc (2005)
To obtain additional rights of use, visit http://www.opengeospatial.org/legal/

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.
None of the Intellectual Property or underlying information or technology may be downloaded or otherwise exported or reexported in
violation of U.S. export laws and regulations. In addition, you are responsible for complying with any local laws in your jurisdiction

which may impact your right to import, export or use the Intellectual Property, and you represent that you have complied with any
regulations or registration procedures required by applicable law to make this license enforceable

ii

Copyright © 2012 Open Geospatial Consortium

OpenGIS Implementation Specification

Grid Coverages

TABLE OF CONTENTS
TABLE OF CONTENTS _____________________________________________________________ 3
TABLE OF FIGURES _______________________________________________________________ 8

0.0

PREFACE _______________________________________________________________ 9

0.1


SUBMITTING COMPANIES____________________________________________________ 9

0.2

SUBMISSION CONTACT POINTS ______________________________________________ 9

0.3

DOCUMENT CONVENTIONS __________________________________________________ 9

0.4

REVISION HISTORY _________________________________________________________ 10

0.5

EDITORIAL NOTES__________________________________________________________ 10

0.6


CHANGES TO THE ABSTRACT SPECIFICATION _______________________________ 10

0.7

DEPENDENCIES ON OTHER OGC SPECIFICATIONS ___________________________ 10

SPECIFICATION OVERVIEW_______________________________________________ 10

2

ARCHITECTURE _________________________________________________________ 11
2.1

IR
ED

1

Grid Coverages _______________________________________________________________ 11

Grid Coverage Characteristics_______________________________________________________ 11
Grid Coordinate System ____________________________________________________________ 12
Grid Coverage Tiling ______________________________________________________________ 12
Color Palettes_____________________________________________________________________ 12
Interoperability ___________________________________________________________________ 12

2.1.1
2.1.2
2.1.3
2.1.4
2.1.5

CV_Coverage ________________________________________________________________ 13

2.3

GC_GridCoverage ____________________________________________________________ 14

2.4


GC_CoverageExchange ________________________________________________________ 15

2.5

GP_GridAnalysis (optional) ____________________________________________________ 16

2.6

GP_GridCoverageProcessor (optional) ___________________________________________ 17

2.7

Interfaces Supporting Coverage (CV) Package _____________________________________ 18

R
ET

2.2

CV_SampleDimension _____________________________________________________________ 18


2.7.1

2.8

Interfaces/Datatypes Supporting Grid Coverage (GC) Package_______________________ 18
GC_GridPacking__________________________________________________________________ 18
GC_GridGeometry ________________________________________________________________ 18
GC_GridRange ___________________________________________________________________ 18
GC_ParameterInfo ________________________________________________________________ 18
GC_Parameter____________________________________________________________________ 18
GC_Format ______________________________________________________________________ 18

2.8.1
2.8.2
2.8.3
2.8.4
2.8.5
2.8.6


2.9

Interfaces Supporting Grid Coverage Processing (GP) Package ______________________ 18

2.9.1

GP_Operation ____________________________________________________________________ 18

3 COMPONENT SERVICES ____________________________________________________ 19
3.1

GRID CONPONENTS CLASSES AND INTERFACES _____________________________ 19

3.1.1
CV_Coverage_____________________________________________________________________ 19
3.1.1.1 Attributes ______________________________________________________________________ 19
3.1.1.1.1 +numSampleDimensions : Integer ________________________________________________ 19

Page 3 of 71


OGC Document Number 01-004

OpenGIS Implementation Specification

Grid Coverages

R
ET

IR
ED

3.1.1.1.2 +dimensionNames : Sequence____________________________________ 19
3.1.1.1.3 +numSource : Integer __________________________________________________________ 20
3.1.1.1.4 +metadataNames : Sequence ____________________________________ 20
3.1.1.1.5 +coordinateSystem : CS_CoordinateSystem ________________________________________ 20
3.1.1.1.6 +envelope : PT_Envelope________________________________________________________ 20
3.1.1.2 getSampleDimension_____________________________________________________________ 20
3.1.1.3 getSource ______________________________________________________________________ 21
3.1.1.4

getMetadataValue _____________________________________________________________ 21
3.1.1.5 evaluate _______________________________________________________________________ 21
3.1.1.6 evaluateAsBoolean ______________________________________________________________ 22
3.1.1.7 evaluateAsByte _________________________________________________________________ 22
3.1.1.8 evaluateAsInteger _______________________________________________________________ 22
3.1.1.9 evaluateAsDouble _______________________________________________________________ 23
3.1.2
GC_GridCoverage ________________________________________________________________ 23
3.1.2.1 Attributes ________________________________________________________________________ 24
3.1.2.1.1 +dataEditable : Boolean_________________________________________________________ 24
3.1.2.1.2 +gridPacking : GC_GridPacking _______________________________________________ 25
3.1.2.1.3 +gridGeometry : GC_GridGeometry ____________________________________________ 25
3.1.2.1.4 +numOverviews : Integer _______________________________________________________ 25
3.1.2.2 getOverviewGridGeometry _______________________________________________________ 25
3.1.2.3 getOverview ____________________________________________________________________ 25
3.1.2.4 getDataBlockAsXXX_____________________________________________________________ 26
3.1.2.5 getPackedDataBlock _____________________________________________________________ 27
3.1.2.6 setDataBlockAsXXX _____________________________________________________________ 28
3.1.2.7 setPackedDataBlock _____________________________________________________________ 28
3.1.3 GC_GridCoverageExchange____________________________________________________________ 29
3.1.3.1 Attributes ________________________________________________________________________ 29
3.1.3.1.1 +numFormats : Integer _________________________________________________________ 29
3.1.3.1.2 +metadataNames : Sequence ____________________________________ 29
3.1.3.2 getFormat _____________________________________________________________________ 29
3.1.3.3 getMetadataValue _________________________________________________________________ 30
3.1.3.4 createFromName__________________________________________________________________ 30
3.1.3.5 listSubNames _____________________________________________________________________ 30
3.1.3.6 createFromSubName ______________________________________________________________ 31
3.1.3.7 exportTo_______________________________________________________________________ 31
3.1.3.8 move __________________________________________________________________________ 32
3.1.4
GP_GridAnalysis__________________________________________________________________ 32
3.1.4.1 histrogram _______________________________________________________________________ 33
3.1.4.2 minValue ________________________________________________________________________ 33
3.1.4.3 maxValue ________________________________________________________________________ 33
3.1.4.4 meanValue _______________________________________________________________________ 34
3.1.4.5 medianValue _____________________________________________________________________ 34
3.1.4.6 modeValue _______________________________________________________________________ 34
3.1.4.7 stdDev___________________________________________________________________________ 34
3.1.4.8 correlation _______________________________________________________________________ 35
3.1.5
GP_GridCoverageProcessor ________________________________________________________ 35
3.1.5.1 Attributes ________________________________________________________________________ 35
3.1.5.1.1 +metadataNames : Sequence ____________________________________ 35
3.1.5.1.2 +numOperations : Integer _____________________________________________________ 36
3.1.5.2 getMetadataValue _________________________________________________________________ 36
3.1.5.3 getOperation _____________________________________________________________________ 36
3.1.5.4 Analyze__________________________________________________________________________ 36
3.1.5.5 doOperation ______________________________________________________________________ 36
3.1.6
Supporting Interfaces in the Coverage (CV) Package ____________________________________ 37
3.1.6.1 CV_SampleDimension ___________________________________________________________ 37
3.1.6.1.1 Attributes ____________________________________________________________________ 37

Page 4 of 71

OGC Document Number 01-004

OpenGIS Implementation Specification

Grid Coverages

R
ET

IR
ED

3.1.6.1.1.1 +description : CharacterString__________________________________________________ 37
3.1.6.1.1.2 +sampleDimensionType : CV_SampleDimensionType ______________________________ 37
3.1.6.1.1.3 +categoryNames : Sequence ____________________________________ 38
3.1.6.1.1.4 +colorInterpretation : CV_ColorInterpretation _____________________________________ 38
3.1.6.1.1.5 +paletteInterpretation : CV_PaletteInterpretation ___________________________________ 38
3.1.6.1.1.6 +palette : Sequence ________________________________________ 38
3.1.6.1.1.7 +noDataValue : Sequence ____________________________________________ 38
3.1.6.1.1.8 +minimumValue : Number ____________________________________________________ 38
3.1.6.1.1.9 +maximumValue : Number____________________________________________________ 39
3.1.6.1.1.10 +units: CS_Unit____________________________________________________________ 39
3.1.6.1.1.11 +offset : Double____________________________________________________________ 39
3.1.6.1.1.12 +scale : Double ____________________________________________________________ 39
3.1.6.1.1.13 +metadataNames : Sequence ___________________________________ 39
3.1.6.1.2 getMetadataValue _____________________________________________________________ 39
3.1.6.2 CV_SampleDimensionType _________________________________________________________ 40
3.1.6.3 CV_PaletteInterpretation___________________________________________________________ 40
3.1.6.4 CV_ColorInterpretation____________________________________________________________ 40
3.1.7
Supporting Interfaces and Structures in the Grid Coverage (GC) Package __________________ 41
3.1.7.1 GC_GridPacking__________________________________________________________________ 41
3.1.7.1.1 Attributes ____________________________________________________________________ 42
3.1.7.1.1.1 +byteInValuePacking : GC_ByteInValuePakcing __________________________________ 42
3.1.7.1.1.2 +valueInBytePacking : GC_ValueInBytePacking___________________________________ 42
3.1.7.1.1.3 +bandPacking : Integer _______________________________________________________ 42
3.1.7.2 GC_GridGeometry ________________________________________________________________ 43
3.1.7.2.1 Attributes ____________________________________________________________________ 43
3.1.7.2.1.1 +gridRange : GC_GridRange __________________________________________________ 43
3.1.7.2.1.2 +gridToCoordinateSystem : CT_MathTransform ___________________________________ 43
3.1.7.3 GC_GridRange ___________________________________________________________________ 43
3.1.7.3.1 Attributes ____________________________________________________________________ 44
3.1.7.3.1.1 +lo : Sequence ______________________________________________________ 44
3.1.7.3.1.2 +hi : Sequence ______________________________________________________ 44
3.1.7.4 GC_ParameterInfo ______________________________________________________________ 44
3.1.7.4.1 Attributes ___________________________________________________________________ 44
3.1.7.4.1.1 +name : CharacterString ______________________________________________________ 44
3.1.7.4.1.2 +description : CharacterString__________________________________________________ 44
3.1.7.4.1.3 +type : GC_ParameterInfoType ________________________________________________ 44
3.1.7.4.1.4 +defaultValue : Object _______________________________________________________ 45
3.1.7.4.1.5 +minimumValue : Number ____________________________________________________ 45
3.1.7.4.1.6 +maximumValue : Number____________________________________________________ 45
3.1.7.5 GC_Parameter__________________________________________________________________ 45
3.1.7.5.1 Attributes ____________________________________________________________________ 45
3.1.7.5.1.1 +name : CharacterString ______________________________________________________ 45
3.1.7.5.1.2 +value : Object _____________________________________________________________ 45
3.1.7.6 GC_Format ____________________________________________________________________ 46
3.1.7.6.1 Attributes ____________________________________________________________________ 46
3.1.7.6.1.1 +name : CharacterString ______________________________________________________ 46
3.1.7.6.1.2 +description : CharacterString__________________________________________________ 46
3.1.7.6.1.3 +vendor : CharacterString _____________________________________________________ 46
3.1.7.6.1.4 +docURL : CharacterString____________________________________________________ 46
3.1.7.6.1.5 +version : CharacterString_____________________________________________________ 46
3.1.7.6.1.6 +numParameters : Integer _____________________________________________________ 47
3.1.7.6.2 getParameterInfo ______________________________________________________________ 47
3.1.7.7 GC_ValueInBytePacking _________________________________________________________ 47
3.1.7.8 GC_ByteInValuePacking ___________________________________________________________ 47
3.1.8
Supporting Interfaces in Grid Coverage Processing (GP) Package_________________________ 48
3.1.8.1 GP_Operation __________________________________________________________________ 48

Page 5 of 71

OGC Document Number 01-004

OpenGIS Implementation Specification

Grid Coverages

3.1.8.1.1 Attributes ____________________________________________________________________ 49
3.1.8.1.1.1 +name : CharacterString ______________________________________________________ 49
3.1.8.1.1.2 +description : CharacterString__________________________________________________ 49
3.1.8.1.1.3 +vendor : CharacterString _____________________________________________________ 49
3.1.8.1.1.4 +docURL : String ___________________________________________________________ 49
3.1.8.1.1.5 +version : String ____________________________________________________________ 49
3.1.8.1.1.6 +numSources : Integer _______________________________________________________ 49
3.1.8.1.1.7 +numParameters : Integer _____________________________________________________ 50
3.1.8.1.2 getParameterInfo ______________________________________________________________ 50

3.2

Well-known Binary Representations _____________________________________________ 50
WKBGeoTIFF ____________________________________________________________________ 50

3.2.1

3.3

GP_GridCoverageProcessor Operations __________________________________________ 51

4

R
ET

IR
ED

3.3.1 Gray Scale Threshold _________________________________________________________________ 52
3.3.2 Image Enhancements __________________________________________________________________ 52
3.3.2.1 Linear Enhancement_______________________________________________________________ 53
3.3.2.2 Root Enhancement ________________________________________________________________ 53
3.3.2.3 Equalization Enhancement__________________________________________________________ 54
3.3.2.4 Infrequency Enhancement __________________________________________________________ 55
3.3.3 Interpolate___________________________________________________________________________ 55
3.3.4 Band Ratioing________________________________________________________________________ 56
3.3.5 Spatial Filtering ______________________________________________________________________ 57
3.3.5.1 Mean Filter ______________________________________________________________________ 57
3.3.5.2 Mode Filter ______________________________________________________________________ 58
3.3.5.3 Median Filter _____________________________________________________________________ 59
3.3.5.4 Gausian Filter ____________________________________________________________________ 60
3.3.5.5 LaplacianType 1 Filter _____________________________________________________________ 61
3.3.5.6 Laplacian Type 2 Filter_____________________________________________________________ 61
3.3.6 Select Sample Dimensions ______________________________________________________________ 62
3.3.7 Resample ____________________________________________________________________________ 63
3.3.8 Sequence ____________________________________________________________________________ 64
3.3.9 Density Slice _________________________________________________________________________ 65

REFERENCES ____________________________________________________________ 65

APPENDICES ________________________________________________________________ 66
A.1

GLOSSARY OF TERMS ______________________________________________________ 66

A.2

SUPPORTING WELL-KNOWN VALUES________________________________________ 66

A.3

EXCEPTIONS, ERRORS AND ERROR CODES __________________________________ 67
Specific Exceptions___________________________________________________________________ 67

A.4

CONVERSION RULES FOR GRID VALUES TO SPECIFIC DATA TYPES __________ 67
Conversion of Value to Boolean _________________________________________________________ 67
Conversion of Value to 2 bit integer ______________________________________________________ 67
Conversion of Value to 4 bit integer ______________________________________________________ 67
Conversion of Value to Unsigned Character (0 to 255) _______________________________________ 68
Conversion of Value to Signed Character (-128 to 127) _______________________________________ 68

A.5

COM IDL SPECIFICATION ___________________________________________________ 68

A.6

CORBA IDL SPECIFICATION _________________________________________________ 69

A.7

SPECIFICATION SEQUENCE DIAGRAMS _____________________________________ 69

A.7.1
A.7.2

Page 6 of 71

SIMPLE GRID COVERAGE CREATION EXAMPLE__________________________________ 69
GRID COVERAGE PROCESSING USING THE DISCOVERY MECHANISM _____________ 70

OGC Document Number 01-004

OpenGIS Implementation Specification

A.8

Grid Coverages

VISUAL BASIC SAMPLE CODE _______________________________________________ 70
READING GRID DATA VALUES ___________________________________________________ 70

R
ET

IR
ED

A.8.1

Page 7 of 71

OGC Document Number 01-004

OpenGIS Implementation Specification

Grid Coverages

TABLE OF FIGURES

R
ET

IR
ED

Figure 1: Specification Packages __________________________________________________________________ 11
Figure 2: CV_Coverage Package. _________________________________________________________________ 14
Figure 3: GC_GridCoverage Package. _____________________________________________________________ 15
Figure 4: GC_GridCoverageExchange Interface and its relationships _____________________________________ 16
Figure 5: GP_GridAnalysis Interface is a subclass of GC_GridCoverage. __________________________________ 16
Figure 6: GP_GridCoverageProcessor Interface discovery mechanism.____________________________________ 17
Figure 7: CV_Coverage interface for generic coverages. _______________________________________________ 19
Figure 8: GC_GridCoverage interface providing access to grid data values. ________________________________ 24
Figure 9: GC_GridCoverageExchange Interface. _____________________________________________________ 29
Figure 10: GP_GridAnalysis Interface. GP_GridAnalysis inherits from GC_GridCoverage.____________________ 32
Figure 11: GP_GridCoverageProcessor for performing operations in grid coverages. ________________________ 35
Figure 12: CV_SampleDimension Interface. Descriptive information for a sample dimension. __________________ 37
Figure 13: Context Diagram: CV_SampleDimensionType_______________________________________________ 40
Figure 14: Context Diagram: CV_PaletteInterpretation ________________________________________________ 40
Figure 15: Context Diagram: CV_ColorInterpretation _________________________________________________ 41
Figure 16: GC_GridPacking data type. _____________________________________________________________ 42
Figure 17: GC_GridGeometry data type. ____________________________________________________________ 43
Figure 18: GC_GridRange data type. ______________________________________________________________ 43
Figure 19: GC_ParameterInfo data type.____________________________________________________________ 44
Figure 20: GC_Parameter data type. _______________________________________________________________ 45
Figure 21: Context Diagram: GC_Format. __________________________________________________________ 46
Figure 22: Context Diagram: GC_ValueInBytePacking ________________________________________________ 47
Figure 23: Context Diagram: GC_ByteInValuePacking ________________________________________________ 47
Figure 24: Context Diagram: GC_ParameterType ____________________________________________________ 48
Figure 25: GP_Operation Interface ________________________________________________________________ 49
Figure 26: Simple grid coverage creation ___________________________________________________________ 69
Figure 27: Grid coverage processing using the discovery mechanism______________________________________ 70

Page 8 of 71

OGC Document Number 01-004

OpenGIS Implementation Specification

0.0

Grid Coverages

PREFACE

This implementation specification refers to The Open GIS Abstract Specification Topic 6: The Coverage Type
and it’s Subtypes, the project document 99-106.
0.1

SUBMITTING COMPANIES

The following companies submitted this implementation specification, in response to the OGC Request Number 5
Core Task Force Working Group A Request For Proposals: Access to Open GIS Coverages, OpenGIS Project
Document Number 98-007r1.

0.2

Computer Aided Development Corporation Ltd (Cadcorp)
Environmental Systems Research Institute (ESRI)
Intergraph Corporation
Laser-Scan, Ltd.
Oracle
PCI Geomatics Inc
SUBMISSION CONTACT POINTS

IR
ED








All questions regarding this submission should be directed to:

R
ET

Louis Burry
PCI Geomatics
490 St. Joseph Blvd., Suite 400
Hull, Quebec, Canada, J8Y 3Y7
burry@pcigeomatics.com
Adam Gawne-Cain
Cadcorp Ltd
4 Fitzroy Square
London, UK W1P 5AH
adam@cadcorpdev.co.uk
John Herring
Oracle Corporation
196 vanBuren Street
Herndon, Virginia 20170
jrherrin@us.oracle.com

0.3

DOCUMENT CONVENTIONS

This submission adheres to OGC conventions for UML modeling and CORBA IDL. The COM IDL has
followed the Microsoft guidelines for naming conventions since applications will mix OGC/Non-OGC interfaces. The
main difference between the OGC and Microsoft conventions is OGC uses a lower case for the first letter for attributes
and operations while Microsoft uses upper case.
This document uses the OGC convention of using a two-letter prefix for packages. The following two-letter
prefixes used are:

Page 9 of 71

OGC Document Number 01-004

OpenGIS Implementation Specification

Prefix
CV
GC
GP
0.4

REVISION HISTORY

0.5

EDITORIAL NOTES

Grid Coverages

Package
Coverage
Grid Coverage
Grid Coverage Processing

This specification focuses on grid coverages but effort has been made to ensure generic interfaces and
components have been specified at the coverage level for future extensions to other coverage types.
The Essential Model for Grid Coverages lists seven varieties of simple pixel modifications. This submission
addresses a subset of these. Radiometric Correction Services and Noise Removal Services have a range of complexities
and should be addressed by Image Exploitation SIG
CHANGES TO THE ABSTRACT SPECIFICATION

IR
ED

0.6

To allow for other georeferencing methods, the GridMatrixValue class was modified. The members of the
class which described the georeferencing of the grid, were moved into another class. This change from the abstract
specification allows for support of non- orthorectified grids.

0.7

R
ET

The sequential enumeration methods for accessing grid matrix values were limited to row dominant, column
dominant and band order. Morton order and pyramid sequences were not addressed. Pyramid sequence was perceived
to be an association of lower resolution grid coverages to the grid coverage. This is addressed as overviews in the
submission.
DEPENDENCIES ON OTHER OGC SPECIFICATIONS

The specification uses interfaces from the Open GIS Coordinate Transformation specification.
The following packages are used:
Prefix
PT
CS
CT

Package
Positioning
Coordinate Systems
Coordinate Transforms

Components from the CT and CS package provide the georeferencing information for the grid coverage. The
georeferencing include the projection and the mapping of grid to projection coordinate for the grid..

1

SPECIFICATION OVERVIEW
This implementation specification was drafted with the following goals:




Allow for a range of implementations. This will allow for relatively quick and easy implementations of the
specification to more comprehensive ones.
This specification was designed to promote interoperatablity between implementations done by data vendors and
software vendors providing analysis and grid processing implementations. An analysis implementation can utilize
a data access implementation

Page 10 of 71

OGC Document Number 01-004

OpenGIS Implementation Specification










Grid Coverages

This specification is written as a general specification with COM and CORBA implementations in mind. This
specification could later be extended to include other Distributed Computing Platforms (DCPs) such as JAVA.
Any implementations of this specification should support creation of coverages from a GeoTIFF raster. GeoTIFF
is becoming an industry standard and this is meant to allow for standard test datasets to ensure implementations
conform to the specification.
The specification must allow for efficient access to very large datasets. Datasets can be up to several gigabytes in
size.
Support N dimensions even though most implementations of the specification will be 2 D.
Extensible framework for image processing and analysis.
Be able to handle a wide range of grid data from raw to thematically classified grid coverages.
Support a variety of color models.

2

ARCHITECTURE

IR
ED

The architecture of the grid coverage specification is composed of three packages as shown in Figure 1. The
specification includes a package for the general coverage specification (CV), a package specifically for grid coverages
(GC) and a package for grid coverage processing (GP). The GP package is optional and not required for an OGC
compliant implementation.

GC

CV
CV_ColorInt erpretation
CV_Pale t teInterpre tation
CV_SampleDimensionTyp e
CV_Coverag e
CV_SampleDimension

GP

+ GP_GridAnalysis
+ GP_GridCoverageProcessor
+ GP_Operation

R
ET

+
+
+
+
+

+ GC_ByteInValuePacking
+ GC_ValueInBytePacking
+ GC_Format
+ GC_GridCoverage
+ GC_GridCoverageExchange
+ GC_GridGeometry
+ GC_GridPacking
+ GC_GridRange
+ GC_Parameter
+ GC_ParameterInfo

Figure 1: Specification Packages

2.1

Grid Coverages

2.1.1

Grid Coverage Characteristics

This Grid Coverage Implementation specification can accommodate grid coverages with the following
characteristics:







Variable number of bits per grid value (bits per pixel).
1, 2, 4
unsigned integer
8, 16, 32
signed, unsigned integer
32, 64
Real
1 to N number of bands
1 to N dimensions
For grids with multiple bands, band values can be ordered by dimension. For example, a 2 D grid coverage can be
ordered row, column, band (pixel interleaved), row, band, column (line interleaved) or band, row, column (band
sequential).
Support for a variable number of “no data values”
Various color models: Gray Scale, pseudo color (any size), RGB, CMYK and HSL.

Page 11 of 71

OGC Document Number 01-004

OpenGIS Implementation Specification


Grid Coverages

Support of overviews or pyramids (reduced resolution data sets).

2.1.2

Grid Coordinate System

A grid coverage has a grid coordinate system which allows for addressing individual cells in the grid.
Individual cells are centered on the grid points. A grid has an ordering of cell values with the first cell in this ordering
having a grid coordinate of 0, 0. A two dimensional grid coverage with 512 rows and 512 columns would have grid
coordinates with a range from 0 to 511 rows and 0 to 511 columns.
The gridRange attribute in the GC_GridGeometry structure defines the grid coordinate range.
The number of cells in a dimension of the grid can be calculated as grid range maximum – minimum
2.1.3

Grid Coverage Tiling

2.1.4

Color Palettes

IR
ED

This implementation specification has no explicit interfaces to retrieve data values from a grid coverage in
tiles. It is expected that the implementation will efficiently retrieve data values when the client implementation
retrieves data values on tile boundaries. The optimal size to access a dimension can be determined from the
GC_GridCoverage optimumDataBlockSizes attribute

R
ET

A coverage can have a color palette. A color palette is valid for only coverages which are integer values
(usually bytes). Color palettes supported include gray scale, RGB, HSL and CMYK. The coverage dimension
information maps the grid sample dimensions to a color palette or to color model components. For example 8-bit
pseudo color TIFF image would be represented as a grid with one sample dimension and a color palette with 256 RGB
entries. A 24-bit RGB TIFF file would be represented as a grid with three bands and no color palette. The dimension
information would indicate which bands to use for the RGB color components. The following illustrates example
values for different color components:

2.1.5

Gray Scale

Vector contains one entry which a shade of gray. 0 is black and 255 is white.

RGB

Vector contains three values: Red Green Blue. Each value ranges from 0 to 255
where 0 is no intensity and 255 is maximum intensity.

RGBA

Vector contains four values RGBA: Red Green Blue Alpha. The alpha value is the
level of transparency of the color. Alpha of 0 is transparent and 255 is opaque

HSL

Vector contains three values: Hue Saturation Lightness. Hue is a value from 0 to
360. Saturation is a value from 0 to 100 where 0 is no color intensity and 100 is full
color intensity. Lightness is a value from 0 to 100 where 0 is no lightness and 100
is full lightness.

CMYK

Vector contains four values: Cyan Magenta Yellow Black. Each value ranges from
0 to 255 where 0 is no intensity and 255 is maximum intensity.

Interoperability

To help interoperability, many interfaces contained in this architecture have been made immutable. The
assumption is that the objects supporting these interfaces should be immutable. This means that the objects should not
change after a factory has created them.

Page 12 of 71

OGC Document Number 01-004

OpenGIS Implementation Specification

Grid Coverages

In particular, the following interfaces are assumed to be backed by immutable objects:
CV_SampleDimension, GC_Format, GC_GridCoverageExchange, GP_Operation, GP_GridAnalysis,
GP_GridCoverageProcessor
In a GC_GridCoverage, only the cell values may change. The size, geometry, interpolation, sequencing etc
should never change. However, clients should be aware that the Grid Coverage object behind the GC_GridCoverage
interface may be adapted from other GC_GridCoverage interfaces, so changing the grid point (pixel) values through
one GC_GridCoverage could change the grid point values in others. To allow client applications to anticipate adapted
Grid Coverages being changed indirectly, the source Grid Geometry object(s) for adapted Grid Geometry objects can
be traced.
2.2

CV_Coverage

Abstract interface providing access to an OpenGIS coverage.

1.

2.
3.

A coverage may be represented by a set of polygons which exhaustively tile a plane (that is each point on the
plane falls in precisely one polygon). The value returned by the coverage for a point is the value of an attribute
of the polygon that contains the point.
A coverage may be represented by a grid of values. The value returned by the coverage for a point is that of
the grid value whose location is nearest the point.
Coverage may be represented by a mathematical function. The value returned by the coverage for a point is
just the return value of the function when supplied the coordinates of the point as arguments.
Coverage may be represented by combination of these. For example, coverage may be represented by a
combination of mathematical functions valid over a set of polynomials.

R
ET

4.

IR
ED

The essential property of coverage is to be able to generate a value for any point within its domain. How coverage
is represented internally is not a concern. For example consider the following different internal representations of
coverage:

Figure 2 illustrates the CV_Coverage package. A coverage has a corresponding CV_SampleDimension for each
sample dimension in the coverage.

Page 13 of 71

OGC Document Number 01-004

OpenGIS Implementation Specification

Grid Coverages


CV_Coverage
+ numSampleDimensions : Integer
+ dimensionNames : Sequence
+ numSources : Integer
+ metadataNames : Sequence
+ coordinateSystem : CS_CoordinateSystem
+ envelope : PT_Envelope
+ getSampleDimension(index : Integer) : CV_SampleDimension
+ getSource(index : Integer) : CV_Coverage
+ getMetadataValue(name : CharacterString) : CharacterString
+ evaluate(pt : PT_CoordinatePoint) : Sequence
+ evaluateAsBoolean(pt : PT_CoordinatePoint) : Sequence
+ evaluateAsByte(pt : PT_CoordinatePoint) : Sequence
+ evaluateAsInteger(pt : PT_CoordinatePoint) : Sequence
+ evaluateAsDouble(pt : PT_CoordinatePoint) : Sequence

+ getMetadataValue(name : CharacterString) : CharacterString


CV_ColorInterpretation
CV_Undefined : Integer = 0
CV_GrayIndex : Integer = 1
CV_PaletteIndex : Integer = 2
CV_RedBand : Integer = 3
CV_GreenBand : Integer = 4
CV_BlueBand : Integer = 5
CV_AlphaBand : Integer = 6
CV_HueBand : Integer = 7
CV_SaturationBand : Integer = 8
CV_LightnessBand : Integer = 9
CV_CyanBand : Integer = 10
CV_MagentaBand : Integer = 11
CV_YellowBand : Integer = 12
CV_BlackBand : Integer = 13

+
+
+
+


CV_PaletteInterpretation
CV_Gray : Integer = 0
CV_RGB : Integer = 1
CV_CMYK : Integer = 2
CV_HLS : Integer = 3

+
+
+
+
+
+
+
+
+
+
+


CV_SampleDimensionType
CV_1BIT : Integer = 0
CV_2BIT : Integer = 1
CV_4BIT : Integer = 2
CV_8BIT_U : Integer = 3
CV_8BIT_S : Integer = 4
CV_16BIT_U : Integer = 5
CV_16BIT_S : Integer = 6
CV_32BIT_U : Integer = 7
CV_32BIT_S : Integer = 8
CV_32BIT_REAL : Integer = 9
CV_64BIT_REAL : Integer = 10

IR
ED

+
+
+
+
+
+
+
+
+
+
+
+
+
+


CV_SampleDimension
+ categoryNames : Sequence
+ colorInterpretation : CV_ColorInterpretation
+ description : CharacterString
+ minimumValue : Number
+ maximumValue : Number
+ nodataValue : Sequence
+ paletteInterpretation : CV_PaletteInterpretation
+ palette : Sequence2D
+ sampleDimensionType : CV_SampleDimensionType
+ units : CS_Unit
+ valueOffset : Double
+ valueScale : Double
+ metadataNames : Sequence

Figure 2: CV_Coverage Package.

GC_GridCoverage

R
ET

2.3

This interface would represent the basic implementation which provides access to grid coverage data. A
GC_GridCoverage implementation may provide the ability to update grid values. A basic read-only implementation
would be fairly easy to implement. The GC package is illustrated in figure 3.

Page 14 of 71

OGC Document Number 01-004

OpenGIS Implementation Specification

Grid Coverages


GC_GridCoverageExchange
+ numFormats : Integer
+ metadataNames : Sequence
+
+
+
+
+
+
+

+
+
+
+
+
+

getMetadataValue(name : CharacterString) :
createFromName(name : CharacterString) : GC_GridCoverage
listSubNames(name : CharacterString) : Sequence
createFromSubName(name : CharacterString, subName : CharacterString) : GC_GridCoverage
getFormat(index : Integer) : GC_Format
exportTo(gridCoverage : GC_GridCoverage, format : CharacterString, name : CharacterString, parameters : Sequence) : void
move(gridCoverage : GC_GridCoverage, coordsys : CS_CoordinateSystem, gridToCoordinateSystem : CT_MathTransform) : GC_GridCoverage


GC_Format
name : CharacterString
description : CharacterString
vendor : CharacterString
docURL : CharacterString
version : CharacterString
numParameters : Integer

+
+
+
+
+


GC_ParameterInfo
name : CharacterString
description : CharacterString
defaultValue : Number
minimumValue : Number
maximumValue : Number


GC_GridCoverage
dataEditable : Boolean
gridPacking : GC_GridPacking
gridGeometry : GC_GridGeometry
numOverviews : Integer
optimumDataBlockSizes : Sequence

+
+
+
+
+
+
+
+
+
+
+
+

getOverviewGridGeometry(index : Integer) : GC_GridGeometry
getOverview(index : Integer) : GC_GridCoverage
getDataBlockAsBoolean(gridRange : GC_GridRange) : Sequence
getDataBlockAsByte(gridRange : GC_GridRange) : Sequence
getDataBlockAsInteger(gridRange : GC_GridRange) : Sequence
getDataBlockAsDouble(gridRange : GC_GridRange) : Sequence
getPackedDataBlock(gridRange : GC_GridRange) : Sequence
setDataBlockAsBoolean(gridRange : GC_GridRange, val : Sequence) : void
setDataBlockAsByte(gridRange : GC_GridRange, val : Sequence) : void
setDataBlockAsInteger(gridRange : GC_GridRange, val : Sequence) : void
setDataBlockAsDouble(gridRange : GC_GridRange, val : Sequence) : void
setPackedDataBlock(gridRange : GC_GridRange, val : Sequence) : void


GC_Parameter
+ name : CharacterString
+ value : Number

IR
ED

+ getParameterInfo(index : Integer) : GC_ParameterInfo

+
+
+
+
+


GC_GridGeometry
+ gridRange : GC_GridRange
+ gridToCoordinateSystem : CT_MathTransform


GC_ByteInValuePacking
+ GC_wkbXDR : Integer = 0
+ GC_wkbNDR : Integer = 1


GC_ValueInBytePacking
+ GC_LoBitFirst : Integer = 0
+ GC_HiBitFirst : Integer = 1

R
ET


GC_GridRange
+ lo : Sequence
+ hi : Sequence


GC_GridPacking
+ byteInValuePacking : GC_ByteInValuePacking
+ valueInBytePacking : GC_ValueInBytePacking
+ bandPacking : Integer

Figure 3: GC_GridCoverage Package.

2.4

GC_CoverageExchange

Support for creation of grid coverages from persistent formats as well as exporting a grid coverage to a
persistent formats. For example, it allows for creation of grid coverages from the GeoTIFF Well-known Binary format
and exporting to the GeoTIFF file format. Basic implementations only require creation of grid coverages from a file
format or resource. The interface given in figure 4 has a discovery mechanism to query the available file formats
supported.

Page 15 of 71

OGC Document Number 01-004

OpenGIS Implementation Specification

Grid Coverages


GC_GridCoverageExchange
+ numFormats : Integer
+ metadataNames : Sequence
+
+
+
+
+
+
+

getMetadataValue(name : CharacterString) : CharacterString
createFromName(name : CharacterString) : GC_GridCoverage
listSubNames(name : CharacterString) : Sequence
createFromSubName(name : CharacterString, subName : CharacterString) : GC_GridCoverage
getFormat(index : Integer) : GC_Format
exportTo(gridCoverage : GC_GridCoverage, format : CharacterString, name : CharacterString, parameters : Sequence) : void
move(gridCoverage : GC_GridCoverage, coordsys : CS_CoordinateSystem, gridToCoordinateSystem : CT_MathTransform) : GC_GridCoverage


GC_Format


GC_GridCoverage


GC_Parameter

Figure 4: GC_GridCoverageExchange Interface and its relationships

GP_GridAnalysis (optional)

IR
ED

2.5

This optional interface performs analysis of the grid data. Such processing functionality includes histogram
calculation, grid coverage covariance and other statistical measurements. This interface is illustrated in figure 5.
GP_GridAnalysis operates on a GC_GridCoverage to create a new GC_GridCoverage.

GP_GridCoverageProcessor
+ numOperations : Integer
+ metadataNames : Sequence

getMetadataValue(name : CharacterString) : CharacterString
getOperation(index : Integer) : GP_Operation
Analyse(gridCoverage : GC_GridCoverage) : GP_GridAnalysis
doOperation(operationName : CharacterString, parameters : Sequence) : GC_GridCoverage

R
ET

+
+
+
+


GP_Operation
+
+
+
+
+
+
+

name : CharacterString
description : CharacterString
vendor : CharacterString
docURL : CharacterString
version : CharacterString
numSources : Integer
numParameters : Integer

+ getParameterInfo(index : Integer) : GC_ParameterInfo


GP_GridAnalysis
+
+
+
+
+
+
+
+

histogram(band : Integer, minValue : Number, maxValue : Number, numBuckets : Integer) : Sequence
minValue(band : Integer) : Integer
maxValue(band : Integer) : Integer
meanValue(band : Integer) : Double
medianValue(band : Integer) : Double
modeValue(band : Integer) : Double
stdDev(band : Integer) : Double
correlation() : PT_Matrix

Figure 5: GP_GridAnalysis Interface is a subclass of GC_GridCoverage.

Page 16 of 71

OGC Document Number 01-004

OpenGIS Implementation Specification

2.6

Grid Coverages

GP_GridCoverageProcessor (optional)

This optional interface provides operations for different ways of accessing the grid coverage values as well as
image processing functionality. The list of available processing operations is implementation dependent. The interface
has a discovery mechanism to determine the available processing operations. This is shown in figure 6.

GP_GridCoverageProcessor
+ numOperations : Integer
+ metadataNames : Sequence
getMetadataValue(name : CharacterString) : CharacterString
getOperation(index : Integer) : GP_Operation
Analyse(gridCoverage : GC_GridCoverage) : GP_GridAnalysis
doOperation(operationName : CharacterString, parameters : Sequence) : GC_GridCoverage


GC_GridCoverage
(from GC)

IR
ED

+
+
+
+


GC_Parameter
(from GC)


GP_GridAnalysis


GP_Operation

Figure 6: GP_GridCoverageProcessor Interface discovery mechanism.

R
ET

These processing operations will transform values within a single sample dimension, and leave the values in other
sample dimensions unaffected. The modified sample dimension may also change its type (e.g. from CV_4BIT to
CV_1BIT). The actual underlying grid data remains unchanged.
The interface has been designed to allow the adaptations to be done in a “pipe-lined” manner. The interface
operates on GC_GridCoverage to create new a GC_GridCoverage. The interface does not need to make a copy of the
source grid data. Instead, it can return a grid coverage object which applies the adaptations on the original grid
coverage whenever a block of data is requested. In this way, a pipeline of several grid coverages can be constructed
cheaply.
This interface can perform any of the following:

Change the number of bands being accessed.
Change the value sequencing in which the grid values are retrieved.
Allow re-sampling of the grid coverage for a different geometry. Creating a new GC_GridCoverage with
different grid geometry allows for reprojecting the grid coverage to another projection and another
georeferencing type, resampling to another cell resolution and subsetting the grid coverage.
Modify the way the grid values are accessed (filtered, classified…).
Change the interpolation method used when evaluating points which fall between grid cells.
Filtering
Image enhancements.
etc.

Page 17 of 71

OGC Document Number 01-004

OpenGIS Implementation Specification

Grid Coverages

2.7

Interfaces Supporting Coverage (CV) Package

2.7.1

CV_SampleDimension

This interface contains information for an individual sample dimension of coverage. This interface is
applicable to any