A projected coordinate system may have 0 or more parameters. The projected coordinate systems in the groupings presented in the previous topic have the same properties and also the same number and kind of parameters. This topic contains two elements: a description of the parameters and the mapping of the projection groups to the parameters. The projection groups are subdivided according to the projection method used by the group: flat plane, conical, cylindrical, or other (not flat plane, conical, or cylindrical).
The MgCoordinateSystem class has a method called GetProjectionCode which returns an integer code specifying the projection group to which this coordinate system belongs. These codes are defined in MgCoordinateSystemProjectionCode. Use the MgCoordinateSystemProjectionCode object to get projection information about the projection group. Use that information to get projection information particular to the MgCoordinateSystem instance. Use the MgCoordinateSystemUnitInformation class to get information about the projection unit. The following code shows this sequence of calls.
//csDict is defined above
// "CANADA-ALBERS" is a coordinate system in the Alber group of projections
MgCoordinateSystem cs = csDict.GetCoordinateSystem("CANADA-ALBERS");
// the unit codes identify the various linear and angular units such as meter, foot, degree, and radian
// the unit codes are integer constants defined in MgCoordinateSystemUnitCode
int unitCode = cs.GetUnitCode();
int projectionCode = cs.GetProjectionCode();
// unit type is either angular, linear, or unknown
// the unit types are integer constants defined in MgCoordinateSystemUnitType
// there are 2 ways to get the unit type
int projInfoUnitType = projectionInformation.GetUnitType(projectionCode);
int csUnitType = unitInformation.GetUnitType(unitCode);
// an example of a unit abbreviation is M for meter
string unitAbbreviation = unitInformation.GetAbbreviation(unitCode);
// an example of a unit tag string is METER
string unitTagString = unitInformation.GetTagString(unitCode);
// unit scale is relative to the meter
// if the unit is FOOT, the unit scale is 0.304800609601219
double unitScale = unitInformation.GetLinearUnitScale(unitCode);
bool usingOffset = projectionInformation.IsUsingOffset(projectionCode);
if (usingOffset)
{
// false Easting
doubl offsetX = cs.GetOffsetX();
// false Northing
doubleoffsetY = cs.GetOffsetY();
}
bool usingOriginLatitude = projectionInformation.IsUsingOriginLatitude(projectionCode);
if (usingOriginLatitude)
{
double originLatitude = cs.GetOriginLatitude();
}
bool usingOriginLongitude = projectionInformation.IsUsingOriginLongitude(projectionCode);
if (usingOriginLongitude)
{
double originLongitude = cs.GetOriginLongitude();}
// see the quadrant topic
bool usingQuadrant = projectionInformation.IsUsingQuadrant(projectionCode);
if (usingQuadrant)
{
int quadrant = cs.GetQuadrant();
}
// See the Secant Projection topic for a discussion of scale reduction
bool usingScaleReduction = projectionInformation.IsUsingScaleReduction(projectionCode);
if (usingScaleReduction)
{
double scaleReduction = cs.GetScaleReduction();
}
int parameterCount = projectionInformation.GetParameterCount(projectionCode);
for (int j = 1; j <= parameterCount; j++)
{
bool usingParameter = projectionInformation.IsUsingParameter(projectionCode, j);
if (!usingParameter) continue;
//Parameter types are defined in MgCoordinateSystemProjectionParameterType
int parameterType = projectionInformation.GetParameterType(projectionCode, j);
//the logical types are defined in MgCoordinateSystemProjectionLogicalType
int parameterLogicalType = projectionInformation.GetParameterLogicalType(projectionCode, j)
// the format types are defined in MgCoordinateSystemProjectionFormatType
int parameterFormatType = projectionInformation.GetParameterFormatType(projectionCode, j);
double parameterDefault = projectionInformation.GetParameterDefault(projectionCode, j);
double parameterMin = projectionInformation.GetParameterMin(projectionCode, j);
double parameterMax = projectionInformation.GetParameterMax(projectionCode, j);
double projectionParameter = cs.GetProjectionParameter(j);
}
The mapping of the projection code values to parameters is programmatically extracted from the CS Map file CSdataPJ.c. In CSdataPJ.c there is an array of structures called cs_PrjprmMap. Each structure maps a projection code to an array of parameter codes. The projection and parameter codes are defined in cs_map.h.
The following table describes the parameters.
| Parameter | Description |
|---|---|
| 0 | Zero parameters. |
| CNTMER | Central Meridian, also known as Origin Longitude. Used in projection groups Cassini, GaussK, Miller, Mndott, Modp, c Mrcat, MrcatK, Plycn, Sotrm, Tm, Trmeraf, Trmrkrg, Trmrs, and Wccst. |
| NSTDPLL, SSTDPLL | Northern Standard Parallel, also known as Standard Parallel 1, and Southern Standard Parallel, also known as Standard Parallel 2. Used in secant conic projections. Used in projection groups Alber, Lm2sp, Lmblg, Lmbrtaf, Mndotl, and Wccsl. |
| STDPLL | Standard Parallel. Used in projection groups Edcyl, Mrcat, Neacyl, and Winkl. See the discussion of the Caspian Sea projection. |
| GCPLNG, GCPLAT, GCAZM | Great Circle Point Longitude, Great Circle Point Latitude, and Great Circle Azimuth. These are used for the oblique Mercator projections. The central geodesic can be defined by a point and an azimuth or by 2 points. In practice it is always defined by a point and an azimuth. Used in projection groups Hom1uv, Hom1xy, Rskew, Rskewc and, with the exception of GCAZM, Rskewo. |
| YAXISAZ | Y Axis Azimuth. This is a non-standard parameter used in some azimuthal projections to define the direction of the Y axis. Used in projection groups Azede, Azmea, Azmed, and Sstro. |
| P1LNG, P1LAT, P2LNG, P2LAT, ADP1P2, ADSP1, ADSP2 | First Pole Longitude, First Pole Latitude, Second Pole Longitude, Second Pole Latitude, Angular Distance between the poles, Angular distance to the first standard parallel, Angular distance to the second standard parallel. These are used for the Bi-polar conformal conic projection, which was invented for the purpose of making a map of North and South America. |
| CMPLXAN, CMPLXBN | Complex Parameter A(n), Complex Parameter B(n). There are several projections which are based on an expansion series of complex numbers. CSMap supports up to 12 terms, that is, 12 pairs of real and imaginary coefficients. Used in projection group Mstero. |
| UTMZN | UTM Zone. For the UTM version of the transverse Mercator, you can specify a zone number instead of a central meridian. Used in the UTM projection group. |
| HSNS | North/South Hemisphere. Use this number to indicate the hemisphere of a UTM zone. A positive number indicates the Northern Hemisphere, and a negative number indicates the Southern Hemisphere. 1.0 and -1.0 are used. Used in the UTM projection group. |
| GHGT | Average Geoid Height. Used in the Wisconsin State county coordinate systems to indicate the average geoid height (in meters) in the county. This value is used to adjust the geoid height of the underlying ellipsoid. Used in the projection groups Wccsl and Wccst. |
| AELEV | Average Elevation. Used in the Wisconsin and Minnesota State county coordinate systems to indicate the average orthometric height (elevation in system units) of the terrain in the county. This value is used to adjust the geoid height in the underlying ellipsoid. Used in projection groups Azede, Mndotl, Mndott, Wccsl, and Wccst. |
| POLELNG, POLELAT, OSTDPLL | Oblique Pole Longitude, Oblique Pole Latitude, Oblique Cone Standard Parallel. Used for the Krovak Oblique Conformal Conic projection. CS-Map’s parameterization is different from most other packages in that it takes the latitude of the oblique pole on the ellipsoid as a parameter rather than the co-latitude of the pole on the gaussian sphere. Used in projection groups Krovak and Krvk95. |
| STDCIR | Standard Circle Latitude. Polar aspects of azimuthal projections, particularly the Stereographic variation, uses the concept of a standard circle, which is analogous to the standard parallel in Mercator projections. Used in the Pstrosl projection group. |
| NRMPLL | Normal Parallel. The Oblique Cylindrical projection, also known as Rosamund, as used in Hungary, takes this additional parameter, which is used to compute the radius of the Gaussian sphere. Used in the Obqcyl projection group. |
| SKWAZM | Rectified Skew Orthomorphic, Skew. The Rectified Skew Orthomorphic, also known as RSO, projection differs from the Hotine Oblique Mercator in that the azimuth parameter is the azimuth of the central geodesic at the projection origin (rather than the projection center). Thus, the RSO takes one of these parameters rather than that described above for the Hotine Oblique Meractor. Used in the Rskewo projection group. |
The following table maps the parameters of projection groups whose projection method is flat plane.
| Name | YAXISAZ | CMPLXAN | CMPLXBN | 0 | STDCIR |
|---|---|---|---|---|---|
| AZMEA | x | ||||
| AZMED | x | ||||
| MSTRO | 12 | 12 | |||
| NZLND | x | ||||
| OSTRO | x | ||||
| PSTRO | x | ||||
| PSTROSL | x |
The following table maps parameters of projection groups whose projection method is conical.
| N=NSTDPLL; S=SSTDPLL; P1G=P1LNG; P1T=P1LAT; P2G=P2LNG; P2T=P2LAT; P1P2=ADP1P2; SP1=ADSP1; SP2=ADSP2; PG=POLELNG; PT=POLELAT; OP=OSTDPLL; AE=AELEV; CM=CNTMER; GH=GHGT; | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Name | N | S | 0 | P1G | P1T | P2G | P2T | P1P2 | SP1 | SP2 | PG | PT | OP | AE | CM | GH |
| ALBER | x | x | ||||||||||||||
| BONNE | x | |||||||||||||||
| BPCNC | x | x | x | x | x | x | x | |||||||||
| KROVAK | x | x | x | |||||||||||||
| KRVK95 | x | x | x | |||||||||||||
| LM1SP | x | |||||||||||||||
| LM2SP | x | x | ||||||||||||||
| LMBLG | x | x | ||||||||||||||
| LMTAN | x | |||||||||||||||
| MNDOTL | x | x | x | |||||||||||||
| PLYCN | x | |||||||||||||||
| WCCSL | x | x | x | x | ||||||||||||
The following table maps parameters of projection groups whose projection method is cylindrical.
| CM=CNTMER; GCG=GCPLNG; GCT=GCPLAT; NP=NRMLPLL; SK=SKWAZM; | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Name | CM | STDPLL | GCG | GCT | GCAZM | AELEV | NP | 0 | SK | UTMZN | HSNS | GHGT |
| CSINI | x | |||||||||||
| EDCYL | x | |||||||||||
| GAUSSK | x | |||||||||||
| HOM1XY | x | x | x | |||||||||
| MILLR | x | |||||||||||
| MNDOTT | x | x | ||||||||||
| MRCAT | x | x | ||||||||||
| MRCATK | x | |||||||||||
| OBQCYL | x | |||||||||||
| OSTN02 | x | |||||||||||
| OSTN97 | x | |||||||||||
| ROBIN | x | |||||||||||
| RSKEW | x | x | x | |||||||||
| RSKEWC | x | x | x | |||||||||
| RSKEWO | x | x | x | |||||||||
| SINUS | x | |||||||||||
| SOTRM | x | |||||||||||
| SWISS | x | |||||||||||
| TRMER | x | |||||||||||
| TRMRKRG | x | |||||||||||
| TRMRS | x | |||||||||||
| UTM | x | x | ||||||||||
| WCCST | x | x | x | |||||||||
The following table maps parameters of projection groups whose projection method is neither flat plane, conical, or cylindrical.
| Name | 0 | STDPLL |
|---|---|---|
| VDGRN | x | |
| WINKL | x |
The parameters are classified using the categories defined in MgCoordinateSystemLogicalType. The category to which a parameter belongs is retrieved using the GetParameterLogicalType method on the MgCoordinateSystemProjectionInformation object. The following table presents the classification.
| Category | Parameters |
|---|---|
| Angular Distance | Adp1p2 Adsp1 Adsp2 |
| Azimuth | Gcazm Nrthrot Skwazm Yaxisaz |
| Complex Coefficient | Cmplxan Cmplxbn |
| Elevation | Aelev |
| Geoid Height | Ghgt |
| Hemisphere Selection | Hsns |
| Latitude | Gcp1lat Gcp2lat Gcplat Nparall Nrmlpll Nstdpll Ostdpll P1lat P2lat Polelat Sparall Sstdpll Stdcir Stdpll |
| Longitude | Cntmer Eastll Estdmer Gcp1lng Gcp2lng Gcplng P1lng P2lng Polelng Westll |
| UTM Zone Number | Utmzn |