6 Object class definitions

6.1 Introduction

6.1.1 Table of contents

Table 6.1 lists the topics in this clause.

Table 6.1 — Table of contents

6 Object class definitions

6.1 Introduction

6.1.1 Table of contents

6.1.2 Notational conventions

6.2 SRM abstract object method signatures

6.2.1 Overview

6.2.2 LifeCycleObject

SRM_Create

SRM_Destroy

6.2.3 BaseSRF

SRM_GetORMCodes

SRM_GetSRFCodes

SRM_GetCSCode

6.2.4 BaseSRF2D

SRM_ChangeCoordinate2DSRF

SRM_ChangeCoordinate2DSRFObject

SRM_CreateCoordinate2D

SRM_EuclideanDistance2D

SRM_Generating2D

SRM_GetCoordinate2DValues

SRM_InverseGenerating2D

6.2.5 BaseSRF3D

SRM_ChangeCoordinate3DSRF

SRM_ChangeCoordinate3DSRFObject

SRM_ChangeDirectionSRF

SRM_ChangeDirectionSRFObject

SRM_CreateCoordinate3D

SRM_CreateDirection

SRM_EuclideanDistance3D

SRM_Generating3D

SRM_GetCoordinate3DValues

SRM_GetDirectionValues

SRM_GetExtendedValidRegion

SRM_GetValidRegion

SRM_InverseGenerating3D

SRM_SetExtendedValidRegion

SRM_SetValidRegion

6.2.6 BaseSRFwithTangentPlaneSurface

SRM_AssociateSurfaceCoordinateTPS

SRM_CreateSurfaceCoordinateTPS

SRM_EuclideanDistanceSurface

SRM_GetSurfaceCoordinateValuesTPS

SRM_PromoteSurfaceCoordinateTPS

6.2.7 BaseSRFwithEllipsoidalHeight

SRM_AssociateSurfaceCoordinateEH

SRM_CreateLocalTangentSpaceEuclideanSRF

SRM_CreateSurfaceCoordinateEH

SRM_EuclideanDistanceEH

SRM_GeodesicDistance

SRM_GetSurfaceCoordinateValuesEH

SRM_PromoteSurfaceCoordinateEH

6.2.8 BaseMapProjection

SRM_ConvergenceOfTheMeridian

SRM_GetExtendedValidGeodeticRegion

SRM_GetValidGeodeticRegion

SRM_MapAzimuth

SRM_PointScale

SRM_SetExtendedValidGeodeticRegion

SRM_SetValidGeodeticRegion

6.3 SRM concrete object classes

6.3.1 Overview

6.3.2 Celestiocentric

SRM_CC_Create

SRM_CC_Method_List

SRM_Celestiocentric

6.3.3 Celestiodetic

SRM_CD_Create

SRM_CD_Method_List

SRM_Celestiodetic

6.3.4 Celestiomagnetic

SRM_CM_Create

SRM_CM_Method_List

SRM_Celestiomagnetic

6.3.5 Coordinate2D

SRM_Coordinate2D_Method_List

SRM_Coordinate2D

6.3.6 Coordinate3D

SRM_Coordinate3D_Method_List

SRM_Coordinate3D

6.3.7 Direction

SRM_Direction_Method_List

SRM_Direction

6.3.8 EquatorialInertial

SRM_EI_Create

SRM_EI_Method_List

SRM_EI_EquatorialInertial

6.3.9 EquidistantCylindrical

SRM_EC_Create

SRM_EC_GetSRFParameters

SRM_EC_Method_List

SRM_EquidistantCylindrical

6.3.10 HeliosphericAriesEcliptic

SRM_HAEC_Create

SRM_HAEC_Method_List

SRM_HeliosphericAriesEcliptic

6.3.11 HeliosphericEarthEcliptic

SRM_HEEC_Create

SRM_HEEC_Method_List

SRM_HeliosphericEarthEcliptic

6.3.12 HeliosphericEarthEquatorial

SRM_HEEQ_Create

SRM_HEEQ_Method_List

SRM_HeliosphericEarthEquatorial

6.3.13 LambertConformalConic

SRM_LCC_Create

SRM_LCC_GetSRFParameters

SRM_LCC_Method_List

SRM_LambertConformalConic

6.3.14 LocalSpaceAzimuthal

SRM_LSA_Create

SRM_LSA_Method_List

SRM_SRM_LocalSpaceAzimuthal

6.3.15 LocalSpacePolar

SRM_LSP_Create

SRM_LSP_Method_List

SRM_LocalSpacePolar

6.3.16 LocalSpaceRectangular2D

SRM_LSR2D_Create

SRM_LSR2D_GetSRFParameters

SRM_LSR2D_Method_List

SRM_LocalSpaceRectangular2D

6.3.17 LocalSpaceRectangular3D

SRM_LSR3D_Create

SRM_LSR3D_GetSRFParameters

SRM_LSR3D_Method_List

SRM_LocalSpaceRectangular3D

6.3.18 LocalTangentSpaceAzimuthalSpherical

SRM_LTSAS_Create

SRM_LTSAS_GetSRFParameters

SRM_LTSAS_Method_List

SRM_LocalTangentSpaceAzimuthalSpherical

6.3.19 LocalTangentSpaceCylindrical

SRM_LTSC_Create

SRM_LTSC_GetSRFParameters

SRM_LTSC_Method_List

SRM_LocalTangentSpaceCylindrical

6.3.20 LocalTangentSpaceEuclidean

SRM_LTSE_Create

SRM_LTSE_GetSRFParameters

SRM_LTSE_Method_List

SRM_LocalTangentSpaceEuclidean

6.3.21 Mercator

SRM_M_Create

SRM_M_GetSRFParameters

SRM_M_Method_List

SRM_Mercator

6.3.22 ObliqueMercatorSpherical

SRM_OM_Create

SRM_OM_GetSRFParameters

SRM_OM_Method_List

SRM_ObliqueMercatorSpherical

6.3.23 Planetodetic

SRM_PD_Create

SRM_PD_Method_List

SRM_Planetodetic

6.3.24 PolarStereographic

SRM_PS_Create

SRM_PS_GetSRFParameters

SRM_PS_Method_List

SRM_PolarStereographic

6.3.25 Position2D

SRM_Position2D_Method_List

SRM_Position2D

6.3.26 Position3D

SRM_Position3D_Method_List

SRM_Position3D

6.3.27 SolarEcliptic

SRM_SE_Create

SRM_SE_Method_List

SRM_SolarEcliptic

6.3.28 SolarEquatorial

SRM_SEQ_Create

SRM_SEQ_Method_List

SRM_SolarEquatorial

6.3.29 SolarMagneticDipole

SRM_SMD_Create

SRM_SMD_Method_List

SRM_SolarMagneticDipole

6.3.30 SolarMagneticEcliptic

SRM_SME_Create

SRM_SME_Method_List

SRM_SolarMagneticEcliptic

6.3.31 SurfaceCoordinate

SRM_SurfaceCoordinate_Method_List

SRM_SurfaceCoordinate

6.3.32 TransverseMercator

SRM_TM_Create

SRM_TM_GetSRFParameters

SRM_TM_Method_List

SRM_TransverseMercator

6.4 Creation function for standard SRFs

6.4.1 Overview

6.4.2 CreateSRFSetMember

SRM_CreateSRFSetMember

6.4.3 CreateStandardSRF

SRM_CreateStandardSRF

 

6.1.2 Notational conventions

The binding of each SRM concrete object method signature is bound as depicted in the following template:

SRM_CBindingMethodName

Abstract Method:  AbstractMethodName

typedef ReturnValueDataType SRM_CBindingMethodName (

 

Parameter0DataType

parameter_0_name,

/* paramater_0_comment */

 

Parameter1DataType

parameter_1_name,

/* paramater_1_comment */

 

• • •

 

 

 

ParameterNDataType

parameter_N_name

/* paramater_N_comment */

};

The SRM C binding method name is formed by a sentinal “SRM_” followed by the name without spaces and with words capitalized. The SRM abstract method name is the name used in ISO/IEC 18026. Parameter 0 of a method is always a pointer to the associated object.

Independent functions (including all Create functions) are bound in a manner similar to that used by object methods except that Parameter 0 is not constrained to be a pointer to the current object. In most cases, the independent functions are producing an object instance.

The return value data type and parameter data types may be found in Clause 5 of this part of ISO/IEC 18042 or may be a standard C data type (e.g., void).

The parameter names are formed by using lower case words separated by underscores.

To the right of each parameter declaration is an optional C comment field. If the comment begins with “OUT”, it means the argument is used as an output parameter; the implementation returns data to the application through this argument. Arguments without “OUT” are input parameters.

Each SRM concrete object class is bound to a data type that is specified as a structure containing a pointer to its state and another pointer to its list of methods as depicted in the following template:

SRM_CBindingObjectClassName

Abstract object class:  AbstractObjectClassName

typedef struct {

void

*state;

Method_List_Data_Type

*methods;

} SRM_CBindingObjectClassName;

The state is an implementation-dependent private data type that is accessed solely through the methods in the method list.

Each method list for a SRM concrete object class is a data type that is specified as a structure containing a pointer to each method supported by the object class as depicted in the following template:

SRM_CBindingObjectClassNameMethodList

Abstract object class method list:  AbstractObjectClassName

typedef struct {

Method_0_Data_Type

*method_0_name;

Method_1_Data_Type

*method_1_name;

• • •

 

Method_N_Data_Type

*method_N_name;

} SRM_CBindingObjectClassNameMethodList;

NOTE  Instances of this data type are normally populated by the implementation during object creation.

6.2  SRM abstract object method signatures

6.2.1 Overview

Method signatures for SRM abstract objects are specified here for use when specifying concrete object classes (see 6.3 SRM concrete object classes).

6.2.2 LifeCycleObject

SRM_Create

Abstract Function:  Create

typedef SRM_Status_Code SRM_Create (

 

SRM_Object_Reference

**object

/* OUT create object */

);

SRM_Destroy

Abstract Method:  Destroy

typedef SRM_Status_Code SRM_Destroy (

 

SRM_Object_Reference

*object

/* object to destroy*/

);

6.2.3 BaseSRF

SRM_GetORMCodes

Abstract Method:  GetORMCodes

typedef SRM_Status_Code SRM_GetORMCodes (

 

SRM_Object_Reference

*this,

 

 

SRM_ORM

*orm

/* OUT */

);

SRM_GetSRFCodes

Abstract Method:  GetSRFCodes

typedef SRM_Status_Code SRM_GetSRFCodes (

 

SRM_Object_Reference

*this,

 

 

SRM_SRF_Codes_Info

*srf_codes_info

/* OUT srf codes info */

);

SRM_GetCSCode

Abstract Method:  GetCSCode

typedef SRM_Status_Code SRM_GetCSCode (

 

SRM_Object_Reference

*this,

 

 

SRM_CS_Code

*cs_code

/* OUT cs code */

);

6.2.4 BaseSRF2D

SRM_ChangeCoordinate2DSRF

Abstract Method:  ChangeCoordinate2DSRF

typedef SRM_Status_Code SRM_ChangeCoordinate2DSRF (

 

SRM_Object_Reference

*this,

 

const

SRM_Object_Reference

*source_srf,

 

const

SRM_Coordinate2D

*source_coordinate,

 

 

SRM_Coordinate2D

**target_coordinate

/* OUT */

);

SRM_ChangeCoordinate2DSRFObject

Abstract Method:  ChangeCoordinate2DSRFObject

typedef SRM_Status_Code SRM_ChangeCoordinate2DSRFObject (

 

SRM_Object_Reference

*this,

 

const

SRM_Object_Reference

*source_srf,

 

const

SRM_Coordinate2D

*source_coordinate,

 

const

SRM_ORM_Transformation_2D_Parameters

*h_st,

 

 

SRM_Coordinate2D

**target_coordinate

/* OUT */

);

SRM_CreateCoordinate2D

Abstract Method:  CreateCoordinate2D

typedef SRM_Status_Code SRM_CreateCoordinate2D (

 

SRM_Object_Reference

*this,

 

 

SRM_Long_Float

first_coordinate_component,

 

 

SRM_Long_Float

second_coordinate_component,

 

 

SRM_Coordinate2D

**new_coordinate

/* OUT */

);

SRM_EuclideanDistance2D

Abstract Method:  EuclideanDistance

typedef SRM_Status_Code SRM_EuclideanDistance2D (

 

SRM_Object_Reference

*this,

 

const

SRM_Coordinate2D

*source_coordinate,

 

const

SRM_Coordinate2D

*target_coordinate

 

 

SRM_Long_Float

*distance

/* OUT */

);

SRM_Generating2D

Abstract Method:  Generating2D

typedef SRM_Status_Code SRM_Generating2D (

 

SRM_Object_Reference

*this,

 

const

SRM_Coordinate2D

*coordinate,

 

 

SRM_Position2D

**position

/* OUT */

);

SRM_GetCoordinate2DValues

Abstract Method:  GetCoordinate2DValues

typedef SRM_Status_Code SRM_GetCoordinate2DValues (

 

SRM_Object_Reference

*this,

 

const

SRM_Coordinate2D

*new_coordinate,

 

 

SRM_Long_Float

*first_coordinate_component,

/* OUT */

 

SRM_Long_Float

*second_coordinate_component

/* OUT */

);

SRM_InverseGenerating2D

Abstract Method:  InverseGenerating2D

typedef SRM_Status_Code SRM_InverseGenerating2D (

 

SRM_Object_Reference

*this,

 

const

SRM_Position2D

*position,

 

 

SRM_Coordinate2D

**coordinate

/* OUT */

);

6.2.5 BaseSRF3D

SRM_ChangeCoordinate3DSRF

Abstract Method:  ChangeCoordinate3DSRF

typedef SRM_Status_Code SRM_ChangeCoordinate3DSRF (

 

SRM_Object_Reference

*this,

 

const

SRM_Object_Reference

*source_srf,

 

const

SRM_Coordinate3D

*source_coordinate,

 

 

SRM_Coordinate3D

**target_coordinate,

/* OUT */

 

SRM_Coordinate_Valid_Region

*region

/* OUT */

);

SRM_ChangeCoordinate3DSRFObject

Abstract Method:  ChangeCoordinate3DSRFObject

typedef SRM_Status_Code SRM_ChangeCoordinate3DSRFObject (

 

SRM_Object_Reference

*this,

 

const

SRM_Object_Reference

*source_srf,

 

const

SRM_Coordinate3D

*source_coordinate,

 

const

SRM_ORM_Transformation_3D_Parameters

*h_st,

 

 

SRM_Coordinate3D

**target_coordinate,

/* OUT */

 

SRM_Coordinate_Valid_Region

*region

/* OUT */

);

SRM_ChangeDirectionSRF

Abstract Method:  ChangeDirectionSRF

typedef SRM_Status_Code SRM_ChangeDirectionSRF (

 

SRM_Object_Reference

*this,

 

const

SRM_Object_Reference

*source_srf,

 

const

SRM_Direction

*source_direction,

 

 

SRM_Direction

**target_direction,

/* OUT */

 

SRM_Coordinate_Valid_Region

*ref_coord_region

/* OUT */

);

SRM_ChangeDirectionSRFObject

Abstract Method:  ChangeDirectionSRFObject

typedef SRM_Status_Code SRM_ChangeDirectionSRFObject (

 

SRM_Object_Reference

*this,

 

const

SRM_Object_Reference

*source_srf,

 

const

SRM_Direction

*source_direction,

 

const

SRM_ORM_Transformation_3D_Parameters

*source_direction,

 

 

SRM_Direction

**target_direction,

/* OUT */

 

SRM_Coordinate_Valid_Region

*ref_coord_region

/* OUT */

);

SRM_CreateCoordinate3D

Abstract Method:  CreateCoordinate3D

typedef SRM_Status_Code SRM_CreateCoordinate3D (

 

SRM_Object_Reference

*this,

 

 

SRM_Long_Float

first_coordinate_component,

 

 

SRM_Long_Float

second_coordinate_component,

 

 

SRM_Long_Float

third_coordinate_component,

 

 

SRM_Coordinate3D

**new_coordinate

/* OUT */

);

SRM_CreateDirection

Abstract Method:  CreateDirection

typedef SRM_Status_Code SRM_CreateDirection (

 

SRM_Object_Reference

*this,

 

const

SRM_Coordinate3D

reference_coordinate,

 

 

SRM_Long_Float

first_direction_component,

 

 

SRM_Long_Float

second_direction_component,

 

 

SRM_Long_Float

third_direction_component,

 

 

SRM_Direction

**new_direction

/* OUT */

);

SRM_EuclideanDistance3D

Abstract Method:  EuclideanDistance

typedef SRM_Status_Code SRM_EuclideanDistance3D (

 

SRM_Object_Reference

*this,

 

const

SRM_Coordinate3D

*source_coordinate,

 

const

SRM_Coordinate3D

*target_coordinate,

 

 

SRM_Long_Float

*distance

/* OUT */

);

SRM_Generating3D

Abstract Method:  Generating3D

typedef SRM_Status_Code SRM_Generating3D (

 

SRM_Object_Reference

*this,

 

const

SRM_Coordinate3D

*coordinate,

 

 

SRM_Position3D

**position

/* OUT */

);

SRM_GetCoordinate3DValues

Abstract Method:  GetCoordinate3DValues

typedef SRM_Status_Code SRM_GetCoordinate3DValues (

 

SRM_Object_Reference

*this,

 

const

SRM_Coordinate3D

*coordinate,

 

 

SRM_Long_Float

*first_coordinate_component,

/* OUT */

 

SRM_Long_Float

*second_coordinate_component,

/* OUT */

 

SRM_Long_Float

*third_coordinate_component

/* OUT */

);

SRM_GetDirectionValues

Abstract Method:  GetDirectionValues

typedef SRM_Status_Code SRM_GetDirectionValues (

 

SRM_Object_Reference

*this,

 

const

SRM_Direction

*direction,

 

 

SRM_Coordinate3D

**reference_coordinate,

/* OUT */

 

SRM_Long_Float

*first_direction_component,

/* OUT */

 

SRM_Long_Float

*second_direction_component,

/* OUT */

 

SRM_Long_Float

*third_direction_component

/* OUT */

);

SRM_GetExtendedValidRegion

Abstract Method:  GetExtendedValidRegion

typedef SRM_Status_Code SRM_GetExtendedValidRegion (

 

SRM_Object_Reference

*this,

 

 

SRM_Integer

component,

 

 

SRM_Interval_Type

*type,

/* OUT */

 

SRM_Long_Float

*extended_lower,

/* OUT */

 

SRM_Long_Float

*lower,

/* OUT */

 

SRM_Long_Float

*upper,

/* OUT */

 

SRM_Long_Float

*extended_upper

/* OUT */

);

SRM_GetValidRegion

Abstract Method:  GetValidRegion

typedef SRM_Status_Code SRM_GetValidRegion (

 

SRM_Object_Reference

*this,

 

 

SRM_Integer

component,

 

 

SRM_Interval_Type

*type,

/* OUT */

 

SRM_Long_Float

*lower,

/* OUT */

 

SRM_Long_Float

*upper

/* OUT */

);

SRM_InverseGenerating3D

Abstract Method:  InverseGenerating3D

typedef SRM_Status_Code SRM_InverseGenerating3D (

 

SRM_Object_Reference

*this,

 

const

SRM_Position3D

*position,

 

 

SRM_Coordinate3D

**coordinate,

/* OUT */

 

SRM_Coordinate_Valid_Region

*region

/* OUT */

);

SRM_SetExtendedValidRegion

Abstract Method:  SetExtendedValidRegion

typedef SRM_Status_Code SRM_SetExtendedValidRegion (

 

SRM_Object_Reference

*this,

 

 

SRM_Integer

coordinate,

 

 

SRM_Interval_Type

type,

 

 

SRM_Long_Float

extended_lower,

 

 

SRM_Long_Float

lower,

 

 

SRM_Long_Float

upper,

 

 

SRM_Long_Float

extended_upper

 

);

SRM_SetValidRegion

Abstract Method:  SetValidRegion

typedef SRM_Status_Code SRM_SetValidRegion (

 

SRM_Object_Reference

*this,

 

 

SRM_Integer

coordinate,

 

 

SRM_Interval_Type

type,

 

 

SRM_Long_Float

lower,

 

 

SRM_Long_Float

upper

 

);

6.2.6 BaseSRFwithTangentPlaneSurface

SRM_AssociateSurfaceCoordinateTPS

Abstract Method:  AssociateSurfaceCoordinate

typedef SRM_Status_Code SRM_AssociateSurfaceCoordinateTPS (

 

SRM_Object_Reference

*this,

 

const

SRM_Coordinate3D

*coordinate,

 

 

SRM_SurfaceCoordinate

**on_surface_coordinate

/* OUT */

);

SRM_CreateSurfaceCoordinateTPS

Abstract Method:  CreateSurfaceCoordinate

typedef SRM_Status_Code SRM_CreateSurfaceCoordinateTPS (

 

SRM_Object_Reference

*this,

 

 

SRM_Long_Float

first_coordinate_component,

 

 

SRM_Long_Float

second_coordinate_component,

 

 

SRM_SurfaceCoordinate

**new_coordinate

/* OUT */

);

SRM_EuclideanDistanceTPS

Abstract Method:  EuclideanDistance

typedef SRM_Status_Code SRM_EuclideanDistanceTPS (

 

SRM_Object_Reference

*this,

 

const

SRM_SurfaceCoordinate

*source_coordinate,

 

const

SRM_SurfaceCoordinate

*target_coordinate,

 

 

SRM_Long_Float

*distance

/* OUT */

);

SRM_GetSurfaceCoordinateValuesTPS

Abstract Method:  GetSurfaceCoordinateValues

typedef SRM_Status_Code SRM_GetSurfaceCoordinateValuesTPS (

 

SRM_Object_Reference

*this,

 

const

SRM_SurfaceCoordinate

*coordinate,

 

 

SRM_Long_Float

*first_coordinate_component,

/* OUT */

 

SRM_Long_Float

*second_coordinate_component

/* OUT */

);

SRM_PromoteSurfaceCoordinateTPS

Abstract Method:  PromoteSurfaceCoordinate

typedef SRM_Status_Code SRM_PromoteSurfaceCoordinateTPS (

 

SRM_Object_Reference

*this,

 

const

SRM_SurfaceCoordinate

*surface_coordinate,

 

 

SRM_Coordinate3D

**coordinate

/* OUT */

);

6.2.7 BaseSRFwithEllipsoidalHeight

SRM_AssociateSurfaceCoordinateEH

Abstract Method:  AssociateSurfaceCoordinate

typedef SRM_Status_Code SRM_AssociateSurfaceCoordinateEH (

 

SRM_Object_Reference

*this,

 

const

SRM_Coordinate3D

*coordinate,

 

 

SRM_SurfaceCoordinate

**on_surface_coordinate

/* OUT */

);

SRM_CreateLocalTangentSpaceEuclideanSRF

Abstract Method:  CreateLocalTangentSpaceEuclideanSRF

typedef SRM_Status_Code SRM_CreateLocalTangentSpaceEuclideanSRF (

 

SRM_Object_Reference

*this,

 

const

SRM_SurfaceCoordinate

*surface_coordinate,

 

 

SRM_Long_Float

azimuth,

 

 

SRM_Long_Float

false_x_origin,

 

 

SRM_Long_Float

false_y_origin,

 

 

SRM_Long_Float

offset_height,

 

 

SRM_LocalTangentSpaceEuclidean

**local_tangent_Euclidean_srf

/* OUT */

);

SRM_CreateSurfaceCoordinateEH

Abstract Method:  CreateSurfaceCoordinate

typedef SRM_Status_Code SRM_CreateSurfaceCoordinateEH (

 

SRM_Object_Reference

*this,

 

 

SRM_Long_Float

first_coordinate_component,

 

 

SRM_Long_Float

second_coordinate_component,

 

 

SRM_SurfaceCoordinate

**new_coordinate

/* OUT */

);

SRM_EuclideanDistanceEH

Abstract Method:  EuclideanDistance

typedef SRM_Status_Code SRM_EuclideanDistanceEH (

 

SRM_Object_Reference

*this,

 

const

SRM_SurfaceCoordinate

*source_coordinate,

 

const

SRM_SurfaceCoordinate

*target_coordinate,

 

 

SRM_Long_Float

*distance

/* OUT */

);

SRM_GeodesicDistance

Abstract Method:  GeodesicDistance

typedef SRM_Status_Code SRM_GeodesicDistance (

 

SRM_Object_Reference

*this,

 

const

SRM_SurfaceCoordinate

*source_coordinate,

 

const

SRM_SurfaceCoordinate

*target_coordinate,

 

 

SRM_Long_Float

*distance

/* OUT */

);

SRM_GetSurfaceCoordinateValuesEH

Abstract Method:  GetSurfaceCoordinateValues

typedef SRM_Status_Code SRM_GetSurfaceCoordinateValuesEH (

 

SRM_Object_Reference

*this,

 

const

SRM_SurfaceCoordinate

*coordinate,

 

 

SRM_Long_Float

*first_coordinate_component,

/* OUT */

 

SRM_Long_Float

*second_coordinate_component

/* OUT */

);

SRM_PromoteSurfaceCoordinateEH

Abstract Method:  PromoteSurfaceCoordinate

typedef SRM_Status_Code SRM_PromoteSurfaceCoordinateEH (

 

SRM_Object_Reference

*this,

 

const

SRM_SurfaceCoordinate

*surface_coordinate,

 

 

SRM_Coordinate3D

**coordinate

/* OUT */

);

6.2.8 BaseMapProjection

SRM_ConvergenceOfTheMeridian

Abstract Method:  ConvergenceOfTheMeridian

typedef SRM_Status_Code SRM_ConvergenceOfTheMeridian (

 

SRM_Object_Reference

*this,

 

const

SRM_SurfaceCoordinate

*surface_coordinate,

 

 

SRM_Long_Float

*gamma

/* OUT */

);

SRM_GetExtendedValidGeodeticRegion

Abstract Method:  GetExtendedValidGeodeticRegion

typedef SRM_Status_Code SRM_GetExtendedValidGeodeticRegion (

 

SRM_Object_Reference

*this,

 

 

SRM_Integer

component,

 

 

SRM_Interval_Type

*type,

/* OUT */

 

SRM_Long_Float

*extended_lower,

/* OUT */

 

SRM_Long_Float

*lower,

/* OUT */

 

SRM_Long_Float

*upper,

/* OUT */

 

SRM_Long_Float

*extended_upper

/* OUT */

);

SRM_GetValidGeodeticRegion

Abstract Method:  GetValidGeodeticRegion

typedef SRM_Status_Code SRM_GetValidGeodeticRegion (

 

SRM_Object_Reference

*this,

 

 

SRM_Integer

component,

 

 

SRM_Interval_Type

*type,

/* OUT */

 

SRM_Long_Float

*lower,

/* OUT */

 

SRM_Long_Float

*upper

/* OUT */

);

SRM_MapAzimuth

Abstract Method:  MapAzimuth

typedef SRM_Status_Code SRM_MapAzimuth (

 

SRM_Object_Reference

*this,

 

const

SRM_SurfaceCoordinate

*surface_coordinate,

 

const

SRM_SurfaceCoordinate

*target_coordinate,

 

 

SRM_Long_Float

*azimuth

/* OUT */

);

SRM_PointScale

Abstract Method:  PointScale

typedef SRM_Status_Code SRM_PointScale (

 

SRM_Object_Reference

*this,

 

const

SRM_SurfaceCoordinate

*surface_coordinate,

 

 

SRM_Long_Float

*scale

/* OUT */

);

SRM_SetExtendedValidGeodeticRegion

Abstract Method:  SetExtendedValidGeodeticRegion

typedef SRM_Status_Code SRM_SetExtendedValidGeodeticRegion (

 

SRM_Object_Reference

*this,

 

 

SRM_Integer

component,

 

 

SRM_Interval_Type

type,

 

 

SRM_Long_Float

extended_lower,

 

 

SRM_Long_Float

lower,

 

 

SRM_Long_Float

upper,

 

 

SRM_Long_Float

extended_upper

 

);

SRM_SetValidGeodeticRegion

Abstract Method:  SetValidGeodeticRegion

typedef SRM_Status_Code SRM_SetValidGeodeticRegion (

 

SRM_Object_Reference

*this,

 

 

SRM_Integer

component,

 

 

SRM_Interval_Type

type,

 

 

SRM_Long_Float

lower,

 

 

SRM_Long_Float

upper

 

);

6.3 SRM concrete object classes

6.3.1 Overview

Concrete SRM objects are defined by a combination of methods and functions defined for the abstract object classes as specified in 6.2 SRM Abstract object method signatures and new methods and data types specified for each concrete object class. Objects may be created by using the Create function that accompanies each object class. The Create function accepts parameters that specify the characteristics of an object and returns a pointer to the object that is created. Object classes not specifying a Create function use that specified in 6.2.2 LifeCycleObject.

6.3.2 Celestiocentric

The following function specifies the binding of the factory for the Celestiocentric object class:

SRM_CC_Create

Abstract Function:  Create

typedef SRM_Status_Code SRM_CC_Create (

 

SRM_ORM

orm,

 

 

SRM_Celestiocentric

*new_srf

/* OUT */

);

The following data type is used to specify the methods of the Celestiocentric object class:

SRM_CC_Method_List

Abstract object class:  Celestiocentric

typedef struct {

SRM_ChangeCoordinate3DSRF

*ChangeCoordinate3DSRF;

SRM_ChangeCoordinate3DSRFObject

*ChangeCoordinate3DSRFObject;

SRM_ChangeDirectionSRF

*ChangeDirectionSRF;

SRM_ChangeDirectionSRFObject

*ChangeDirectionSRFObject;

SRM_CreateCoordinate3D

*CreateCoordinate3D;

SRM_CreateDirection

*CreateDirection;

SRM_Destroy

*Destroy;

SRM_EuclideanDistance3D

*EuclideanDistance3D;

SRM_Generating3D

*Generating3D;

SRM_GetCoordinate3DValues

*GetCoordinate3DValues;

SRM_GetCSCodes

*GetCSCodes;

SRM_GetDirectionValues

*GetDirectionValues;

SRM_GetExtendedValidRegion

*GetExtendedValidRegion;

SRM_GetORMCodes

*GetORMCodes;

SRM_GetSRFCodes

*GetSRFCodes;

SRM_GetValidRegion

*GetValidRegion;

SRM_InverseGenerating3D

*InverseGenerating3D;

SRM_SetExtendedValidRegion

*SetExtendedValidRegion;

SRM_SetValidRegion

*SetValidRegion;

} SRM_CC_Method_List;

The following record type specifies the binding of the Celestocentric object class:

SRM_Celestiocentric

Abstract object class:  Celestiocentric

typedef struct {

void

*state;

SRM_CC_Method_List

*methods;

} SRM_Celestiocentric;

6.3.3 Celestiodetic

The following function specifies the binding of the factory for the Celestiodetric object class:

SRM_CD_Create

Abstract Function:  Create

typedef SRM_Status_Code SRM_CD_Create (

 

SRM_ORM

orm,

 

 

SRM_Celestiodetic

*new_srf

/* OUT */

);

The following data type is used to specify the methods of the Celestiodetic object class:

SRM_CD_Method_List

Abstract object class:  Celestiodetic

typedef struct {

SRM_AssociateSurfaceCoordinateEH

*AssociateSurfaceCoordinate;

SRM_ChangeCoordinate3DSRF

*ChangeCoordinate3DSRF;

SRM_ChangeCoordinate3DSRFObject

*ChangeCoordinate3DSRFObject;

SRM_ChangeDirectionSRF

*ChangeDirectionSRF;

SRM_ChangeDirectionSRFObject

*ChangeDirectionSRFObject;

SRM_CreateCoordinate3D

*CreateCoordinate3D;

SRM_CreateDirection

*CreateDirection;

SRM_CreateLocalTangentSpaceEuclideanSRF

*CreateLocalTangentSpaceEuclideanSRF;

SRM_CreateSurfaceCoordinateEH

*CreateSurfaceCoordinate;

SRM_Destroy

*Destroy;

SRM_EuclideanDistance3D

*EuclideanDistance3D;

SRM_EuclideanDistanceEH

*EuclideanDistanceEH;

SRM_Generating3D

*Generating3D;

SRM_GeodesicDistance

*GeodesicDistance;

SRM_GetCoordinate3DValues

*GetCoordinate3DValues;

SRM_GetCSCodes

*GetCSCodes;

SRM_GetDirectionValues

*GetDirectionValues;

SRM_GetExtendedValidRegion

*GetExtendedValidRegion;

SRM_GetORMCodes

*GetORMCodes;

SRM_GetSRFCodes

*GetSRFCodes;

SRM_GetSurfaceCoordinateValuesEH

*GetSurfaceCoordinateValues;

SRM_GetValidRegion

*GetValidRegion;

SRM_InverseGenerating3D

*InverseGenerating3D;

SRM_PromoteSurfaceCoordinateEH

*PromoteSurfaceCoordinate;

SRM_SetExtendedValidRegion

*SetExtendedValidRegion;

SRM_SetValidRegion

*SetValidRegion;

SRM_VerticalOffset

*VerticalOffset;

} SRM_CD_Method_List;

The following record type specifies the binding of the Celestiodetic object class:

SRM_Celestiodetic

Abstract object class:  Celestiodetic

typedef struct {

void

*state;

SRM_CD_Method_List

*methods;

} SRM_Celestiodetic;

6.3.4 Celestiomagnetic

The following function specifies the binding of the factory for the Celestiomagnetic object class:

SRM_CM_Create

Abstract Function:  Create

typedef SRM_Status_Code SRM_CM_Create (

 

SRM_ORM

orm,

 

 

SRM_Celestiomagnetic

*new_srf

/* OUT */

);

The following data type is used to specify the methods of the Celestiomagnetic object class:

SRM_CM_Method_List

Abstract object class:  Celestiomagnetic

typedef struct {

SRM_ChangeCoordinate3DSRF

*ChangeCoordinate3DSRF;

SRM_ChangeCoordinate3DSRFObject

*ChangeCoordinate3DSRFObject;

SRM_ChangeDirectionSRF

*ChangeDirectionSRF;

SRM_ChangeDirectionSRFObject

*ChangeDirectionSRFObject;

SRM_CreateCoordinate3D

*CreateCoordinate3D;

SRM_CreateDirection

*CreateDirection;

SRM_Destroy

*Destroy;

SRM_EuclideanDistance3D

*EuclideanDistance3D;

SRM_Generating3D

*Generating3D;

SRM_GetCoordinate3DValues

*GetCoordinate3DValues;

SRM_GetCSCodes

*GetCSCodes;

SRM_GetDirectionValues

*GetDirectionValues;

SRM_GetExtendedValidRegion

*GetExtendedValidRegion;

SRM_GetORMCodes

*GetORMCodes;

SRM_GetSRFCodes

*GetSRFCodes;

SRM_GetValidRegion

*GetValidRegion;

SRM_InverseGenerating3D

*InverseGenerating3D;

SRM_SetExtendedValidRegion

*SetExtendedValidRegion;

SRM_SetValidRegion

*SetValidRegion;

} SRM_CM_Method_List;

The following record type specifies the binding of the Celestiomagnetic object class:

SRM_Celestiomagnetic

Abstract object class:  Celestiomagnetic

typedef struct {

void

*state;

SRM_CM_Method_List

*methods;

} SRM_Celestiomagnetic;

6.3.5 Coordinate2D

The following data type is used to specify the methods of the Coordinate2D object class:

SRM_Coordinate2D_Method_List

Abstract object class:  Coordinate2D

typedef struct {

SRM_Destroy

*destroy;

} SRM_Coordinate2D_Method_List;

SRM_Coordinate2D

Abstract object class:  Coordinate2D

typedef struct {

void

*state;

SRM_Coordinate2D_Method_List

*methods;

} SRM_Coordinate2D;

6.3.6 Coordinate3D

The following data type is used to specify the methods of the Coordinate3D object class:

SRM_Coordinate3D_Method_List

Abstract object class:  Coordinate3D

typedef struct {

SRM_Destroy

*destroy;

} SRM_Coordinate3D_Method_List;

SRM_Coordinate3D

Abstract object class:  Coordinate3D

typedef struct {

void

*state;

SRM_Coordinate3D_Method_List

*methods;

} SRM_Coordinate3D;

6.3.7 Direction

The following data type is used to specify the methods of the Direction object class:

SRM_Direction_Method_List

Abstract object class:  Direction

typedef struct {

SRM_Destroy

*destroy;

} SRM_Direction_Method_List;

SRM_Direction

Abstract object class:  Direction

typedef struct {

void

*state;

SRM_Direction_Method_List

*methods;

} SRM_Direction;

6.3.8 EquatorialInertial

The following function specifies the binding of the factory for the EquatorialInertial object class:

SRM_EI_Create

Abstract Function:  Create

typedef SRM_Status_Code SRM_EI_Create (

 

SRM_ORM

orm,

 

 

SRM_EquatorialInertial

*new_srf

/* OUT */

);

The following data type is used to specify the methods of the EquatorialInertial object class:

SRM_EI_Method_List

Abstract object class:  EquatorialInertial

typedef struct {

SRM_ChangeCoordinate3DSRF

*ChangeCoordinate3DSRF;

SRM_ChangeCoordinate3DSRFObject

*ChangeCoordinate3DSRFObject;

SRM_ChangeDirectionSRF

*ChangeDirectionSRF;

SRM_ChangeDirectionSRFObject

*ChangeDirectionSRFObject;

SRM_CreateCoordinate3D

*CreateCoordinate3D;

SRM_CreateDirection

*CreateDirection;

SRM_Destroy

*Destroy;

SRM_EuclideanDistance3D

*EuclideanDistance3D;

SRM_Generating3D

*Generating3D;

SRM_GetCoordinate3DValues

*GetCoordinate3DValues;

SRM_GetCSCodes

*GetCSCodes;

SRM_GetDirectionValues

*GetDirectionValues;

SRM_GetExtendedValidRegion

*GetExtendedValidRegion;

SRM_GetORMCodes

*GetORMCodes;

SRM_GetSRFCodes

*GetSRFCodes;

SRM_GetValidRegion

*GetValidRegion;

SRM_InverseGenerating3D

*InverseGenerating3D;

SRM_SetExtendedValidRegion

*SetExtendedValidRegion;

SRM_SetValidRegion

*SetValidRegion;

} SRM_EI_Method_List;

The following record type specifies the binding of the EquatorialInertial object class:

SRM_EquatorialInertial

Abstract object class:  EquatorialInertial

typedef struct {

void

*state;

SRM_EI_Method_List

*methods;

} SRM_EquatorialInertial;

6.3.9 EquidistantCylindrical

The following function specifies the binding of the factory for the EquidistantCylindrical object class:

SRM_EC_Create

Abstract Function:  Create

typedef SRM_Status_Code SRM_EC_Create (

 

SRM_ORM

orm,

 

const

SRM_Equidistant_Cylindrical_Parameters

parameters,

 

 

SRM_EquidistantCylindrical

*new_srf

/* OUT */

);

The following method is used to specify the binding of the EquidistantCylindrical object class:

SRM_EC_GetSRFParameters

Abstract Method:  GetSRFParameters

typedef SRM_Status_Code SRM_EC_GetSRFParameters (

 

SRM_Object_Reference

*this,

 

 

SRM_Equidistant_Cylindrical_Parameters

*parameters

/* OUT */

);

The following data type is used to specify the methods of the EquidistantCylindrical object class:

SRM_EC_Method_List

Abstract object class:  EquidistanceCylindrical

typedef struct {

SRM_AssociateSurfaceCoordinateEH

*AssociateSurfaceCoordinate;

SRM_ChangeCoordinate3DSRF

*ChangeCoordinate3DSRF;

SRM_ChangeCoordinate3DSRFObject

*ChangeCoordinate3DSRFObject;

SRM_ChangeDirectionSRF

*ChangeDirectionSRF;

SRM_ChangeDirectionSRFObject

*ChangeDirectionSRFObject;

SRM_ConvergenceOfTheMeridian

*ConvergenceOfTheMeridian;

SRM_CreateCoordinate3D

*CreateCoordinate3D;

SRM_CreateDirection

*CreateDirection;

SRM_CreateLocalTangentPlaneEuclideanSRF

*CreateLocalTangentPlaneEuclideanSRF;

SRM_CreateSurfaceCoordinateEH

*CreateSurfaceCoordinate;

SRM_Destroy

*Destroy;

SRM_EuclideanDistance3D

*EuclideanDistance3D;

SRM_EuclideanDistanceEH

*EuclideanDistanceEH;

SRM_Generating3D

*Generating3D;

SRM_GeodesicDistance

*GeodesicDistance;

SRM_GetCoordinate3DValues

*GetCoordinate3DValues;

SRM_GetCSCode

*GetCSCode;

SRM_GetDirectionValues

*GetDirectionValues;

SRM_GetExtendedValidGeodeticRegion

*GetExtendedValidGeodeticRegion;

SRM_GetExtendedValidRegion

*GetExtendedValidRegion;

SRM_GetORMCodes

*GetORMCodes;

SRM_GetSRFCodes

*GetSRFCodes;

SRM_EC_GetSRFParameters

*GetSRFParameters;

SRM_GetSurfaceCoordinateValuesEH

*GetSurfaceCoordinateValues;

SRM_GetValidGeodeticRegion

*GetValidGeodeticRegion;

SRM_GetValidRegion

*GetValidRegion;

SRM_InverseGenerating3D

*InverseGenerating3D;

SRM_MapAzimuth

*MapAzimuth;

SRM_PromoteSurfaceCoordinateEH

*PromoteSurfaceCoordinate;

SRM_PointScale

*PointScale;

SRM_SetExtendedValidGeodeticRegion

*SetExtendedValidGeodeticRegion;

SRM_SetExtendedValidRegion

*SetExtendedValidRegion;

SRM_SetValidGeodeticRegion

*SetValidGeodeticRegion;

SRM_SetValidRegion

*SetValidRegion;

SRM_VerticalOffset

*VerticalOffset;

} SRM_EC_Method_List;

The following record type specifies the binding of the EquidistantCylindrical object class:

SRM_EquidistantCylindrical

Abstract object class:  EquidistanceCylindrical

typedef struct {

void

*state;

SRM_EC_Method_List

*methods;

} SRM_EquidistanceCylindrical;

6.3.10 HeliosphericAriesEcliptic

The following function specifies the binding of the factory for the HeliosphericAriesEcliptic object class:

SRM_HAEC_Create

Abstract Function:  Create

typedef SRM_Status_Code SRM_HAEC_Create (

 

SRM_ORM

orm,

 

 

SRM_HeliosphericAriesEcliptic

*new_srf

/* OUT */

);

The following data type is used to specify the methods of the HeliosphericAriesEcliptic object class:

SRM_HAEC_Method_List

Abstract object class:  HeliosphericAriesEcliptic

typedef struct {

SRM_ChangeCoordinate3DSRF

*ChangeCoordinate3DSRF;

SRM_ChangeCoordinate3DSRFObject

*ChangeCoordinate3DSRFObject;

SRM_ChangeDirectionSRF

*ChangeDirectionSRF;

SRM_ChangeDirectionSRFObject

*ChangeDirectionSRFObject;

SRM_CreateCoordinate3D

*CreateCoordinate3D;

SRM_CreateDirection

*CreateDirection;

SRM_Destroy

*Destroy;

SRM_EuclideanDistance3D

*EuclideanDistance3D;

SRM_Generating3D

*Generating3D;

SRM_GetCoordinate3DValues

*GetCoordinate3DValues;

SRM_GetCSCodes

*GetCSCodes;

SRM_GetDirectionValues

*GetDirectionValues;

SRM_GetExtendedValidRegion

*GetExtendedValidRegion;

SRM_GetORMCodes

*GetORMCodes;

SRM_GetSRFCodes

*GetSRFCodes;

SRM_GetValidRegion

*GetValidRegion;

SRM_InverseGenerating3D

*InverseGenerating3D;

SRM_SetExtendedValidRegion

*SetExtendedValidRegion;

SRM_SetValidRegion

*SetValidRegion;

} SRM_HAEC_Method_List;

The following record type specifies the binding of the HeliosphericAriesEcliptic object class:

SRM_HeliosphericAriesEcliptic

Abstract object class:  HeliosphericAriesEcliptic

typedef struct {

void

*state;

SRM_HAEC_Method_List

*methods;

} SRM_HeliosphericAriesEcliptic;

6.3.11 HeliosphericEarthEcliptic

The following function specifies the binding of the factory for the HeliosphericEarthEcliptic object class:

SRM_HEEC_Create

Abstract Function:  Create

typedef SRM_Status_Code SRM_HEEC_Create (

 

SRM_ORM

orm,

 

 

SRM_HeliosphericEarthEcliptic

*new_srf

/* OUT */

);

The following data type is used to specify the methods of the HeliosphericEarthEcliptic object class:

SRM_HEEC_Method_List

Abstract object class:  HeliosphericEarthEcliptic

typedef struct {

SRM_ChangeCoordinate3DSRF

*ChangeCoordinate3DSRF;

SRM_ChangeCoordinate3DSRFObject

*ChangeCoordinate3DSRFObject;

SRM_ChangeDirectionSRF

*ChangeDirectionSRF;

SRM_ChangeDirectionSRFObject

*ChangeDirectionSRFObject;

SRM_CreateCoordinate3D

*CreateCoordinate3D;

SRM_CreateDirection

*CreateDirection;

SRM_Destroy

*Destroy;

SRM_EuclideanDistance3D

*EuclideanDistance3D;

SRM_Generating3D

*Generating3D;

SRM_GetCoordinate3DValues

*GetCoordinate3DValues;

SRM_GetCSCodes

*GetCSCodes;

SRM_GetDirectionValues

*GetDirectionValues;

SRM_GetExtendedValidRegion

*GetExtendedValidRegion;

SRM_GetORMCodes

*GetORMCodes;

SRM_GetSRFCodes

*GetSRFCodes;

SRM_GetValidRegion

*GetValidRegion;

SRM_InverseGenerating3D

*InverseGenerating3D;

SRM_SetExtendedValidRegion

*SetExtendedValidRegion;

SRM_SetValidRegion

*SetValidRegion;

} SRM_HEEC_Method_List;

The following record type specifies the binding of the HeliosphericEarthEcliptic object class:

SRM_HeliosphericEarthEcliptic

Abstract object class:  HeliosphericEarthEcliptic

typedef struct {

void

*state;

SRM_HEEC_Method_List

*methods;

} SRM_HeliosphericEarthEcliptic;

6.3.12 HeliosphericEarthEquatorial

The following function specifies the binding of the factory for the HeliosphericEarthEquatorial object class:

SRM_HEEQ_Create

Abstract Function:  Create

typedef SRM_Status_Code SRM_HEEQ_Create (

 

SRM_ORM

orm,

 

 

SRM_HeliosphericEarthEquatorial

*new_srf

/* OUT */

);

The following data type is used to specify the methods of the HeliosphericEarthEquatorial object class:

SRM_HEEQ_Method_List

Abstract object class:  HeliosphericEarthEquatorial

typedef struct {

SRM_ChangeCoordinate3DSRF

*ChangeCoordinate3DSRF;

SRM_ChangeCoordinate3DSRFObject

*ChangeCoordinate3DSRFObject;

SRM_ChangeDirectionSRF

*ChangeDirectionSRF;

SRM_ChangeDirectionSRFObject

*ChangeDirectionSRFObject;

SRM_CreateCoordinate3D

*CreateCoordinate3D;

SRM_CreateDirection

*CreateDirection;

SRM_Destroy

*Destroy;

SRM_EuclideanDistance3D

*EuclideanDistance3D;

SRM_Generating3D

*Generating3D;

SRM_GetCoordinate3DValues

*GetCoordinate3DValues;

SRM_GetCSCodes

*GetCSCodes;

SRM_GetDirectionValues

*GetDirectionValues;

SRM_GetExtendedValidRegion

*GetExtendedValidRegion;

SRM_GetORMCodes

*GetORMCodes;

SRM_GetSRFCodes

*GetSRFCodes;

SRM_GetValidRegion

*GetValidRegion;

SRM_InverseGenerating3D

*InverseGenerating3D;

SRM_SetExtendedValidRegion

*SetExtendedValidRegion;

SRM_SetValidRegion

*SetValidRegion;

} SRM_HEEC_Method_List;

The following record type specifies the binding of the HeliosphericEarthEquatorial object class:

SRM_HeliosphericEarthEquatorial

Abstract object class:  HeliosphericEarthEquatorial

typedef struct {

void

*state;

SRM_HEEQ_Method_List

*methods;

} SRM_HeliosphericEarthEquatorial;

6.3.13 LambertConformalConic

The following function specifies the binding of the factory for the LambertConformalConic object class:

SRM_LCC_Create

Abstract Function:  Create

typedef SRM_Status_Code SRM_LCC_Create (

 

SRM_ORM

orm,

 

 

SRM_LambertConformalConic

*new_srf

/* OUT */

);

The following method is used to specify the binding of the LambertConformalConic object class:

SRM_LCC_GetSRFParameters

Abstract Method:  GetSRFParameters

typedef SRM_Status_Code SRM_LCC_GetSRFParameters (

 

SRM_Object_Reference

*this,

 

 

SRM_Lambert_Conformal_Conic_Parameters

*parameters

/* OUT */

);

The following data type is used to specify the methods of the LambertConformalConic object class:

SRM_LCC_Method_List

Abstract object class:  LambertConformalConic

typedef struct {

SRM_AssociateSurfaceCoordinateEH

*AssociateSurfaceCoordinate;

SRM_ChangeCoordinate3DSRF

*ChangeCoordinate3DSRF;

SRM_ChangeCoordinate3DSRFObject

*ChangeCoordinate3DSRFObject;

SRM_ChangeDirectionSRF

*ChangeDirectionSRF;

SRM_ChangeDirectionSRFObject

*ChangeDirectionSRFObject;

SRM_ConvergenceOfTheMeridian

*ConvergenceOfTheMeridian;

SRM_CreateCoordinate3D

*CreateCoordinate3D;

SRM_CreateDirection

*CreateDirection;

SRM_CreateLocalTangentPlaneEuclideanSRF

*CreateLocalTangentPlaneEuclideanSRF;

SRM_CreateSurfaceCoordinateEH

*CreateSurfaceCoordinate;

SRM_Destroy

*Destroy;

SRM_EuclideanDistance3D

*EuclideanDistance3D;

SRM_EuclideanDistanceEH

*EuclideanDistanceEH;

SRM_Generating3D

*Generating3D;

SRM_GeodesicDistance

*GeodesicDistance;

SRM_GetCoordinate3DValues

*GetCoordinate3DValues;

SRM_GetCSCode

*GetCSCode;

SRM_GetDirectionValues

*GetDirectionValues;

SRM_GetExtendedValidGeodeticRegion

*GetExtendedValidGeodeticRegion;

SRM_GetExtendedValidRegion

*GetExtendedValidRegion;

SRM_GetORMCodes

*GetORMCodes;

SRM_GetSRFCodes

*GetSRFCodes;

SRM_LCC_GetSRFParameters

*GetSRFParameters;

SRM_GetSurfaceCoordinateValuesEH

*GetSurfaceCoordinateValues;

SRM_GetValidGeodeticRegion

*GetValidGeodeticRegion;

SRM_GetValidRegion

*GetValidRegion;

SRM_InverseGenerating3D

*InverseGenerating3D;

SRM_MapAzimuth

*MapAzimuth;

SRM_PromoteSurfaceCoordinateEH

*PromoteSurfaceCoordinate;

SRM_PointScale

*PointScale;

SRM_SetExtendedValidGeodeticRegion

*SetExtendedValidGeodeticRegion;

SRM_SetExtendedValidRegion

*SetExtendedValidRegion;

SRM_SetValidGeodeticRegion

*SetValidGeodeticRegion;

SRM_SetValidRegion

*SetValidRegion;

SRM_VerticalOffset

*VerticalOffset;

} SRM_LCC_Method_List;

The following record type specifies the binding of the LambertConformalConic object class:

SRM_LambertConformalConic

Abstract object class:  LambertConformalConic

typedef struct {

void

*state;

SRM_LCC_Method_List

*methods;

} SRM_LambertConformalConic;

6.3.14 LocalSpaceAzimuthal

The following function specifies the binding of the factory for the LocalSpaceAzimuthal object class:

SRM_LSA_Create

Abstract Function:  Create

typedef SRM_Status_Code SRM_LSA_Create (

 

SRM_ORM

orm,

 

 

SRM_LocalSpaceAzimuthal

*new_srf

/* OUT */

);

The following data type is used to specify the methods of the LocalSpaceAzimuthal object class:

SRM_LSA_Method_List

Abstract object class:  LocalSpaceAzimuthal

typedef struct {

SRM_ChangeCoordinate2DSRF

*ChangeCoordinate2DSRF;

SRM_ChangeCoordinate2DSRFObject

*ChangeCoordinate2DSRFObject;

SRM_CreateCoordinate2D

*CreateCoordinate2D;

SRM_Destroy

*Destroy;

SRM_EuclideanDistance2D

*EuclideanDistance2D;

SRM_Generating2D

*Generating2D;

SRM_GetCoordinate2DValues

*GetCoordinate2DValues;

SRM_GetCSCodes

*GetCSCodes;

SRM_GetORMCodes

*GetORMCodes;

SRM_GetSRFCodes

*GetSRFCodes;

SRM_InverseGenerating2D

*InverseGenerating2D;

} SRM_LSA_Method_List;

The following record type specifies the binding of the LocalSpaceAzimuthal object class:

SRM_LocalSpaceAzimuthal

Abstract object class:  LocalSpaceAzimuthal

typedef struct {

void

*state;

SRM_LSA_Method_List

*methods;

} SRM_LocalSpaceAzimuthal;

6.3.15 LocalSpacePolar

The following function specifies the binding of the factory for the LocalSpacePolar object class:

SRM_LSP_Create

Abstract Function:  Create

typedef SRM_Status_Code SRM_LSP_Create (

 

SRM_ORM

orm,

 

 

SRM_LocalSpacePolar

*new_srf

/* OUT */

);

The following data type is used to specify the methods of the LocalSpacePolar object class:

SRM_LSP_Method_List

Abstract object class:  LocalSpacePolar

typedef struct {

void

*state;

SRM_ChangeCoordinate2DSRF

*ChangeCoordinate2DSRF;

SRM_ChangeCoordinate2DSRFObject

*ChangeCoordinate2DSRFObject;

SRM_CreateCoordinate2D

*CreateCoordinate2D;

SRM_Destroy

*Destroy;

SRM_EuclideanDistance2D

*EuclideanDistance2D;

SRM_Generating2D

*Generating2D;

SRM_GetCoordinate2DValues

*GetCoordinate2DValues;

SRM_GetCSCodes

*GetCSCodes;

SRM_GetORMCodes

*GetORMCodes;

SRM_GetSRFCodes

*GetSRFCodes;

SRM_InverseGenerating2D

*InverseGenerating2D;

} SRM_LSP_Method_List;

The following record type specifies the binding of the LocalSpacePolar object class:

SRM_LocalSpacePolar

Abstract object class:  LocalSpacePolar

typedef struct {

void

*state;

SRM_LSP_Method_List

*methods;

} SRM_LocalSpacePolar;

6.3.16 LocalSpaceRectangular2D

The following methods are used to specify the binding of the LocalSpaceRectangular2D object class:

SRM_LSR2D_Create

Abstract Function:  Create

typedef SRM_Status_Code SRM_LSR2D_Create (

 

SRM_ORM

orm,

 

const

SRM_Local_Space_Rectangular_2D_Parameters

srf_parameters,

 

 

SRM_LocalSpaceRectangular2D

*new_srf

/* OUT */

);

The following method is used to specify the binding of the LocalSpaceRectangular object class:

SRM_LSR2D_GetSRFParameters

Abstract Method:  GetSRFParameters

typedef SRM_Status_Code SRM_LSR2D_GetSRFParameters (

 

SRM_Local_Space_Rectangular_2D_Parameters

*parameters

/* OUT */

);

The following data type is used to specify the methods of the LocalSpaceRectangular2D object class:

SRM_LSR2D_Method_List

Abstract object class:  LocalSpaceRectangular2D

typedef struct {

SRM_ChangeCoordinate2DSRF

*ChangeCoordinate2DSRF;

SRM_ChangeCoordinate2DSRFObject

*ChangeCoordinate2DSRFObject;

SRM_CreateCoordinate2D

*CreateCoordinate2D;

SRM_Destroy

*Destroy;

SRM_EuclideanDistance2D

*EuclideanDistance2D;

SRM_Generating2D

*Generating2D;

SRM_GetCoordinate2DValues

*GetCoordinate2DValues;

SRM_GetCSCodes

*GetCSCodes;

SRM_GetORMCodes

*GetORMCodes;

SRM_GetSRFCodes

*GetSRFCodes;

SRM_InverseGenerating2D

*InverseGenerating2D;

} SRM_LSR2D_Method_List;

The following record type specifies the binding of the LocalSpaceRectangular2D object class:

SRM_LocalSpaceRectangular2D

Abstract object class:  LocalSpaceRectangular2D

typedef struct {

void

*state;

SRM_LSR2D_Method_List

*methods;

} SRM_LocalSpaceRectangular2D;

6.3.17 LocalSpaceRectangular3D

The following function specifies the binding of the factory for the LocalSpaceRectangular3D object class:

SRM_LSR3D_Create

Abstract Function:  Create

typedef SRM_Status_Code SRM_LSP_Create (

 

SRM_ORM

orm,

 

 

SRM_LocalSpaceRectangular3D

*new_srf

/* OUT */

);

The following method is used to specify the binding of the LocalSpaceRectangular3D object class:

SRM_LSR3D_GetSRFParameters

Abstract Method:  GetSRFParameters

typedef SRM_Status_Code SRM_LSR3D_GetSRFParameters (

 

SRM_Object_Reference

*this,

 

 

SRM_Local_Space_Rectangular_3D_Parameters

*parameters

/* OUT */

);

The following data type is used to specify the methods of the LocalSpaceRectangular3D object class:

SRM_LSR3D_Method_List

Abstract object class:  LocalSpaceRectangular3D

typedef struct {

SRM_ChangeCoordinate3DSRF

*ChangeCoordinate3DSRF;

SRM_ChangeCoordinate3DSRFObject

*ChangeCoordinate3DSRFObject;

SRM_ChangeDirectionSRF

*ChangeDirectionSRF;

SRM_ChangeDirectionSRFObject

*ChangeDirectionSRFObject;

SRM_CreateCoordinate3D

*CreateCoordinate3D;

SRM_CreateDirection

*CreateDirection;

SRM_Destroy

*Destroy;

SRM_EuclideanDistance3D

*EuclideanDistance3D;

SRM_Generating3D

*Generating3D;

SRM_GetCoordinate3DValues

*GetCoordinate3DValues;

SRM_GetCSCodes

*GetCSCodes;

SRM_GetDirectionValues

*GetDirectionValues;

SRM_GetExtendedValidRegion

*GetExtendedValidRegion;

SRM_GetORMCodes

*GetORMCodes;

SRM_GetSRFCodes

*GetSRFCodes;

SRM_GetValidRegion

*GetValidRegion;

SRM_InverseGenerating3D

*InverseGenerating3D;

SRM_SetExtendedValidRegion

*SetExtendedValidRegion;

SRM_SetValidRegion

*SetValidRegion;

} SRM_LSR3D_Method_List;

The following record type specifies the binding of the LocalSpaceRectangular3D object class:

SRM_LocalSpaceRectangular3D

Abstract object class:  LocalSpaceRectangular3D

typedef struct {

void

*state;

SRM_LSR3D_Method_List

*methods;

} SRM_LocalSpaceRectangular3D;

6.3.18 LocalTangentSpaceAzimuthalSpherical

The following function specifies the binding of the factory for the LocalTangentSpaceAzimuthalSpherical object class:

SRM_LTSAS_Create

Abstract Function:  Create

typedef SRM_Status_Code SRM_LTSAS_Create (

 

SRM_ORM

orm,

 

const

SRM_Local_Tangent_Space_Azimuthal_Parameters

parameters,

 

 

SRM_LocalTangentSpaceAzimuthalSpherical

*new_srf

/* OUT */

);

The following method is used to specify the binding of the LocalTangentSpaceAzimuthalSpherical object class:

SRM_LTSAS_GetSRFParameters

Abstract Method:  GetSRFParameters

typedef SRM_Status_Code SRM_LTSAS_GetSRFParameters (

 

SRM_Object_Reference

*this,

 

 

SRM_Local_Tangent_Parameters

*parameters

/* OUT */

);

The following data type is used to specify the methods of the LocalTangentSpaceAzimuthalSpherical object class:

SRM_LTSAS_Method_List

Abstract object class:  LocalTangentSpaceAzimuthalSpherical

typedef struct {

SRM_AssociateSurfaceCoordinateTPS

*AssociateSurfaceCoordinate;

SRM_ChangeCoordinate3DSRF

*ChangeCoordinate3DSRF;

SRM_ChangeCoordinate3DSRFObject

*ChangeCoordinate3DSRFObject;

SRM_ChangeDirectionSRF

*ChangeDirectionSRF;

SRM_ChangeDirectionSRFObject

*ChangeDirectionSRFObject;

SRM_CreateCoordinate3D

*CreateCoordinate3D;

SRM_CreateDirection

*CreateDirection;

SRM_CreateSurfaceCoordinateTPS

*CreateSurfaceCoordinate;

SRM_Destroy

*Destroy;

SRM_EuclideanDistance3D

*EuclideanDistance3D;

SRM_EuclideanDistanceTPS

*EuclideanDistanceTPS;

SRM_Generating3D

*Generating3D;

SRM_GetCoordinate3DValues

*GetCoordinate3DValues;

SRM_GetCSCodes

*GetCSCodes;

SRM_GetDirectionValues

*GetDirectionValues;

SRM_GetExtendedValidRegion

*GetExtendedValidRegion;

SRM_GetORMCodes

*GetORMCodes;

SRM_GetSRFCodes

*GetSRFCodes;

SRM_LTSAS_GetSRFParameters

*GetSRFParameters;

SRM_GetSurfaceCoordinateValuesTPS

*GetSurfaceCoordinateValues;

SRM_GetValidRegion

*GetValidRegion;

SRM_InverseGenerating3D

*InverseGenerating3D;

SRM_PromoteSurfaceCoordinateTPS

*PromoteSurfaceCoordinate;

SRM_SetExtendedValidRegion

*SetExtendedValidRegion;

SRM_SetValidRegion

*SetValidRegion;

} SRM_LTSAS_Method_List;

The following record type specifies the binding of the LocalTangentSpaceAzimuthalSpherical object class:

SRM_LocalTangentSpaceAzimuthalSpherical

Abstract object class:  LocalTangentSpaceAzimuthalSpherical

typedef struct {

void

*state;

SRM_LTSAS_Method_List

*methods;

} SRM_LocalTangentSpaceAzimuthalSpherical;

6.3.19 LocalTangentSpaceCylindrical

The following function specifies the binding of the factory for the LocalTangentSpaceCylindrical object class:

SRM_LTSC_Create

Abstract Function:  Create

typedef SRM_Status_Code SRM_LTSC_Create (

 

SRM_ORM

orm,

 

 

SRM_LocalTangentSpaceCylindrical

*new_srf

/* OUT */

);

The following method is used to specify the binding of the LocalTangentSpaceCylindrical object class:

SRM_LTSC_GetSRFParameters

Abstract Method:  GetSRFParameters

typedef SRM_Status_Code SRM_LTSC_GetSRFParameters (

 

SRM_Object_Reference

*this,

 

 

SRM_Local_Tangent_Parameters

**parameters

/* OUT */

);

The following data type is used to specify the methods of the LocalTangentSpaceCylindrical object class:

SRM_LTSC_Method_List

Abstract object class:  LocalTangentSpaceCylindrical

typedef struct {

SRM_AssociateSurfaceCoordinateTPS

*AssociateSurfaceCoordinate;

SRM_ChangeCoordinate3DSRF

*ChangeCoordinate3DSRF;

SRM_ChangeCoordinate3DSRFObject

*ChangeCoordinate3DSRFObject;

SRM_ChangeDirectionSRF

*ChangeDirectionSRF;

SRM_ChangeDirectionSRFObject

*ChangeDirectionSRFObject;

SRM_CreateCoordinate3D

*CreateCoordinate3D;

SRM_CreateDirection

*CreateDirection;

SRM_CreateSurfaceCoordinateTPS

*CreateSurfaceCoordinate;

SRM_Destroy

*Destroy;

SRM_EuclideanDistance3D

*EuclideanDistance3D;

SRM_EuclideanDistanceTPS

*EuclideanDistanceTPS;

SRM_Generating3D

*Generating3D;

SRM_GetCoordinate3DValues

*GetCoordinate3DValues;

SRM_GetCSCodes

*GetCSCodes;

SRM_GetDirectionValues

*GetDirectionValues;

SRM_GetExtendedValidRegion

*GetExtendedValidRegion;

SRM_GetORMCodes

*GetORMCodes;

SRM_GetSRFCodes

*GetSRFCodes;

SRM_LTSC_GetSRFParameters

*GetSRFParameters;

SRM_GetSurfaceCoordinateValuesTPS

*GetSurfaceCoordinateValues;

SRM_GetValidRegion

*GetValidRegion;

SRM_InverseGenerating3D

*InverseGenerating3D;

SRM_PromoteSurfaceCoordinateTPS

*PromoteSurfaceCoordinate;

SRM_SetExtendedValidRegion

*SetExtendedValidRegion;

SRM_SetValidRegion

*SetValidRegion;

} SRM_LTSC_Method_List;

The following record type specifies the binding of the LocalTangentSpaceCylindrical object class:

SRM_LocalTangentSpaceCylindrical

Abstract object class:  LocalTangentSpaceCylindrical

typedef struct {

void

*state;

SRM_LTSC_Method_List

*methods;

} SRM_LocalTangentSpaceCylindrical;

6.3.20 LocalTangentSpaceEuclidean

The following function specifies the binding of the factory for the LocalTangentSpaceEuclidean object class:

SRM_LTSE_Create

Abstract Function:  Create

typedef SRM_Status_Code SRM_LTSE_Create (

 

SRM_ORM

orm,

 

 

SRM_LocalTangentSpaceEuclidean

*new_srf

/* OUT */

);

The following method is used to specify the binding of the LocalTangentSpaceEuclidean object class:

SRM_LTSE_GetSRFParameters

Abstract Method:  GetSRFParameters

typedef SRM_Status_Code SRM_LTSE_GetSRFParameters (

 

SRM_Object_Reference

*this,

 

 

SRM_Local_Tangent_Space_Euclidean_Parameters

**parameters

/* OUT */

);

The following data type is used to specify the methods of the LocalTangentSpaceEuclidean object class:

SRM_LTSE_Method_List

Abstract object class:  LocalTangentSpaceEuclidean

typedef struct {

SRM_AssociateSurfaceCoordinateTPS

*AssociateSurfaceCoordinate;

SRM_ChangeCoordinate3DSRF

*ChangeCoordinate3DSRF;

SRM_ChangeCoordinate3DSRFObject

*ChangeCoordinate3DSRFObject;

SRM_ChangeDirectionSRF

*ChangeDirectionSRF;

SRM_ChangeDirectionSRFObject

*ChangeDirectionSRFObject;

SRM_CreateCoordinate3D

*CreateCoordinate3D;

SRM_CreateDirection

*CreateDirection;

SRM_CreateSurfaceCoordinateTPS

*CreateSurfaceCoordinate;

SRM_Destroy

*Destroy;

SRM_EuclideanDistance3D

*EuclideanDistance3D;

SRM_EuclideanDistanceTPS

*EuclideanDistanceTPS;

SRM_Generating3D

*Generating3D;

SRM_GetCoordinate3DValues

*GetCoordinate3DValues;

SRM_GetCSCodes

*GetCSCodes;

SRM_GetDirectionValues

*GetDirectionValues;

SRM_GetExtendedValidRegion

*GetExtendedValidRegion;

SRM_GetORMCodes

*GetORMCodes;

SRM_GetSRFCodes

*GetSRFCodes;

SRM_LTSE_GetSRFParameters

*GetSRFParameters;

SRM_GetSurfaceCoordinateValuesTPS

*GetSurfaceCoordinateValues;

SRM_GetValidRegion

*GetValidRegion;

SRM_InverseGenerating3D

*InverseGenerating3D;

SRM_PromoteSurfaceCoordinateTPS

*PromoteSurfaceCoordinate;

SRM_SetExtendedValidRegion

*SetExtendedValidRegion;

SRM_SetValidRegion

*SetValidRegion;

} SRM_LTSE_Method_List;

The following record type specifies the binding of the LocalTangentSpaceEuclidean object class:

SRM_LocalTangentSpaceEuclidean

Abstract object class:  LocalTangentSpaceEuclidean

typedef struct {

void

*state;

SRM_LTSE_Method_List

*methods;

} SRM_LocalTangentSpaceEuclidean;

6.3.21 Mercator

The following function specifies the binding of the factory for the Mercator object class:

SRM_M_Create

Abstract Function:  Create

typedef SRM_Status_Code SRM_M_Create (

 

SRM_ORM

orm,

 

 

SRM_Mercator

*new_srf

/* OUT */

);

The following method is used to specify the binding of the Mercator object class:

SRM_M_GetSRFParameters

Abstract Method:  GetSRFParameters

typedef SRM_Status_Code SRM_M_GetSRFParameters (

 

SRM_Object_Reference

*this,

 

 

SRM_Mercator_Parameters

*parameters

/* OUT */

);

The following data type is used to specify the methods of the Mercator object class:

SRM_M_Method_List

Abstract object class:  Mercator

typedef struct {

SRM_AssociateSurfaceCoordinateEH

*AssociateSurfaceCoordinate;

SRM_ChangeCoordinate3DSRF

*ChangeCoordinate3DSRF;

SRM_ChangeCoordinate3DSRFObject

*ChangeCoordinate3DSRFObject;

SRM_ChangeDirectionSRF

*ChangeDirectionSRF;

SRM_ChangeDirectionSRFObject

*ChangeDirectionSRFObject;

SRM_ConvergenceOfTheMeridian

*ConvergenceOfTheMeridian;

SRM_CreateCoordinate3D

*CreateCoordinate3D;

SRM_CreateDirection

*CreateDirection;

SRM_CreateLocalTangentPlaneEuclideanSRF

*CreateLocalTangentPlaneEuclideanSRF;

SRM_CreateSurfaceCoordinateEH

*CreateSurfaceCoordinate;

SRM_Destroy

*Destroy;

SRM_EuclideanDistance3D

*EuclideanDistance3D;

SRM_EuclideanDistanceEH

*EuclideanDistanceEH;

SRM_Generating3D

*Generating3D;

SRM_GeodesicDistance

*GeodesicDistance;

SRM_GetCoordinate3DValues

*GetCoordinate3DValues;

SRM_GetCSCode

*GetCSCode;

SRM_GetDirectionValues

*GetDirectionValues;

SRM_GetExtendedValidGeodeticRegion

*GetExtendedValidGeodeticRegion;

SRM_GetExtendedValidRegion

*GetExtendedValidRegion;

SRM_GetORMCodes

*GetORMCodes;

SRM_GetSRFCodes

*GetSRFCodes;

SRM_M_GetSRFParameters

*GetSRFParameters;

SRM_GetSurfaceCoordinateValuesEH

*GetSurfaceCoordinateValues;

SRM_GetValidGeodeticRegion

*GetValidGeodeticRegion;

SRM_GetValidRegion

*GetValidRegion;

SRM_InverseGenerating3D

*InverseGenerating3D;

SRM_MapAzimuth

*MapAzimuth;

SRM_PromoteSurfaceCoordinateEH

*PromoteSurfaceCoordinate;

SRM_PointScale

*PointScale;

SRM_SetExtendedValidGeodeticRegion

*SetExtendedValidGeodeticRegion;

SRM_SetExtendedValidRegion

*SetExtendedValidRegion;

SRM_SetValidGeodeticRegion

*SetValidGeodeticRegion;

SRM_SetValidRegion

*SetValidRegion;

SRM_VerticalOffset

*VerticalOffset;

} SRM_M_Method_List;

The following record type specifies the binding of the Mercator object class:

SRM_Mercator

Abstract object class:  Mercator

typedef struct {

void

*state;

SRM_M_Method_List

*methods;

} SRM_Mercator;

6.3.22 ObliqueMercatorSpherical

The following function specifies the binding of the factory for the ObliqueMercatorSpherical object class:

SRM_OM_Create

Abstract Function:  Create

typedef SRM_Status_Code SRM_OM_Create (

 

SRM_ORM

orm,

 

 

SRM_ObliqueMercator

*new_srf

/* OUT */

);

The following method is used to specify the binding of the ObliqueMercatorSpherical object class:

SRM_OM_GetSRFParameters

Abstract Method:  GetSRFParameters

typedef SRM_Status_Code SRM_OM_GetSRFParameters (

 

SRM_Object_Reference

*this,

 

 

SRM_Oblique_Mercator_Parameters

*parameters

/* OUT */

);

The following data type is used to specify the methods of the ObliqueMercatorSpherical object class:

SRM_OM_Method_List

Abstract object class:  ObliqueMercatorSpherical

typedef struct {

SRM_AssociateSurfaceCoordinateEH

*AssociateSurfaceCoordinate;

SRM_ChangeCoordinate3DSRF

*ChangeCoordinate3DSRF;

SRM_ChangeCoordinate3DSRFObject

*ChangeCoordinate3DSRFObject;

SRM_ChangeDirectionSRF

*ChangeDirectionSRF;

SRM_ChangeDirectionSRFObject

*ChangeDirectionSRFObject;

SRM_ConvergenceOfTheMeridian

*ConvergenceOfTheMeridian;

SRM_CreateCoordinate3D

*CreateCoordinate3D;

SRM_CreateDirection

*CreateDirection;

SRM_CreateLocalTangentPlaneEuclideanSRF

*CreateLocalTangentPlaneEuclideanSRF;

SRM_CreateSurfaceCoordinateEH

*CreateSurfaceCoordinate;

SRM_Destroy

*Destroy;

SRM_EuclideanDistance3D

*EuclideanDistance3D;

SRM_EuclideanDistanceEH

*EuclideanDistanceEH;

SRM_Generating3D

*Generating3D;

SRM_GeodesicDistance

*GeodesicDistance;

SRM_GetCoordinate3DValues

*GetCoordinate3DValues;

SRM_GetCSCode

*GetCSCode;

SRM_GetDirectionValues

*GetDirectionValues;

SRM_GetExtendedValidGeodeticRegion

*GetExtendedValidGeodeticRegion;

SRM_GetExtendedValidRegion

*GetExtendedValidRegion;

SRM_GetORMCodes

*GetORMCodes;

SRM_GetSRFCodes

*GetSRFCodes;

SRM_OM_GetSRFParameters

*GetSRFParameters;

SRM_GetSurfaceCoordinateValuesEH

*GetSurfaceCoordinateValues;

SRM_GetValidGeodeticRegion

*GetValidGeodeticRegion;

SRM_GetValidRegion

*GetValidRegion;

SRM_InverseGenerating3D

*InverseGenerating3D;

SRM_MapAzimuth

*MapAzimuth;

SRM_PromoteSurfaceCoordinateEH

*PromoteSurfaceCoordinate;

SRM_PointScale

*PointScale;

SRM_SetExtendedValidGeodeticRegion

*SetExtendedValidGeodeticRegion;

SRM_SetExtendedValidRegion

*SetExtendedValidRegion;

SRM_SetValidGeodeticRegion

*SetValidGeodeticRegion;

SRM_SetValidRegion

*SetValidRegion;

SRM_VerticalOffset

*VerticalOffset;

} SRM_OM_Method_List;

The following record type specifies the binding of the ObliqueMercatorSpherical object class:

SRM_ObliqueMercatorSpherical

Abstract object class:  ObliqueMercatorSpherical

typedef struct {

void

*state;

SRM_OM_Method_List

*methods;

} SRM_ObliqueMercatorSpherical;

6.3.23 Planetodetic

The following function specifies the binding of the factory for the Planetodetic object class:

SRM_PD_Create

Abstract Function:  Create

typedef SRM_Status_Code SRM_PD_Create (

 

SRM_ORM

orm,

 

 

SRM_Planetodetic

*new_srf

/* OUT */

);

The following data type is used to specify the methods of the Planetodetic object class:

SRM_PD_Method_List

Abstract object class:  Planetodetic

typedef struct {

SRM_AssociateSurfaceCoordinateEH

*AssociateSurfaceCoordinate;

SRM_ChangeCoordinate3DSRF

*ChangeCoordinate3DSRF;

SRM_ChangeCoordinate3DSRFObject

*ChangeCoordinate3DSRFObject;

SRM_ChangeDirectionSRF

*ChangeDirectionSRF;

SRM_ChangeDirectionSRFObject

*ChangeDirectionSRFObject;

SRM_CreateCoordinate3D

*CreateCoordinate3D;

SRM_CreateDirection

*CreateDirection;

SRM_CreateLocalTangentSpaceEuclideanSRF

*CreateLocalTangentSpaceEuclideanSRF;

SRM_CreateSurfaceCoordinateEH

*CreateSurfaceCoordinate;

SRM_Destroy

*Destroy;

SRM_EuclideanDistance3D

*EuclideanDistance3D;

SRM_EuclideanDistanceEH

*EuclideanDistanceEH;

SRM_Generating3D

*Generating3D;

SRM_GeodesicDistance

*GeodesicDistance;

SRM_GetCoordinate3DValues

*GetCoordinate3DValues;

SRM_GetCSCodes

*GetCSCodes;

SRM_GetDirectionValues

*GetDirectionValues;

SRM_GetExtendedValidRegion

*GetExtendedValidRegion;

SRM_GetORMCodes

*GetORMCodes;

SRM_GetSRFCodes

*GetSRFCodes;

SRM_GetSurfaceCoordinateValuesEH

*GetSurfaceCoordinateValues;

SRM_GetValidRegion

*GetValidRegion;

SRM_InverseGenerating3D

*InverseGenerating3D;

SRM_PromoteSurfaceCoordinateEH

*PromoteSurfaceCoordinate;

SRM_SetExtendedValidRegion

*SetExtendedValidRegion;

SRM_SetValidRegion

*SetValidRegion;

SRM_VerticalOffset

*VerticalOffset;

} SRM_PD_Method_List;

The following record type specifies the binding of the Planetodetic object class:

SRM_Planetodetic

Abstract object class:  Planetodetic

typedef struct {

void

*state;

SRM_PD_Method_List

*methods;

} SRM_Planetodetic;

6.3.24 PolarStereographic

The following function specifies the binding of the factory for the PolarStereographic object class:

SRM_PS_Create

Abstract Function:  Create

typedef SRM_Status_Code SRM_PS_Create (

 

SRM_ORM

orm,

 

const

SRM_Polar_Stereographic_Parameters

parameters,

 

 

SRM_PolarStereographic

*new_srf

/* OUT */

);

The following method is used to specify the binding of the PolarStereographic object class:

SRM_PS_GetSRFParameters

Abstract Method:  GetSRFParameters

typedef SRM_Status_Code SRM_PS_GetSRFParameters (

 

SRM_Object_Reference

*this,

 

 

SRM_Polar_Stereographic_Parameters

*parameters

/* OUT */

);

The following data type is used to specify the methods of the PolarStereographic object class:

SRM_PS_Method_List

Abstract object class:  PolarStereographic

typedef struct {

SRM_AssociateSurfaceCoordinateEH

*AssociateSurfaceCoordinate;

SRM_ChangeCoordinate3DSRF

*ChangeCoordinate3DSRF;

SRM_ChangeCoordinate3DSRFObject

*ChangeCoordinate3DSRFObject;

SRM_ChangeDirectionSRF

*ChangeDirectionSRF;

SRM_ChangeDirectionSRFObject

*ChangeDirectionSRFObject;

SRM_ConvergenceOfTheMeridian

*ConvergenceOfTheMeridian;

SRM_CreateCoordinate3D

*CreateCoordinate3D;

SRM_CreateDirection

*CreateDirection;

SRM_CreateLocalTangentPlaneEuclideanSRF

*CreateLocalTangentPlaneEuclideanSRF;

SRM_CreateSurfaceCoordinateEH

*CreateSurfaceCoordinate;

SRM_Destroy

*Destroy;

SRM_EuclideanDistance3D

*EuclideanDistance3D;

SRM_EuclideanDistanceEH

*EuclideanDistanceEH;

SRM_Generating3D

*Generating3D;

SRM_GeodesicDistance

*GeodesicDistance;

SRM_GetCoordinate3DValues

*GetCoordinate3DValues;

SRM_GetCSCode

*GetCSCode;

SRM_GetDirectionValues

*GetDirectionValues;

SRM_GetExtendedValidGeodeticRegion

*GetExtendedValidGeodeticRegion;

SRM_GetExtendedValidRegion

*GetExtendedValidRegion;

SRM_GetORMCodes

*GetORMCodes;

SRM_GetSRFCodes

*GetSRFCodes;

SRM_PS_GetSRFParameters

*GetSRFParameters;

SRM_GetSurfaceCoordinateValuesEH

*GetSurfaceCoordinateValues;

SRM_GetValidGeodeticRegion

*GetValidGeodeticRegion;

SRM_GetValidRegion

*GetValidRegion;

SRM_InverseGenerating3D

*InverseGenerating3D;

SRM_MapAzimuth

*MapAzimuth;

SRM_PromoteSurfaceCoordinateEH

*PromoteSurfaceCoordinate;

SRM_PointScale

*PointScale;

SRM_SetExtendedValidGeodeticRegion

*SetExtendedValidGeodeticRegion;

SRM_SetExtendedValidRegion

*SetExtendedValidRegion;

SRM_SetValidGeodeticRegion

*SetValidGeodeticRegion;

SRM_SetValidRegion

*SetValidRegion;

SRM_VerticalOffset

*VerticalOffset;

} SRM_PS_Method_List;

The following record type specifies the binding of the PolarStereographic object class:

SRM_PolarStereographic

Abstract object class:  PolarStereographic

typedef struct {

void

*state;

SRM_PS_Method_List

*methods;

} SRM_PolarStereographic;

6.3.25 Position2D

The following data type is used to specify the methods of the Position2D object class:

SRM_Position2D_Method_List

Abstract object class:  Position2D

typedef struct {

SRM_Destroy

*destroy;

} SRM_Position2D_Method_List;

SRM_Position2D

Abstract object class:  Position2D

typedef struct {

void

*state;

SRM_Position2D_Method_List

*methods;

} SRM_Position2D;

6.3.26 Position3D

The following data type is used to specify the methods of the Position3D object class:

SRM_Position3D_Method_List

Abstract object class:  Position3D

typedef struct {

SRM_Destroy

*destroy;

} SRM_Position3D_Method_List;

SRM_Position3D

Abstract object class:  Position3D

typedef struct {

void

*state;

SRM_Position3D_Method_List

*methods;

} SRM_Position3D;

6.3.27 SolarEcliptic

The following function specifies the binding of the factory for the SolarEcliptic object class:

SRM_SE_Create

Abstract Function:  Create

typedef SRM_Status_Code SRM_SE_Create (

 

SRM_ORM

orm,

 

 

SRM_SolarEcliptic

*new_srf

/* OUT */

);

The following data type is used to specify the methods of the SolarEcliptic object class:

SRM_SE_Method_List

Abstract object class:  SolarEcliptic

typedef struct {

SRM_ChangeCoordinate3DSRF

*ChangeCoordinate3DSRF;

SRM_ChangeCoordinate3DSRFObject

*ChangeCoordinate3DSRFObject;

SRM_ChangeDirectionSRF

*ChangeDirectionSRF;

SRM_ChangeDirectionSRFObject

*ChangeDirectionSRFObject;

SRM_CreateCoordinate3D

*CreateCoordinate3D;

SRM_CreateDirection

*CreateDirection;

SRM_Destroy

*Destroy;

SRM_EuclideanDistance3D

*EuclideanDistance3D;

SRM_Generating3D

*Generating3D;

SRM_GetCoordinate3DValues

*GetCoordinate3DValues;

SRM_GetCSCodes

*GetCSCodes;

SRM_GetDirectionValues

*GetDirectionValues;

SRM_GetExtendedValidRegion

*GetExtendedValidRegion;

SRM_GetORMCodes

*GetORMCodes;

SRM_GetSRFCodes

*GetSRFCodes;

SRM_GetValidRegion

*GetValidRegion;

SRM_InverseGenerating3D

*InverseGenerating3D;

SRM_SetExtendedValidRegion

*SetExtendedValidRegion;

SRM_SetValidRegion

*SetValidRegion;

} SRM_SE_Method_List;

The following record type specifies the binding of the SolarEcliptic object class:

SRM_SolarEcliptic

Abstract object class:  SolarEcliptic

typedef struct {

void

*state;

SRM_SE_Method_List

*methods;

} SRM_SolarEcliptic;

6.3.28 SolarEquatorial

The following function specifies the binding of the factory for the SolarEquatorial object class:

SRM_SEQ_Create

Abstract Function:  Create

typedef SRM_Status_Code SRM_SEQ_Create (

 

SRM_ORM

orm,

 

 

SRM_SolarEquatorial

*new_srf

/* OUT */

);

The following data type is used to specify the methods of the SolarEquatorial object class:

SRM_SEQ_Method_List

Abstract object class:  SolarEquatorial

typedef struct {

SRM_ChangeCoordinate3DSRF

*ChangeCoordinate3DSRF;

SRM_ChangeCoordinate3DSRFObject

*ChangeCoordinate3DSRFObject;

SRM_ChangeDirectionSRF

*ChangeDirectionSRF;

SRM_ChangeDirectionSRFObject

*ChangeDirectionSRFObject;

SRM_CreateCoordinate3D

*CreateCoordinate3D;

SRM_CreateDirection

*CreateDirection;

SRM_Destroy

*Destroy;

SRM_EuclideanDistance3D

*EuclideanDistance3D;

SRM_Generating3D

*Generating3D;

SRM_GetCoordinate3DValues

*GetCoordinate3DValues;

SRM_GetCSCodes

*GetCSCodes;

SRM_GetDirectionValues

*GetDirectionValues;

SRM_GetExtendedValidRegion

*GetExtendedValidRegion;

SRM_GetORMCodes

*GetORMCodes;

SRM_GetSRFCodes

*GetSRFCodes;

SRM_GetValidRegion

*GetValidRegion;

SRM_InverseGenerating3D

*InverseGenerating3D;

SRM_SetExtendedValidRegion

*SetExtendedValidRegion;

SRM_SetValidRegion

*SetValidRegion;

} SRM_SEQ_Method_List;

The following record type specifies the binding of the SolarEquatorial object class:

SRM_SolarEquatorial

Abstract object class:  SolarEquatorial

typedef struct {

void

*state;

SRM_SEQ_Method_List

*methods;

} SRM_SolarEquatorial;

6.3.29 SolarMagneticDipole

The following function specifies the binding of the factory for the SolarMagneticDipole object class:

SRM_SMD_Create

Abstract Function:  Create

typedef SRM_Status_Code SRM_SMD_Create (

 

SRM_ORM

orm,

 

 

SRM_SolarMagneticDipole

*new_srf

/* OUT */

);

The following data type is used to specify the methods of the SolarMagneticDipole object class:

SRM_SMD_Method_List

Abstract object class:  SolarMagneticDipole

typedef struct {

SRM_ChangeCoordinate3DSRF

*ChangeCoordinate3DSRF;

SRM_ChangeCoordinate3DSRFObject

*ChangeCoordinate3DSRFObject;

SRM_ChangeDirectionSRF

*ChangeDirectionSRF;

SRM_ChangeDirectionSRFObject

*ChangeDirectionSRFObject;

SRM_CreateCoordinate3D

*CreateCoordinate3D;

SRM_CreateDirection

*CreateDirection;

SRM_Destroy

*Destroy;

SRM_EuclideanDistance3D

*EuclideanDistance3D;

SRM_Generating3D

*Generating3D;

SRM_GetCoordinate3DValues

*GetCoordinate3DValues;

SRM_GetCSCodes

*GetCSCodes;

SRM_GetDirectionValues

*GetDirectionValues;

SRM_GetExtendedValidRegion

*GetExtendedValidRegion;

SRM_GetORMCodes

*GetORMCodes;

SRM_GetSRFCodes

*GetSRFCodes;

SRM_GetValidRegion

*GetValidRegion;

SRM_InverseGenerating3D

*InverseGenerating3D;

SRM_SetExtendedValidRegion

*SetExtendedValidRegion;

SRM_SetValidRegion

*SetValidRegion;

} SRM_SMD_Method_List;

The following record type specifies the binding of the SolarMagneticDipole object class:

SRM_SolarMagneticDipole

Abstract object class:  SolarMagneticDipole

typedef struct {

void

*state;

SRM_SMD_Method_List

*methods;

} SRM_SolarMagneticDipole;

6.3.30 SolarMagneticEcliptic

The following function specifies the binding of the factory for the SolarMagneticEcliptic object class:

SRM_SME_Create

Abstract Function:  Create

typedef SRM_Status_Code SRM_SME_Create (

 

SRM_ORM

orm,

 

 

SRM_SolarMagneticEcliptic

*new_srf

/* OUT */

);

The following data type is used to specify the methods of the SolarMagneticEcliptic object class:

SRM_SME_Method_List

Abstract object class:  SolarMagneticEcliptic

typedef struct {

SRM_ChangeCoordinate3DSRF

*ChangeCoordinate3DSRF;

SRM_ChangeCoordinate3DSRFObject

*ChangeCoordinate3DSRFObject;

SRM_ChangeDirectionSRF

*ChangeDirectionSRF;

SRM_ChangeDirectionSRFObject

*ChangeDirectionSRFObject;

SRM_CreateCoordinate3D

*CreateCoordinate3D;

SRM_CreateDirection

*CreateDirection;

SRM_Destroy

*Destroy;

SRM_EuclideanDistance3D

*EuclideanDistance3D;

SRM_Generating3D

*Generating3D;

SRM_GetCoordinate3DValues

*GetCoordinate3DValues;

SRM_GetCSCodes

*GetCSCodes;

SRM_GetDirectionValues

*GetDirectionValues;

SRM_GetExtendedValidRegion

*GetExtendedValidRegion;

SRM_GetORMCodes

*GetORMCodes;

SRM_GetSRFCodes

*GetSRFCodes;

SRM_GetValidRegion

*GetValidRegion;

SRM_InverseGenerating3D

*InverseGenerating3D;

SRM_SetExtendedValidRegion

*SetExtendedValidRegion;

SRM_SetValidRegion

*SetValidRegion;

} SRM_SME_Method_List;

The following record type specifies the binding of the SolarMagneticEcliptic object class:

SRM_SolarMagneticEcliptic

Abstract object class:  SolarMagneticEcliptic

typedef struct {

void

*state;

SRM_SME_Method_List

*methods;

} SRM_SolarMagneticEcliptic;

6.3.31 SurfaceCoordinate

The following data type is used to specify the methods of the SurfaceCoordinate object class:

SRM_SurfaceCoordinate_Method_List

Abstract object class:  SurfaceCoordinate

typedef struct {

SRM_Destroy

*destroy;

} SRM_SurfaceCoordinate_Method_List;

SRM_SurfaceCoordinate

Abstract object class:  SurfaceCoordinate

typedef struct {

void

*state;

SRM_SurfaceCoordinate_Method_List

*methods;

} SRM_SurfaceCoordinate;

6.3.32 TransverseMercator

The following function specifies the binding of the factory for the TransverseMercator object class:

SRM_TM_Create

Abstract Function:  Create

typedef SRM_Status_Code SRM_TM_Create (

 

SRM_ORM

orm,

 

 

SRM_ObliqueMercator

*new_srf

/* OUT */

);

The following method is used to specify the binding of the TransverseMercator object class:

SRM_TM_GetSRFParameters

Abstract Method:  GetSRFParameters

typedef SRM_Status_Code SRM_TM_GetSRFParameters (

 

SRM_Object_Reference

*this,

 

 

SRM_Mercator_Parameters

*parameters

/* OUT */

);

The following data type is used to specify the methods of the TransverseMercator object class:

SRM_TM_Method_List

Abstract object class:  TransverseMercator

typedef struct {

SRM_AssociateSurfaceCoordinateEH

*AssociateSurfaceCoordinate;

SRM_ChangeCoordinate3DSRF

*ChangeCoordinate3DSRF;

SRM_ChangeCoordinate3DSRFObject

*ChangeCoordinate3DSRFObject;

SRM_ChangeDirectionSRF

*ChangeDirectionSRF;

SRM_ChangeDirectionSRFObject

*ChangeDirectionSRFObject;

SRM_ConvergenceOfTheMeridian

*ConvergenceOfTheMeridian;

SRM_CreateCoordinate3D

*CreateCoordinate3D;

SRM_CreateDirection

*CreateDirection;

SRM_CreateLocalTangentPlaneEuclideanSRF

*CreateLocalTangentPlaneEuclideanSRF;

SRM_CreateSurfaceCoordinateEH

*CreateSurfaceCoordinate;

SRM_Destroy

*Destroy;

SRM_EuclideanDistance3D

*EuclideanDistance3D;

SRM_EuclideanDistanceEH

*EuclideanDistanceEH;

SRM_Generating3D

*Generating3D;

SRM_GeodesicDistance

*GeodesicDistance;

SRM_GetCoordinate3DValues

*GetCoordinate3DValues;

SRM_GetCSCode

*GetCSCode;

SRM_GetDirectionValues

*GetDirectionValues;

SRM_GetExtendedValidGeodeticRegion

*GetExtendedValidGeodeticRegion;

SRM_GetExtendedValidRegion

*GetExtendedValidRegion;

SRM_GetORMCodes

*GetORMCodes;

SRM_GetSRFCodes

*GetSRFCodes;

SRM_TM_GetSRFParameters

*GetSRFParameters;

SRM_GetSurfaceCoordinateValuesEH

*GetSurfaceCoordinateValues;

SRM_GetValidGeodeticRegion

*GetValidGeodeticRegion;

SRM_GetValidRegion

*GetValidRegion;

SRM_InverseGenerating3D

*InverseGenerating3D;

SRM_MapAzimuth

*MapAzimuth;

SRM_PromoteSurfaceCoordinateEH

*PromoteSurfaceCoordinate;

SRM_PointScale

*PointScale;

SRM_SetExtendedValidGeodeticRegion

*SetExtendedValidGeodeticRegion;

SRM_SetExtendedValidRegion

*SetExtendedValidRegion;

SRM_SetValidGeodeticRegion

*SetValidGeodeticRegion;

SRM_SetValidRegion

*SetValidRegion;

SRM_VerticalOffset

*VerticalOffset;

} SRM_TM_Method_List;

The following record type specifies the binding of the TransverseMercator object class:

SRM_TransverseMercator

Abstract object class:  TransverseMercator

typedef struct {

void

*state;

SRM_TM_Method_List

*methods;

} SRM_TransverseMercator;

6.4 Creation function for standard SRFs

6.4.1 Overview

There are generic creation functions that are invoked to create an instance of a standard SRF or a member of a standard SRF set. The result of invoking a creation function is to return an instance of an object class defined in 6.3 SRM concrete object classes that has its state set as required by the specified SRF code.

6.4.2 CreateSRFSetMember

The following specifies the binding of the CreateSRFSetMember function:

SRM_CreateSRFSetMember

Abstract Function:  CreateSRFSetMember

typedef SRM_Status_Code SRM_CreateSRFSetMember (

 

SRM_SRFS_Code

srfs_code,

 

 

SRM_SRFS_Member_Code

srf_member_code,

 

 

SRM_ORM

orm,

 

 

SRM_Object_Reference

*new_srf

/* OUT */

);

The object returned by the above function shall be an instance of one of the concrete SRF object classes specified in 6.3 SRM Concrete object classes and shall represent a single member of the specified SRF set.

6.4.3 CreateStandardSRF

The following specifies the binding of the CreateStandardSRF function:

SRM_CreateStandardSRF

Abstract Function:  Create

typedef SRM_Status_Code SRM_CreateStandardSRF (

 

SRM_SRF_Code

srf_code,

 

 

SRM_Object_Reference

*new_srf

/* OUT */

);

The object returned by the above function shall be an instance of one of the concrete SRF object classes specified in 6.3 SRM Concrete object classes.

http://www.iso.ch/iso/en/ittf/PubliclyAvailableStandards/ISO_IEC_18042-4_Ed1.html