# Multiple Projections

On 24 Nov 2006 Bert Jagers requested the addition of a convention to support (a) 2D projection coordinates (whereas the existing standard expects projection coordinates to be the 1D coordinate variables) (b) more than one grid_mapping for a given data variable. Three conventions have been proposed. In all of them the projection coordinates have to have the appropriate standard_name.

## John (modified by accident by Jonathan)

Introduce a new abstraction: a variable to describe a horizontal coordinate system.

```  int Dutch_CoordSystem;
Dutch_CoordSystem:coordinates = "dutch_x dutch_y";
Dutch_CoordSystem:grid_mapping = "EPSG19914";
int German_CoordSystem;
German_CoordSystem:coordinates = "german_x german_y";
German_CoordSystem:grid_mapping = "EPSG16362";
float velocity(time,layer,m,n);
velocity:coordinateSystems = "Dutch_CoordSystem German_CoordSystem" ;
velocity:coordinates="lat lon"; // can also list 1D coordinate variables
float dutch_x(m,n);
float dutch_y(m,n);
float german_x(m,n);
float german_y(m,n);
```

## Jonathan No 1

Extended syntax for the grid_mapping attribute so that it can identify more than one projection and list 2D projection coordinates.

```  float velocity(time,layer,m,n);
velocity:grid_mapping="dutch_x: dutch_y: EPSG19914 german_x: german_y: EPSG16362";
velocity:coordinates="lat lon"; // 2D projection coordinates could be listed as well
float dutch_x(m,n);
float dutch_y(m,n);
float german_x(m,n);
float german_y(m,n);
```

## Jonathan No 2

A coordinate_system attribute replaces the grid_mapping attribute of the data variable.

```  float velocity(time,layer,m,n);
velocity:coordinate_system="EPSG19914: dutch_x dutch_y EPSG16362: german_x german_y";
velocity:coordinates="lat lon";
float dutch_x(m,n);
float dutch_y(m,n);
float german_x(m,n);
float german_y(m,n);
```

## Bert

Attach the grid_mapping attribute to the 2D projection coordinates, which are given as auxiliary coordinate variables.

```  float velocity(time,layer,m,n);
velocity:coordinates="lat lon dutch_x dutch_y german_x german_y";
float dutch_x(m,n);
dutch_x:grid_mapping="EPSG19914";
float dutch_y(m,n);
dutch_y:grid_mapping="EPSG19914";
float german_x(m,n);
german_x:grid_mapping="EPSG16362";
float german_y(m,n);
german_y:grid_mapping="EPSG16362";
```
Last modified on 12/28/06 14:42:36