/////////////////////////////////////////////////////////////////////////////// // Copyright (C) 2002-2025, Open Design Alliance (the "Alliance"). // All rights reserved. // // This software and its documentation and related materials are owned by // the Alliance. The software may only be incorporated into application // programs owned by members of the Alliance, subject to a signed // Membership Agreement and Supplemental Software License Agreement with the // Alliance. The structure and organization of this software are the valuable // trade secrets of the Alliance and its suppliers. The software is also // protected by copyright law and international treaty provisions. Application // programs incorporating this software must include the following statement // with their copyright notices: // // This application incorporates Open Design Alliance software pursuant to a license // agreement with Open Design Alliance. // Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance. // All rights reserved. // // By use of this software, its documentation or related materials, you // acknowledge and accept the above terms. /////////////////////////////////////////////////////////////////////////////// #ifndef _ODSPATIALREFERENCE_ODSPATIALREFERENCE_INCLUDED_ #define _ODSPATIALREFERENCE_ODSPATIALREFERENCE_INCLUDED_ #include "OdSpatialReferenceExport.h" #include "RxObject.h" #include "OdArray.h" #include "OdSpatialReferenceDefine.h" namespace OdSpatialReference { /** \details This enumeration indicates the type of a coordinate reference system. */ enum CoordinateReferenceSystemType { /** The coordinate system is not set. */ kTypeUnknown = 0, /** The coordinate system is arbitrary. */ kTypeArbitrary = 1, /** The coordinate system is geographic. */ kTypeGeographic = 2, /** The coordinate system is projected. */ kTypeProjected = 3 }; /** \details This enumeration indicates the type of a projection parameter. */ enum ProjectionParameterType { /** Not used. */ kProjectionParameterNotUsed = 0, /** Central Meridian. */ kProjectionParameterCntmer = 1, /** Northern Standard Parallel. */ kProjectionParameterNstdpll = 2, /** Southern Standard Parallel. */ kProjectionParameterSstdpll = 3, /** Standard Parallel. */ kProjectionParameterStdpll = 4, /** First Great Circle Point Longitude. */ kProjectionParameterGcp1lng = 5, /** First Great Circle Point Latitude. */ kProjectionParameterGcp1lat = 6, /** Second Great Circle Point Longitude. */ kProjectionParameterGcp2lng = 7, /** Second Great Circle Point Latitude. */ kProjectionParameterGcp2lat = 8, /** Great Circle Point Longitude. */ kProjectionParameterGcplng = 9, /** Great Circle Point Latitude. */ kProjectionParameterGcplat = 10, /** Great Circle Azimuth. */ kProjectionParameterGcazm = 11, /** Y axis azimuth. */ kProjectionParameterYaxisaz = 12, /** Eastern Standard Meridian. */ kProjectionParameterEstdmer = 13, /** Northern Parallel. */ kProjectionParameterNparall = 14, /** Southern Parallel. */ kProjectionParameterSparall = 15, /** First pole longitude. */ kProjectionParameterP1lng = 16, /** First pole latitude. */ kProjectionParameterP1lat = 17, /** Second pole longitude. */ kProjectionParameterP2lng = 18, /** Second pole latitude. */ kProjectionParameterP2lat = 19, /** Distance between the poles. */ kProjectionParameterAdp1p2 = 20, /** Angular distance to the first standard parallel. */ kProjectionParameterAdsp1 = 21, /** Angular distance to the second standard parallel. */ kProjectionParameterAdsp2 = 22, /** Complex Parameter A (n). */ kProjectionParameterCmplxan = 23, /** Complex Parameter B (n). */ kProjectionParameterCmplxbn = 24, /** Western end of Longitude range. */ kProjectionParameterWestll = 25, /** Eastern end of Longitude range. */ kProjectionParameterEastll = 26, /** UTM Zone Number. */ kProjectionParameterUtmzn = 27, /** North/South Hemisphere. */ kProjectionParameterHsns = 28, /** Average Geoid Height. */ kProjectionParameterGhgt = 29, /** Average Elevation. */ kProjectionParameterAelev = 30, /** Oblique Pole Longitude. */ kProjectionParameterPolelng = 31, /** Oblique Pole Latitude. */ kProjectionParameterPolelat = 32, /** Oblique Cone Standard Parallel. */ kProjectionParameterOstdpll = 33, /** Standard Circle Latitude. */ kProjectionParameterStdcir = 34, /** Affine A0 Coefficient. */ kProjectionParameterAfa0 = 35, /** Affine B0 Coefficient. */ kProjectionParameterAfb0 = 36, /** Affine A1 Coefficient. */ kProjectionParameterAfa1 = 37, /** Affine A2 Coefficient. */ kProjectionParameterAfa2 = 38, /** Affine B1 Coefficient. */ kProjectionParameterAfb1 = 39, /** Affine B2 Coefficient. */ kProjectionParameterAfb2 = 40, /** Normal Parallel. */ kProjectionParameterNrmlpll = 41, /** Danish System 24 Region. */ kProjectionParameterDenrgn = 42, /** Skew Azimuth at Rectified Origin. */ kProjectionParameterSkwazm = 43, /** X Coordinate of Scale/Rotate Origin. */ kProjectionParameterSclrotorgx = 44, /** Y Coordinate of Scale/Rotate Origin. */ kProjectionParameterSclrotorgy = 45, /** Cartesian Scale Factor. */ kProjectionParameterNrthscl = 46, /** Cartesian Rotation Angle. */ kProjectionParameterNrthrot = 47, /** Ellipsoid scaling factor. */ kProjectionParameterEllipsoidScale = 48 }; /** \details This enumeration represents the linear or angular unit. */ enum UnitType { /** Unknown unit type. */ kUnitTypeUnknown = 0, /** Linear unit type. */ kUnitTypeLinear = 1, /** Angular unit type. */ kUnitTypeAngular = 2 }; /** \details This enumeration represents the unit code. */ enum UnitCode { /** Unknown unit code. */ kUnitUnknown = 0, /** Meter. */ kUnitMeter = 1, /** Foot. */ kUnitFoot = 2, /** Inch. */ kUnitInch = 3, /** Foot. */ kUnitIFoot = 4, /** ClarkeFoot. */ kUnitClarkeFoot = 5, /** IInch. */ kUnitIInch = 6, /** Centimeter. */ kUnitCentimeter = 7, /** Kilometer. */ kUnitKilometer = 8, /** Yard. */ kUnitYard = 9, /** SearsYard. */ kUnitSearsYard = 10, /** Mile. */ kUnitMile = 11, /** IYard. */ kUnitIYard = 12, /** IMile. */ kUnitIMile = 13, /** Knot. */ kUnitKnot = 14, /** NautM. */ kUnitNautM = 15, /** Lat-66. */ kUnitLat66 = 16, /** Lat-83. */ kUnitLat83 = 17, /** Decimeter. */ kUnitDecimeter = 18, /** Millimeter. */ kUnitMillimeter = 19, /** Dekameter. */ kUnitDekameter = 20, /** Hectometer. */ kUnitHectometer = 21, /** GermanMeter. */ kUnitGermanMeter = 22, /** CaGrid. */ kUnitCaGrid = 23, /** ClarkeChain. */ kUnitClarkeChain = 24, /** GunterChain. */ kUnitGunterChain = 25, /** BenoitChain. */ kUnitBenoitChain = 26, /** SearsChain. */ kUnitSearsChain = 27, /** ClarkeLink. */ kUnitClarkeLink = 28, /** GunterLink. */ kUnitGunterLink = 29, /** BenoitLink. */ kUnitBenoitLink = 30, /** SearsLink. */ kUnitSearsLink = 31, /** Rod. */ kUnitRod = 32, /** Perch. */ kUnitPerch = 33, /** Pole. */ kUnitPole = 34, /** Furlong. */ kUnitFurlong = 35, /** Rood. */ kUnitRood = 36, /** CapeFoot. */ kUnitCapeFoot = 37, /** Brealey. */ kUnitBrealey = 38, /** SearsFoot. */ kUnitSearsFoot = 39, /** GoldCoastFoot. */ kUnitGoldCoastFoot = 40, /** MicroInch. */ kUnitMicroInch = 41, /** IndianYard. */ kUnitIndianYard = 42, /** IndianFoot. */ kUnitIndianFoot = 43, /** IndianFt37. */ kUnitIndianFt37 = 44, /** IndianFt62. */ kUnitIndianFt62 = 45, /** IndianFt75. */ kUnitIndianFt75 = 46, /** IndianYd37. */ kUnitIndianYd37 = 47, /** Decameter. */ kUnitDecameter = 48, /** InternationalChain. */ kUnitInternationalChain = 49, /** InternationalLink. */ kUnitInternationalLink = 50, /** BrFootTrunc. */ kUnitBrFootTrunc = 51, /** BrChainTrunc. */ kUnitBrChainTrunc = 52, /** BrLinkTrunc. */ kUnitBrLinkTrunc = 53, /** Degree. */ kUnitDegree = 1001, /** Grad. */ kUnitGrad = 1002, /** Grade. */ kUnitGrade = 1003, /** MapInfo. */ kUnitMapInfo = 1004, /** Mil. */ kUnitMil = 1005, /** Minute. */ kUnitMinute = 1006, /** Radian. */ kUnitRadian = 1007, /** Second. */ kUnitSecond = 1008, /** Decisec. */ kUnitDecisec = 1009, /** Centisec. */ kUnitCentisec = 1010, /** Millisec. */ kUnitMillisec = 1011, }; /** \details This enumeration represents the coordinate reference system projection method types. */ enum ProjectionCode { /** Unknown projection code. */ kProjectionCodeUnknown = 0, /** Albers equal-area conic projection. */ kProjectionCodeAlber = 4, /** Azimuthal equidistant projection (elevated ellipsoid). */ kProjectionCodeAzede = 59, /** Lambert azimuthal equal-area projection. */ kProjectionCodeAzmea = 11, /** Lambert azimuthal equidistant projection. */ kProjectionCodeAzmed = 7, /** Bipolar oblique conformal conic projection. */ kProjectionCodeBipolar = 31, /** Bonne Pseudo Conical projection. */ kProjectionCodeBonne = 24, /** Cassini projection. */ kProjectionCodeCassini = 22, /** Eckert pseudocylindrical projection (number IV). */ kProjectionCodeEckert4 = 25, /** Eckert pseudocylindrical projection (number VI). */ kProjectionCodeEckert6 = 26, /** Equidistant conic projection (conic projection). */ kProjectionCodeEdcnc = 12, /** Equidistant cylindrical projection (spherical only). */ kProjectionCodeEdcyl = 20, /** Gauss-Kruger: Transverse Mercator projection without scale reduction parameter. */ kProjectionCodeGaussK = 46, /** Gnomonic projection. */ kProjectionCodeGnomonic = 19, /** Goode homolosine projection. */ kProjectionCodeGoode = 28, /** Unrectified Hotine Oblique Mercator Projection. Single point form. */ kProjectionCodeHom1uv = 1281, /** Rectified Hotine Oblique Mercator Projection. Single poin form. */ kProjectionCodeHom1xy = 1282, /** Unrectified Hotine Oblique Mercator Projection. Two point form. */ kProjectionCodeHom2uv = 1283, /** Rectified Hotine Oblique Mercator Projection. Two point form. */ kProjectionCodeHom2xy = 1284, /** Original Krovak projection. */ kProjectionCodeKrovak = 47, /** Krovak projection includes 1995 adjustment. */ kProjectionCodeKrvk95 = 51, /** Produces (processes) latitude and longitude. */ kProjectionCodeLL = 1, /** Single standard parallel variation of the Lambert Conformal Conic projection. */ kProjectionCodeLm1sp = 36, /** Double standard parallel variation of the Lambert Conformal Conic projection. */ kProjectionCodeLm2sp = 37, /** Belgian variation of the Lambert Conformal Conic projection. */ kProjectionCodeLmblg = 38, /** Lambert Tangential Conformal Conic projection. */ kProjectionCodeLmtan = 8, /** Miller cylindrical projection. */ kProjectionCodeMiller = 13, /** Minnesota DOT variation of the Lambert Conformal Conic projection. */ kProjectionCodeMndotl = 41, /** Minnesota DOT variation of the Transverse Mercator projection. */ kProjectionCodeMndott = 42, /** Lallemand IMW Modified Polyconic projection. */ kProjectionCodeModpc = 10, /** Mollweide projection. */ kProjectionCodeMollweid = 27, /** Mercator Cylindrical projection. */ kProjectionCodeMrcat = 6, /** Standard Mercator projection with a scale reduction factor instead of a standard parallel. */ kProjectionCodeMrcatK = 49, /** Modified Stereographic projection. */ kProjectionCodeMstero = 15, /** Normal aspect. Equal-area Cylindrical projection. */ kProjectionCodeNeacyl = 29, /** Non-Earth projection. */ kProjectionCodeNerth = 55, /** New Zealand National Grid. */ kProjectionCodeNzealand = 16, /** Oblique Mercator projection. */ kProjectionCodeOblqM = 5, /** Oblique Cylindrical projection. */ kProjectionCodeObqcyl = 56, /** Orthographic projection. */ kProjectionCodeOrtho = 18, /** Transverse Mercator projection with the OSTN02 grid shift tacked on. */ kProjectionCodeOstn02 = 60, /** Transverse Mercator projection with the OSTN97 grid shift tacked on. */ kProjectionCodeOstn97 = 58, /** Oblique Stereographic projection. */ kProjectionCodeOstro = 34, /** Hassler American Polyconic projection. */ kProjectionCodePlycn = 9, /** Polar Stereographic projection. */ kProjectionCodePstro = 33, /** Polar Stereographic projection with standard latitude. */ kProjectionCodePstrosl = 53, /** Hotine Oblique Mercator (variant B) projection. */ kProjectionCodeRskew = 1285, /** Rectified Skew Orthomorphic projection, false origin and azimuth at center. */ kProjectionCodeRskewc = 1286, /** Rectified Skew Orthomorphic projection. */ kProjectionCodeRskewo = 1287, /** Robinson Cylindrical projection. */ kProjectionCodeRobinson = 23, /** Sinusoidal projection. */ kProjectionCodeSinus = 17, /** Transverse Mercator south oriented projection. */ kProjectionCodeSotrm = 43, /** Synder's Oblique Stereographic projection. */ kProjectionCodeSstro = 35, /** Swiss projection. */ kProjectionCodeSwiss = 32, /** Combination of Transverse Mercator projection and a polynomial expansion used in Denmark. */ kProjectionCodeSys34 = 57, /** Combination of Transverse Mercator projection and a polynomial expansion used in Denmark. Polynomials are of the 1999 vintage. */ kProjectionCodeSys34_99 = 61, /** Transverse aspect. Equal-area Cylindrical projection. */ kProjectionCodeTeacyl = 30, /** Gauss-Kruger or Transverse Mercator Projection. */ kProjectionCodeTm = 3, /** Transverse Mercator projection with affine post-processor. */ kProjectionCodeTrmeraf = 54, /** Transverse Mercator projection using Kruger formulation. */ kProjectionCodeTrmrkrg = 62, /** Transverse Mercator projection per J. P. Snyder. */ kProjectionCodeTrmrs = 45, /** Van der Grinten projection. */ kProjectionCodeVdgrntn = 21, /** Wisconsin County Coordinate System variation; Lambert Conformal Conic projection. */ kProjectionCodeWccsl = 39, /** Wisconsin County Coordinate System variation; Transverse Mercator projection. */ kProjectionCodeWccst = 40, /** The UTM direct variation of the Transverse Mercator projection. */ kProjectionCodeUtm = 44, /** Winkel Tripel projection. */ kProjectionCodeWinkl = 63, /** North with scale and rotation projection. */ kProjectionCodeNrthsrt = 64, /** Lambert Conformal Conic projection with affine post-processor. */ kProjectionCodeLmbrtaf = 65, /** Combination of Transverse Mercator projection and polynomial expansion used in Denmark. */ kProjectionCodeSys34_01 = 66, /** Equidistant Cylindrical projection, Ellipsoidal or Spherical. */ kProjectionCodeEdcylE = 67, /** Plate Carre projection. */ kProjectionCodePlateCarree = 68, /** Popular Visualisation Pseudo Mercator projection (Google Earth). */ kProjectionCodePvMercator = 69, /** Lambert Conic Conformal (2SP Michigan) projection. */ kProjectionCodeLmMich = 70, }; /** \details This enumeration represents the codes used to distinguish the different types of general geodetic reference system transformations. */ enum DatumCalculationTechnique { /** None. */ kDatumCalcTechNone = 0, /** DMA Molodensky Transformation. */ kDatumCalcTechMolodensky = 1, /** DMA Multiple Regression. */ kDatumCalcTechMultipleRegression = 2, /** Bursa/Wolf Transformation. */ kDatumCalcTechBursaWolf = 3, /** NAD27<->NAD83 via NADCON/NTv2. */ kDatumCalcTechNAD27 = 4, /** Is NAD83, no shift required. */ kDatumCalcTechNAD83 = 5, /** Is WGS84, no shift required. */ kDatumCalcTechWGS84 = 6, /** WGS72<->WGS84 Via DMA formula. */ kDatumCalcTechWGS72 = 7, /** HARN<->NAD83 via NADCON. */ kDatumCalcTechHPGN = 8, /** Seven Parameter Transformation. */ kDatumCalcTech7Params = 9, /** AGD66<->GDA94 via Grid Files. */ kDatumCalcTechAGD66 = 10, /** Three Parameter Transformation, deprecrated. */ kDatumCalcTech3Params = 11, /** Six Parameter Transformation. */ kDatumCalcTech6Params = 12, /** Four Parameter Transformation. */ kDatumCalcTech4Params = 13, /** AGD84<->GDA94 via Grid Files. */ kDatumCalcTechAGD84 = 14, /** NZGD49<->NZGD2K via Grid File. */ kDatumCalcTechNZGD4 = 15, /** ATS77<->NAD83 via Grid Files. */ kDatumCalcTechATS77 = 16, /** Is GDA94, no shift required. */ kDatumCalcTechGDA94 = 17, /** Is NZGD2000, no shift required. */ kDatumCalcTechNZGD2k = 18, /** NAD83<->CSRS Via Grid Files. */ kDatumCalcTechCSRS = 19, /** TOKYO<->JGD2k via Grid Files. */ kDatumCalcTechTOKYO = 20, /** NTF<->RGF93 via Grid File. */ kDatumCalcTechRGF93 = 21, /** ED50<->ETRF89 via Grid Files. */ kDatumCalcTechED50 = 22, /** DHDN<->ETRF89 via Grid Files. */ kDatumCalcTechDHDN = 23, /** Is ETRF89, no shift required. */ kDatumCalcTechETRF89 = 24, /** Geocentric Translation. */ kDatumCalcTechGeocentric = 25, /** CH1903<->WGS84 via CHENyx.gsb. */ kDatumCalcTechCHENxy = 26, /** New geodetic transformation type. */ kDatumCalcTechPLYNM = 27 }; } #endif //_ODSPATIALREFERENCE_ODSPATIALREFERENCE_INCLUDED_