00001
00310 #ifndef INC_MI32_SPATREF_H
00311 #define INC_MI32_SPATREF_H
00312
00313 #ifndef INC_MI32_MISTRING_H
00314 #include <mi32/mistring.h>
00315 #endif
00316
00317 #ifndef INC_MI32_UOM_H
00318 #include <mi32/uom.h>
00319 #endif
00320
00321 #ifndef INC_MI32_STRUTF8_H
00322 #include <mi32/strutf8.h>
00323 #endif
00324
00325 #ifndef INC_MI32_RANGE_H
00326 #include <mi32/range.h>
00327 #endif
00328
00329 #ifdef GEOMDLL
00330 #define CLASSLIBEXPORT MI_DLLCLASSEXPORT
00331 #else
00332 #define CLASSLIBEXPORT MI_DLLCLASSIMPORT
00333 #endif
00334
00335 #ifndef GENERATING_DOXYGEN_OUTPUT
00336 class XMLNODE;
00337 struct CHECKEXE;
00338 struct OLDPROJPARM;
00339 class TEXTRESITEM;
00340 class TEXTRESITEMLIST;
00341 class IDENTIFIER;
00342 class IDENTIFIERLIST;
00343 class POLYLINE;
00344 #endif // GENERATING_DOXYGEN_OUTPUT
00345
00346 namespace SPATREF {
00347
00348 class COORDSYS;
00349 class COORDREFSYS;
00350 class COORDOPDEF;
00351 class COORDOP_IMPL;
00352 class COORDOP_IMPL_SINGLE;
00353
00354 enum GETDISPLAY {
00355 GETDISPLAY_None = 0x00,
00356 GETDISPLAY_MicroImagesID = 0x01,
00357 GETDISPLAY_SkipName = 0x02,
00358 GETDISPLAY_SkipMethod = 0x04,
00359 GETDISPLAY_SkipValidArea = 0x08,
00360 GETDISPLAY_AllIDs = 0x10,
00361 GETDISPLAY_Remarks = 0x20,
00362 };
00363 DEFINE_ENUM_OP_BITWISE(GETDISPLAY)
00364
00365 static const INT32 IdNumUserDefinedBase = 50000;
00366
00367
00369 class CLASSLIBEXPORT ELLIPSOID {
00370 public:
00371
00374 enum IDNUM {
00375 IDNUM_Undefined = -1,
00376 IDNUM_UnitSphere = 1300,
00377 IDNUM_Clarke_1866 = 1302,
00378 IDNUM_GRS_1980 = 1301,
00379 IDNUM_WGS_1984 = 1351,
00380 };
00381
00383 enum FORM {
00384 FORM_Undefined = 0,
00385 FORM_Sphere = 1,
00386 FORM_SemiMinorAxis = 2,
00387 FORM_InverseFlattening = 3
00388 };
00389
00391 static IDNUM LookupIdNum (
00392 double SemiMajorAxis,
00393 double SemiMinorAxis,
00394 double InverseFlattening = 0
00395 );
00396
00398 ELLIPSOID (
00399 );
00400
00402 ELLIPSOID (
00403 const ELLIPSOID& rhs
00404 );
00405
00407 ~ELLIPSOID (
00408 );
00409
00411 ELLIPSOID& operator= (
00412 const ELLIPSOID& rhs
00413 );
00414
00416 ERRVALUE Assign (
00417 const IDENTIFIER& Id
00418 );
00419
00421 ERRVALUE Assign (
00422 IDNUM IdNum
00423 );
00424
00426 ERRVALUE ComputeDistance (
00427 const DPOINT2D& point1,
00428 const DPOINT2D& point2,
00429 double& distance,
00430 const UOM::UNIT& PointUnit,
00431 const UOM::UNIT& LengthUnit
00432 ) const;
00433
00436 double ComputeEccentricity (
00437 ) const;
00438
00441 double ComputeFlattening (
00442 ) const;
00443
00445 ERRVALUE ComputeLength (
00446 const POLYLINE& polyline,
00447 double& length,
00448 const UOM::UNIT& PointUnit,
00449 const UOM::UNIT& LengthUnit
00450 ) const;
00451
00453 void ComputeLinearScale (
00454 double GeodeticLatitude,
00455 DPOINT2D& scale,
00456 UOM::IDNUM LatitudeUnitIdNum = UOM::IDNUM_PlaneAngle_Degree,
00457 UOM::IDNUM LinearUnitIdNum = UOM::IDNUM_Length_Meter
00458 ) const;
00459
00461 void ComputeLinearScale (
00462 double GeodeticLatitude,
00463 DPOINT2D& scale,
00464 const UOM::UNIT& LatitudeUnit,
00465 const UOM::UNIT& LinearUnit
00466 ) const;
00467
00469 void GetDisplay (
00470 MISTRING& string,
00471 int indent,
00472 GETDISPLAY flags = GETDISPLAY_None
00473 ) const;
00474
00476 FORM GetForm (
00477 ) const;
00478
00480 const IDENTIFIERLIST& GetIdList (
00481 ) const;
00482
00484 IDNUM GetIdNum (
00485 ) const;
00486
00489 double GetInverseFlattening (
00490 ) const;
00491
00493 const MISTRING& GetName (
00494 ) const;
00495
00497 double GetSemiMajorAxis (
00498 ) const;
00499
00501 double GetSemiMinorAxis (
00502 ) const;
00503
00504 #ifndef GENERATING_DOXYGEN_OUTPUT
00505 class PRIV;
00506
00507 ELLIPSOID (PRIV& Priv);
00508 bool IsEqual (const ELLIPSOID& rhs) const { return (m_pPriv == rhs.m_pPriv); }
00509 private:
00510 PRIV *m_pPriv;
00511 #endif // GENERATING_DOXYGEN_OUTPUT
00512 };
00513 typedef MILIST<ELLIPSOID> ELLIPSOIDLIST;
00514
00515 inline bool operator== (
00516 const ELLIPSOID& lhs,
00517 const ELLIPSOID& rhs
00518 ) {
00519 return (lhs.IsEqual(rhs));
00520 }
00521
00522 inline bool operator!= (
00523 const ELLIPSOID& lhs,
00524 const ELLIPSOID& rhs
00525 ) {
00526 return (!lhs.IsEqual(rhs));
00527 }
00528
00529
00531 class CLASSLIBEXPORT PRIMEMERIDIAN {
00532 public:
00533
00536 enum IDNUM {
00537 IDNUM_Undefined = -1,
00538 IDNUM_Greenwich = 1001
00539 };
00540
00542 PRIMEMERIDIAN (
00543 );
00544
00546 PRIMEMERIDIAN (
00547 const PRIMEMERIDIAN& rhs
00548 );
00549
00551 ~PRIMEMERIDIAN (
00552 );
00553
00555 PRIMEMERIDIAN& operator= (
00556 const PRIMEMERIDIAN& rhs
00557 );
00558
00560 ERRVALUE Assign (
00561 const IDENTIFIER& Id
00562 );
00563
00565 ERRVALUE Assign (
00566 IDNUM IdNum
00567 );
00568
00570 void GetDisplay (
00571 MISTRING& string,
00572 int indent,
00573 GETDISPLAY flags = GETDISPLAY_None
00574 ) const;
00575
00577 double GetGreenwichLongitude (
00578 ) const;
00579
00581 const IDENTIFIERLIST& GetIdList (
00582 ) const;
00583
00585 IDNUM GetIdNum (
00586 ) const;
00587
00589 const MISTRING& GetName (
00590 ) const;
00591
00592 #ifndef GENERATING_DOXYGEN_OUTPUT
00593 class PRIV;
00594
00595 PRIMEMERIDIAN (PRIV& Priv);
00596 private:
00597 PRIV *m_pPriv;
00598 #endif // GENERATING_DOXYGEN_OUTPUT
00599 };
00600 typedef MILIST<PRIMEMERIDIAN> PRIMEMERIDIANLIST;
00601
00602 enum PRIMEMERIDIAN_IDNUM {
00603 PRIMEMERIDIAN_IDNUM_Greenwich = 1001
00604 };
00605
00606
00608 class CLASSLIBEXPORT DATUM {
00609 public:
00610
00613 enum IDNUM {
00614 IDNUM_Undefined = -1,
00615 IDNUM_Local = 2000,
00616 IDNUM_WGS_1984 = 2800,
00617 IDNUM_WGS_1972 = 2802,
00618 IDNUM_AustralianGeodetic_1966 = 2219,
00619 IDNUM_AustralianGeodetic_1984 = 2220,
00620 IDNUM_CampoInchauspe = 2233,
00621 IDNUM_CorregoAlegre = 2245,
00622 IDNUM_European_1950 = 2260,
00623 IDNUM_JGD2000 = 2304,
00624 IDNUM_NorthAmerican_1927 = 2346,
00625 IDNUM_NorthAmerican_1983 = 2347,
00626 IDNUM_NorthAmerican_1983_HARN = 2418,
00627 IDNUM_SouthAmerican_1969 = 2386,
00628 IDNUM_Tokyo = 2393,
00629 IDNUM_Astronomical_Unspecified = 2700,
00630 IDNUM_MeanSeaLevel = 2900,
00631 };
00632
00634 enum TYPE {
00635 TYPE_Undefined = 0x0000,
00636 TYPE_Geodetic = 0x0002,
00637 TYPE_Vertical = 0x0004,
00638 TYPE_Engineering = 0x0008,
00639 TYPE_Temporal = 0x0010,
00640 TYPE_Image = 0x0020,
00641 TYPE_Astronomical = 0x0040,
00642 TYPES_GeorefObject = (TYPE_Geodetic | TYPE_Engineering | TYPE_Astronomical)
00643 };
00644
00646 static TEXTID TypeToTextID (
00647 TYPE type
00648 );
00649
00651 DATUM (
00652 );
00653
00655 DATUM (
00656 const DATUM& rhs
00657 );
00658
00661 DATUM (
00662 IDNUM idnum
00663 );
00664
00666 ~DATUM (
00667 );
00668
00670 DATUM& operator= (
00671 const DATUM& rhs
00672 );
00673
00675 ERRVALUE Assign (
00676 const IDENTIFIER& Id
00677 );
00678
00680 ERRVALUE Assign (
00681 IDNUM IdNum
00682 );
00683
00685 ERRVALUE Assign (
00686 const XMLNODE* xmlnode
00687 );
00688
00690 const MISTRING& GetAbbr (
00691 ) const;
00692
00695 bool GetDftTransOp (
00696 const DATUM& datum,
00697 COORDOPDEF& CoordOpDef
00698 ) const;
00699
00701 const MILIST<COORDOPDEF>& GetDftTransOpList (
00702 ) const;
00703
00705 void GetDisplay (
00706 MISTRING& string,
00707 int indent,
00708 GETDISPLAY flags = GETDISPLAY_None
00709 ) const;
00710
00713 const ELLIPSOID& GetEllipsoid (
00714 ) const;
00715
00717 const IDENTIFIERLIST& GetIdList (
00718 ) const;
00719
00721 IDNUM GetIdNum (
00722 ) const;
00723
00725 const MISTRING& GetName (
00726 ) const;
00727
00729 const PRIMEMERIDIAN& GetPrimeMeridian (
00730 ) const;
00731
00733 TYPE GetType (
00734 ) const;
00735
00737 const TEXTRESITEMLIST& GetValidAreaList (
00738 ) const;
00739
00741 XMLNODE* GetXML (
00742 XMLNODE *parentnode,
00743 const char *nodename = "Datum"
00744 ) const;
00745
00747 bool IsAllowedLegacy (
00748 ) const;
00749
00751 bool IsConvertible (
00752 ) const;
00753
00754 #ifndef GENERATING_DOXYGEN_OUTPUT
00755 class PRIV;
00756
00757 DATUM (PRIV& Priv);
00758
00759 INT16 GetLegacyDatumNum (const COORDOPDEF *pDatumTransToWGS84) const;
00760
00761 PRIV* GetPrivPtr () const { return (m_pPriv); }
00762 bool IsEqual (const DATUM& rhs) const { return (m_pPriv == rhs.m_pPriv); }
00763 private:
00764 PRIV *m_pPriv;
00765 #endif // GENERATING_DOXYGEN_OUTPUT
00766 };
00767 typedef MILIST<DATUM> DATUMLIST;
00768 DEFINE_ENUM_OP_BITWISE(DATUM::TYPE)
00769
00770 inline bool operator== (
00771 const DATUM& lhs,
00772 const DATUM& rhs
00773 ) {
00774 return (lhs.IsEqual(rhs));
00775 }
00776
00777 inline bool operator!= (
00778 const DATUM& lhs,
00779 const DATUM& rhs
00780 ) {
00781 return (!lhs.IsEqual(rhs));
00782 }
00783
00784
00786 class CLASSLIBEXPORT COORDAXIS {
00787 public:
00788
00790 enum IDNUM {
00791 IDNUM_Undefined = -1,
00792 IDNUM_None = 0,
00793 IDNUM_GeodeticLatitude = 1101,
00794 IDNUM_GeodeticLongitude = 1102,
00795 IDNUM_EllipsoidalHeight = 1103,
00796 IDNUM_Easting = 1104,
00797 IDNUM_Northing = 1105,
00798 IDNUM_Westing = 1106,
00799 IDNUM_Southing = 1107,
00800 IDNUM_GravityRelatedHeight = 1108,
00801 IDNUM_GravityRelatedDepth = 1109,
00802 IDNUM_GeocentricX = 1110,
00803 IDNUM_GeocentricY = 1111,
00804 IDNUM_GeocentricZ = 1112,
00805 IDNUM_SphericalLatitude = 1113,
00806 IDNUM_SphericalLongitude = 1114,
00807 IDNUM_GeocentricRadius = 1115,
00808 IDNUM_LocalX = 1116,
00809 IDNUM_LocalY = 1117,
00810 IDNUM_LocalZ = 1118,
00811 IDNUM_ImageColumn = 1119,
00812 IDNUM_ImageRow = 1120,
00813 IDNUM_RightAscension = 1121,
00814 IDNUM_Declination = 1122,
00815 };
00816
00817 enum SYMBOLUSAGE {
00818 SYMBOLUSAGE_Unspecified = 0,
00819 SYMBOLUSAGE_Positive = 1,
00820 SYMBOLUSAGE_Negative = 2
00821 };
00822
00824 COORDAXIS (
00825 );
00826
00828 COORDAXIS (
00829 const COORDAXIS& rhs
00830 );
00831
00833 ~COORDAXIS (
00834 );
00835
00837 COORDAXIS& operator= (
00838 const COORDAXIS& rhs
00839 );
00840
00842 ERRVALUE Assign (
00843 const IDENTIFIER& Id
00844 );
00845
00847 ERRVALUE Assign (
00848 IDNUM IdNum
00849 );
00850
00852 ERRVALUE Assign (
00853 const XMLNODE* xmlnode
00854 );
00855
00857 ERRVALUE Create (
00858 const UOM::UNIT& unit,
00859 const MISTRING& name,
00860 const MISTRING& SymbolPositive,
00861 const MISTRING& SymbolNegative
00862 );
00863
00865 const MISTRING& GetAbbr (
00866 ) const;
00867
00869 void GetDisplay (
00870 MISTRING& string,
00871 int indent,
00872 GETDISPLAY flags = GETDISPLAY_None
00873 ) const;
00874
00876 const IDENTIFIERLIST& GetIdList (
00877 ) const;
00878
00880 IDNUM GetIdNum (
00881 ) const;
00882
00884 const MISTRING& GetName (
00885 ) const;
00886
00891 MISTRING GetNameFitted (
00892 int maxchars,
00893 bool IncludeUnitSymbol
00894 ) const;
00895
00897 const MISTRING& GetSymbol (
00898 SYMBOLUSAGE usage = SYMBOLUSAGE_Unspecified
00899 ) const;
00900
00902 const UOM::UNIT& GetUnit (
00903 ) const;
00904
00907 const DOUBLE_RANGE& GetValidRange (
00908 ) const;
00909
00911 XMLNODE* GetXML (
00912 XMLNODE *parentnode,
00913 const char *nodename = "CoordAxis"
00914 ) const;
00915
00917 bool HasSymbolNegative (
00918 ) const;
00919
00921 void SetName (
00922 const MISTRING& textitem
00923 );
00924
00927 void SetSymbolPositive (
00928 const MISTRING& symbol
00929 );
00930
00932 void SetSymbolNegative (
00933 const MISTRING& symbol
00934 );
00935
00938 void SetUnit (
00939 const UOM::UNIT& unit
00940 );
00941
00943 void SetValidRange (
00944 const DOUBLE_RANGE& ValidRange
00945 );
00946
00947 #ifndef GENERATING_DOXYGEN_OUTPUT
00948 class PRIV;
00949
00950 COORDAXIS (PRIV& Priv);
00951 bool IsEqual (const COORDAXIS& rhs) const;
00952 void SetSymbolPositive (const TEXTRESITEM& textitem);
00953 void SetSymbolNegative (const TEXTRESITEM& textitem);
00954
00955 private:
00956 PRIV *m_pPriv;
00957 void GetExclusive ();
00958 #endif // GENERATING_DOXYGEN_OUTPUT
00959 };
00960 typedef MILIST<COORDAXIS> COORDAXISLIST;
00961
00962 inline bool operator== (
00963 const COORDAXIS& lhs,
00964 const COORDAXIS& rhs
00965 ) {
00966 return (lhs.IsEqual(rhs));
00967 }
00968
00969 inline bool operator!= (
00970 const COORDAXIS& lhs,
00971 const COORDAXIS& rhs
00972 ) {
00973 return (!lhs.IsEqual(rhs));
00974 }
00975
00976
00977
00979 class CLASSLIBEXPORT COORDOPPARM {
00980 public:
00981
00983 enum IDNUM {
00984 IDNUM_Undefined = -1,
00985 IDNUM_LatitudeOffset = 1501,
00986 IDNUM_LongitudeOffset = 1502,
00987 IDNUM_VerticalOffset = 1503,
00988 IDNUM_GeoidUndulation = 1504,
00989 IDNUM_X_AxisTranslation = 1505,
00990 IDNUM_Y_AxisTranslation = 1506,
00991 IDNUM_Z_AxisTranslation = 1507,
00992 IDNUM_X_AxisRotation = 1508,
00993 IDNUM_Y_AxisRotation = 1509,
00994 IDNUM_Z_AxisRotation = 1510,
00995 IDNUM_ScaleDifference = 1511,
00996 IDNUM_ScaleFactorForSourceCRSFirstAxis = 1512,
00997 IDNUM_ScaleFactorForSourceCRSSecondAxis = 1513,
00998 IDNUM_RotationAngleOfSourceCRSAxes = 1514,
00999 IDNUM_RotationAngleOfSourceCRSFirstAxis = 1515,
01000 IDNUM_RotationAngleOfSourceCRSSecondAxis = 1516,
01001 IDNUM_Ordinate1OfEvaluationPoint = 1517,
01002 IDNUM_Ordinate2OfEvaluationPoint = 1518,
01003 IDNUM_Ordinate3OfEvaluationPoint = 1519,
01004 IDNUM_Ordinate1OfEvaluationPointInSourceCRS = 1520,
01005 IDNUM_Ordinate2OfEvaluationPointInSourceCRS = 1521,
01006 IDNUM_Ordinate1OfEvaluationPointInTargetCRS = 1522,
01007 IDNUM_Ordinate2OfEvaluationPointInTargetCRS = 1523,
01008 IDNUM_SemiMajorAxisLengthDifference = 1526,
01009 IDNUM_FlatteningDifference = 1527,
01010 IDNUM_LatitudeAndLongitudeDifferenceFile = 1528,
01011 IDNUM_LatitudeDifferenceFile = 1529,
01012 IDNUM_LongitudeDifferenceFile = 1530,
01013 IDNUM_PointScaleFactor = 1531,
01014 IDNUM_EastingAndNorthingDifferenceFile = 1532,
01015 IDNUM_MaritimeProvinceResidualFile = 1533,
01016 IDNUM_GeoideModelFile = 1534,
01017 IDNUM_ScalingFactorForSourceCRSCoordDifferences = 1535,
01018 IDNUM_ScalingFactorForTargetCRSCoordDifferences = 1536,
01019 IDNUM_ScalingFactorForCoordDifferences = 1537,
01020 IDNUM_LatitudeOfNaturalOrigin = 1538,
01021 IDNUM_LongitudeOfNaturalOrigin = 1539,
01022 IDNUM_ScaleFactorAtNaturalOrigin = 1540,
01023 IDNUM_FalseEasting = 1541,
01024 IDNUM_FalseNorthing = 1542,
01025 IDNUM_LatitudeOfProjectionCenter = 1543,
01026 IDNUM_LongitudeOfProjectionCenter = 1544,
01027 IDNUM_AzimuthOfInitialLine = 1545,
01028 IDNUM_AngleFromRectifiedToSkewGrid = 1546,
01029 IDNUM_ScaleFactorOnInitialLine = 1547,
01030 IDNUM_EastingAtProjectionCenter = 1548,
01031 IDNUM_NorthingAtProjectionCenter = 1549,
01032 IDNUM_LatitudeOfPseudoStandardParallel = 1550,
01033 IDNUM_ScaleFactorOnPseudoStandardParallel = 1551,
01034 IDNUM_LatitudeOfFalseOrigin = 1552,
01035 IDNUM_LongitudeOfFalseOrigin = 1553,
01036 IDNUM_LatitudeOf1stStandardParallel = 1554,
01037 IDNUM_LatitudeOf2ndStandardParallel = 1555,
01038 IDNUM_EastingAtFalseOrigin = 1556,
01039 IDNUM_NorthingAtFalseOrigin = 1557,
01040 IDNUM_SphericalLatitudeOfOrigin = 1558,
01041 IDNUM_SphericalLongitudeOfOrigin = 1559,
01042 IDNUM_InitialLongitude = 1560,
01043 IDNUM_ZoneWidth = 1561,
01044 IDNUM_HeightAboveEllipsoid = 1563,
01045 IDNUM_IsSkewed = 1564,
01046 IDNUM_LandsatNumber = 1565,
01047 IDNUM_SatellitePath = 1566,
01048 IDNUM_X_AxisTranslationRev = 1567,
01049 IDNUM_Y_AxisTranslationRev = 1568,
01050 IDNUM_Z_AxisTranslationRev = 1569,
01051 IDNUM_X_AxisRotationRev = 1570,
01052 IDNUM_Y_AxisRotationRev = 1571,
01053 IDNUM_Z_AxisRotationRev = 1572,
01054 IDNUM_ScaleDifferenceRev = 1573,
01055 IDNUM_LatitudeOfStandardParallel = 1576,
01056 IDNUM_RightAscensionOfProjectionCenter = 1578,
01057 IDNUM_DeclinationOfProjectionCenter = 1579,
01058 IDNUM_LatitudeOfPoint1 = 1580,
01059 IDNUM_LongitudeOfPoint1 = 1581,
01060 IDNUM_LatitudeOfPoint2 = 1582,
01061 IDNUM_LongitudeOfPoint2 = 1583,
01062 IDNUM_CoefficientA0 = 1600,
01063 IDNUM_CoefficientB0 = 1700
01064 };
01065
01067 enum TYPE {
01068 TYPE_Invalid = 0,
01069 TYPE_Boolean = 1,
01070 TYPE_Number = 2,
01071 TYPE_String = 3,
01072 };
01073
01074 enum ANGLETYPE {
01075 ANGLETYPE_Invalid = 0,
01076 ANGLETYPE_General = 1,
01077 ANGLETYPE_Longitude = 2,
01078 ANGLETYPE_Latitude = 3,
01079 ANGLETYPE_RightAscension = 4,
01080 ANGLETYPE_Declination = 5
01081 };
01082
01084 static ANGLETYPE IdNumToAngleType (
01085 IDNUM idnum
01086 );
01087
01089 static IDNUM LookupIdNum (
01090 const IDENTIFIER& Id
01091 );
01092
01094 COORDOPPARM (
01095 );
01096
01098 COORDOPPARM (
01099 const COORDOPPARM& rhs
01100 );
01101
01103 ~COORDOPPARM (
01104 );
01105
01107 COORDOPPARM& operator= (
01108 const COORDOPPARM& rhs
01109 );
01110
01112 ERRVALUE Assign (
01113 const XMLNODE* xmlnode
01114 );
01115
01117 ANGLETYPE GetAngleType (
01118 ) const;
01119
01121 const MISTRING& GetDescription (
01122 ) const;
01123
01125 void GetDisplay (
01126 MISTRING& string,
01127 int indent,
01128 GETDISPLAY flags = GETDISPLAY_None
01129 ) const;
01130
01133 bool GetDisplayStrs (
01134 MISTRING& valstr,
01135 MISTRING& unitstr,
01136 bool Strip0 = false
01137 ) const;
01138
01140 const IDENTIFIERLIST& GetIdList (
01141 ) const;
01142
01144 IDNUM GetIdNum (
01145 ) const;
01146
01148 const MISTRING& GetName (
01149 ) const;
01150
01152 TYPE GetType (
01153 ) const;
01154
01156 const UOM::UNIT& GetUnit (
01157 ) const { return (m_unit); }
01158
01161 bool GetValue (
01162 double& value
01163 ) const;
01164
01167 bool GetValue (
01168 bool& value
01169 ) const;
01170
01173 bool GetValue (
01174 STRUTF8& value
01175 ) const;
01176
01179 bool GetValue (
01180 MISTRING& value
01181 ) const;
01182
01184 XMLNODE* GetXML (
01185 XMLNODE *parentnode,
01186 const char *nodename = "CoordOpParm"
01187 ) const;
01188
01190 bool HasValue (
01191 ) const { return (!m_svalue.IsEmpty()); }
01192
01195 bool IsOptional (
01196 ) const { return (m_optional); }
01197
01199 ERRVALUE Set (
01200 IDNUM IdNum,
01201 bool value
01202 );
01203
01205 ERRVALUE Set (
01206 IDNUM IdNum,
01207 int value
01208 );
01209
01211 ERRVALUE Set (
01212 IDNUM IdNum,
01213 double value,
01214 UOM::IDNUM UnitIdNum = UOM::IDNUM_Unspecified
01215 );
01216
01218 ERRVALUE Set (
01219 IDNUM IdNum,
01220 double value,
01221 const UOM::UNIT& unit
01222 );
01223
01225 ERRVALUE Set (
01226 IDNUM IdNum,
01227 const MISTRING& string
01228 );
01229
01231 ERRVALUE Set (
01232 IDNUM IdNum,
01233 const STRUTF8& string
01234 );
01235
01236 #ifndef GENERATING_DOXYGEN_OUTPUT
01237 class PRIV;
01238
01239 COORDOPPARM (PRIV& Priv);
01240
01241 ERRVALUE SetIdNum (IDNUM IdNum);
01242
01243 void SetOptional (bool optional) { m_optional = optional; }
01244
01245 ERRVALUE SetUnit (UOM::IDNUM unitid);
01246
01247 ERRVALUE SetValue (const UINT8* value, UOM::IDNUM unitid);
01248
01249 ERRVALUE SetValue (const COORDOPPARM& parm);
01250
01251 bool IsEqual (const COORDOPPARM& rhs) const;
01252 bool IsEquivalent (const COORDOPPARM& rhs) const;
01253 private:
01254 PRIV *m_pPriv;
01255 bool m_bvalue;
01256 double m_dvalue;
01257 STRUTF8 m_svalue;
01258 UOM::UNIT m_unit;
01259 bool m_optional;
01260
01261 void FormatDoubleToStr ();
01262 #endif // GENERATING_DOXYGEN_OUTPUT
01263 };
01264 typedef MILIST<COORDOPPARM> COORDOPPARMLIST;
01265
01266 inline bool operator== (
01267 const COORDOPPARM& lhs,
01268 const COORDOPPARM& rhs
01269 ) {
01270 return (lhs.IsEqual(rhs));
01271 }
01272
01273 inline bool operator!= (
01274 const COORDOPPARM& lhs,
01275 const COORDOPPARM& rhs
01276 ) {
01277 return (!lhs.IsEqual(rhs));
01278 }
01279
01280
01281
01282
01284 class COORDOP_IMPL_FACTORY {
01285 public:
01286 virtual COORDOP_IMPL_SINGLE *v_ConstructImpl () = 0;
01287 };
01288
01289
01291 class CLASSLIBEXPORT COORDOPMETHOD {
01292 public:
01293
01294 enum TYPE {
01295 TYPE_Undefined = 0x0000,
01296 TYPE_Unspecified = 0x0001,
01297 TYPE_DatumTransformation = 0x0002,
01298 TYPE_GeographicProjection = 0x0004,
01299 TYPE_PolarProjection = 0x0008,
01300 TYPE_AstronomicProjection = 0x0010,
01301 TYPE_AnyProjection = (TYPE_GeographicProjection | TYPE_PolarProjection | TYPE_AstronomicProjection)
01302 };
01303
01305 enum IDNUM {
01306 IDNUM_Undefined = -1,
01307 IDNUM_FIRST = 1800,
01308 IDNUM_Identity = 1800,
01309 IDNUM_Linear = 1801,
01310 IDNUM_PlaneProjective = 1802,
01311 IDNUM_Bilinear = 1803,
01312 IDNUM_Quintic = 1804,
01313 IDNUM_SpaceResection = 1805,
01314 IDNUM_RubberSheet = 1806,
01315 IDNUM_RationalPolynomial = 1807,
01316 IDNUM_Conformal = 1808,
01317 IDNUM_PiecewiseAffine = 1810,
01318 IDNUM_ReversiblePolynomialDegree2 = 1820,
01319 IDNUM_ReversiblePolynomialDegree3 = 1821,
01320 IDNUM_ReversiblePolynomialDegree4 = 1822,
01321 IDNUM_ReversiblePolynomialDegree13 = 1823,
01322 IDNUM_GeneralPolynomialDegree6 = 1824,
01323 IDNUM_LongitudeOffset = 1858,
01324 IDNUM_GeographicGeocentric = 1859,
01325 IDNUM_Datum_GeocentricTranslation = 1860,
01326 IDNUM_Datum_CoordinateFrameRotation = 1861,
01327 IDNUM_Datum_PositionVector7Parameter = 1862,
01328 IDNUM_Datum_MolodenskiBadekas = 1863,
01329 IDNUM_Datum_GeographicAndHeightOffsets = 1864,
01330 IDNUM_Datum_GeographicOffsets = 1865,
01331 IDNUM_Datum_VerticalOffset = 1866,
01332 IDNUM_Datum_MadridToED50 = 1877,
01333 IDNUM_Datum_BuiltIn_WGS72 = 1878,
01334 IDNUM_Datum_BuiltIn_MRE = 1879,
01335 IDNUM_Datum_Grid_MicroImages = 1880,
01336 IDNUM_Datum_Grid_NADCON1 = 1881,
01337 IDNUM_Datum_Grid_NADCON2 = 1882,
01338 IDNUM_Datum_Grid_NTv1 = 1883,
01339 IDNUM_Datum_Grid_NTv2 = 1884,
01340 IDNUM_Projection_AlbersConicalEqualArea = 1903,
01341 IDNUM_Projection_LambertConformalConic2SP = 1904,
01342 IDNUM_Projection_Mercator = 1905,
01343 IDNUM_Projection_PolarStereographic = 1906,
01344 IDNUM_Projection_Polyconic = 1907,
01345 IDNUM_Projection_EquidistantConic = 1908,
01346 IDNUM_Projection_TransverseMercator = 1909,
01347 IDNUM_Projection_Stereographic = 1910,
01348 IDNUM_Projection_LambertAzimuthalEqualArea = 1911,
01349 IDNUM_Projection_AzimuthalEquidistant = 1912,
01350 IDNUM_Projection_Gnomonic = 1913,
01351 IDNUM_Projection_Orthographic = 1914,
01352 IDNUM_Projection_GeneralVerticalNearSidePerspective = 1915,
01353 IDNUM_Projection_Sinusoidal = 1916,
01354 IDNUM_Projection_Equirectangular = 1917,
01355 IDNUM_Projection_MillerCylindrical = 1918,
01356 IDNUM_Projection_VanDerGrintenI = 1919,
01357 IDNUM_Projection_HotineObliqueMercator = 1920,
01358 IDNUM_Projection_Robinson = 1921,
01359 IDNUM_Projection_BipolarObliqueConformalConic = 1922,
01360 IDNUM_Projection_LandsatSpaceObliqueMercator = 1923,
01361 IDNUM_Projection_Cassini = 1924,
01362 IDNUM_Projection_NewZealandMapGrid = 1925,
01363 IDNUM_Projection_SwissConformalCylindrical = 1926,
01364 IDNUM_Projection_RoyalDutch = 1927,
01365 IDNUM_Projection_ObliqueStereographic = 1928,
01366 IDNUM_Projection_InterruptedGoodeHomolosine = 1929,
01367 IDNUM_Projection_LabordeObliqueMercator = 1930,
01368 IDNUM_Projection_ObliqueMercator = 1931,
01369 IDNUM_Projection_KrovakObliqueConicConformal = 1932,
01370 IDNUM_Projection_LambertConformalConic1SP = 1933,
01371 IDNUM_Projection_TransverseMercatorSouthOriented = 1934,
01372 IDNUM_Projection_LambertConformalConicWestOriented = 1935,
01373 IDNUM_Projection_LambertConformalConicBelgium2SP = 1936,
01374 IDNUM_Projection_LambertConicNearConformal = 1937,
01375 IDNUM_Projection_LambertAzimuthalEqualAreaSpherical = 1938,
01376 IDNUM_Projection_Bonne = 1939,
01377 IDNUM_Projection_BonneSouthOriented = 1940,
01378 IDNUM_Projection_PolarStereographicVariantB = 1941,
01379 IDNUM_Projection_PolarStereographicVariantC = 1942,
01380 IDNUM_Projection_Mollweide = 1943,
01381 IDNUM_Projection_CylindricalEqualArea = 1944,
01382 IDNUM_Projection_TwoPointEquidistant = 1945,
01383 IDNUM_AstroProjection_Orthographic = 1980,
01384 IDNUM_AstroProjection_Mercator = 1981,
01385 IDNUM_AstroProjection_Stereographic = 1982,
01386 IDNUM_AstroProjection_Gnomonic = 1983,
01387 IDNUM_AstroProjection_AzimuthalEqualArea = 1984,
01388 IDNUM_AstroProjection_AzimuthalEquidistant = 1985,
01389 IDNUM_LAST = 1998,
01390 IDNUM_Concatenated = 1999
01391 };
01392
01394 static void RegisterImplementation (
01395 IDNUM IdNum,
01396 COORDOP_IMPL_FACTORY *pImplFactory
01397 );
01398
01400 COORDOPMETHOD (
01401 );
01402
01404 COORDOPMETHOD (
01405 const COORDOPMETHOD& rhs
01406 );
01407
01409 ~COORDOPMETHOD (
01410 );
01411
01413 COORDOPMETHOD& operator= (
01414 const COORDOPMETHOD& rhs
01415 );
01416
01418 ERRVALUE Assign (
01419 const IDENTIFIER& Id
01420 );
01421
01423 ERRVALUE Assign (
01424 IDNUM IdNum
01425 );
01426
01428 ERRVALUE ConstructImplementation (
01429 COORDOP_IMPL_SINGLE *& pImpl
01430 ) const;
01431
01433 ERRVALUE GetDefaultTargetCoordSys (
01434 COORDSYS& CoordSys
01435 ) const;
01436
01438 void GetDisplay (
01439 MISTRING& string,
01440 int indent,
01441 GETDISPLAY flags = GETDISPLAY_None
01442 ) const;
01443
01445 const IDENTIFIERLIST& GetIdList (
01446 ) const;
01447
01449 IDNUM GetIdNum (
01450 ) const;
01451
01453 const MISTRING& GetName (
01454 ) const;
01455
01456 const COORDOPPARMLIST& GetParmList (
01457 ) const;
01458
01460 const COORDAXISLIST& GetSourceAxisList (
01461 ) const;
01462
01464 const COORDAXISLIST& GetTargetAxisList (
01465 ) const;
01466
01468 TYPE GetType (
01469 ) const;
01470
01472 XMLNODE* GetXML (
01473 XMLNODE *parentnode,
01474 const char *nodename = "Method"
01475 ) const;
01476
01478 bool IsImplemented (
01479 ) const;
01480
01481 #ifndef GENERATING_DOXYGEN_OUTPUT
01482 class PRIV;
01483
01484 COORDOPMETHOD (PRIV& Priv);
01485 bool IsEqual (const COORDOPMETHOD& rhs) const { return (m_pPriv == rhs.m_pPriv); }
01486 private:
01487 static COORDOP_IMPL_FACTORY* s_pImplementations[IDNUM_LAST-IDNUM_FIRST+1];
01488 PRIV *m_pPriv;
01489 #endif // GENERATING_DOXYGEN_OUTPUT
01490 };
01491 typedef MILIST<COORDOPMETHOD> COORDOPMETHODLIST;
01492
01493 inline bool operator== (
01494 const COORDOPMETHOD& lhs,
01495 const COORDOPMETHOD& rhs
01496 ) {
01497 return (lhs.IsEqual(rhs));
01498 }
01499
01500 inline bool operator!= (
01501 const COORDOPMETHOD& lhs,
01502 const COORDOPMETHOD& rhs
01503 ) {
01504 return (!lhs.IsEqual(rhs));
01505 }
01506
01507
01508
01510 class CLASSLIBEXPORT COORDSYS {
01511 public:
01512
01515 enum IDNUM {
01516 IDNUM_Undefined = -1,
01517 IDNUM_None = 0,
01518 IDNUM_Projected2D_EN_m = 1200,
01519 IDNUM_Projected2D_EN_ft = 1201,
01520 IDNUM_Projected2D_EN_ftUS = 1202,
01521 IDNUM_UPS_North_m = 1250,
01522 IDNUM_UPS_South_m = 1251,
01523 IDNUM_Cartesian2D_XY_m = 1260,
01524 IDNUM_Cartesian3D_XYZ_m = 1261,
01525 IDNUM_Ellipsoidal2D_Deg = 1280,
01526 IDNUM_Ellipsoidal3D_DegM = 1281,
01527 IDNUM_Ellipsoidal2D_Grad = 1282,
01528 IDNUM_Ellipsoidal3D_GradM = 1283,
01529 IDNUM_Equatorial2D_Deg = 1288,
01530 IDNUM_Equatorial2D_HrDeg = 1289,
01531 IDNUM_GravityRelated_Height_m = 1290,
01532 IDNUM_GravityRelated_Height_ftUS = 1291,
01533 IDNUM_GravityRelated_Depth_m = 1292,
01534 IDNUM_Zoned_MGRS = 1295,
01535 IDNUM_Spherical3D = 1298,
01536 IDNUM_Geocentric = 1299
01537 };
01538
01540 enum TYPE {
01541 TYPE_Undefined = 0x0000,
01542 TYPE_Cartesian = 0x0001,
01543 TYPE_ObliqueCartesian = 0x0002,
01544 TYPE_Projected = 0x0004,
01545 TYPE_Ellipsoidal = 0x0008,
01546 TYPE_Spherical = 0x0010,
01547 TYPE_Polar = 0x0020,
01548 TYPE_Cylindrical = 0x0040,
01549 TYPE_MultiLinear = 0x0080,
01550 TYPE_GravityRelated = 0x0100,
01551 TYPE_Temporal = 0x0200,
01552 TYPE_Equatorial = 0x0400,
01553 TYPE_Zoned = 0x8000,
01554 TYPES_GeorefObject = (TYPE_Cartesian | TYPE_Projected | TYPE_Ellipsoidal | TYPE_Equatorial)
01555 };
01556
01558 static TEXTID TypeToTextID (
01559 TYPE type
01560 );
01561
01563 COORDSYS (
01564 );
01565
01567 COORDSYS (
01568 const COORDSYS& rhs
01569 );
01570
01573 COORDSYS (
01574 IDNUM idnum
01575 );
01576
01578 ~COORDSYS (
01579 );
01580
01582 COORDSYS& operator= (
01583 const COORDSYS& rhs
01584 );
01585
01587 ERRVALUE Assign (
01588 const IDENTIFIER& Id
01589 );
01590
01592 ERRVALUE Assign (
01593 IDNUM IdNum
01594 );
01595
01597 ERRVALUE Assign (
01598 const XMLNODE* xmlnode
01599 );
01600
01602 ERRVALUE Create (
01603 TYPE type,
01604 const COORDAXISLIST& AxisList,
01605 DATUM::TYPE ValidDatumType
01606 );
01607
01609 const COORDAXIS& GetAxis (
01610 int axisidx
01611 ) const;
01612
01614 const COORDAXISLIST& GetAxisList (
01615 ) const;
01616
01619 int GetDimension (
01620 ) const;
01621
01623 void GetDisplay (
01624 MISTRING& string,
01625 int indent,
01626 GETDISPLAY flags = GETDISPLAY_None
01627 ) const;
01628
01630 const IDENTIFIERLIST& GetIdList (
01631 ) const;
01632
01634 IDNUM GetIdNum (
01635 ) const;
01636
01638 const MISTRING& GetName (
01639 ) const;
01640
01642 COORDOPMETHOD::TYPE GetProjectedMethodType (
01643 ) const;
01644
01646 TYPE GetType (
01647 ) const;
01648
01650 DATUM::TYPE GetValidDatumType (
01651 ) const;
01652
01654 XMLNODE* GetXML (
01655 XMLNODE *parentnode,
01656 const char *nodename = "CoordSys"
01657 ) const;
01658
01660 bool HasAxes (
01661 const COORDAXISLIST& AxisList
01662 ) const;
01663
01665 bool IsAllowedLegacy (
01666 ) const;
01667
01668 #ifndef GENERATING_DOXYGEN_OUTPUT
01669 class PRIV;
01670
01671 COORDSYS (PRIV& Priv);
01672 bool IsEqual (const COORDSYS& rhs) const;
01673 void SetValidDatumType (DATUM::TYPE ValidDatumType);
01674 private:
01675 PRIV *m_pPriv;
01676 void GetExclusive ();
01677 #endif // GENERATING_DOXYGEN_OUTPUT
01678 };
01679 typedef MILIST<COORDSYS> COORDSYSLIST;
01680 DEFINE_ENUM_OP_BITWISE(COORDSYS::TYPE)
01681
01682 inline bool operator== (
01683 const COORDSYS& lhs,
01684 const COORDSYS& rhs
01685 ) {
01686 return (lhs.IsEqual(rhs));
01687 }
01688
01689 inline bool operator!= (
01690 const COORDSYS& lhs,
01691 const COORDSYS& rhs
01692 ) {
01693 return (!lhs.IsEqual(rhs));
01694 }
01695
01696
01697
01698
01774 class CLASSLIBEXPORT COORDOPDEF {
01775 public:
01776
01777 enum IDNUM {
01778 IDNUM_Undefined = -1,
01779 IDNUM_None = 0,
01780 IDNUM_UPS_North = 25382,
01781 IDNUM_UPS_South = 25383,
01782 IDNUM_PlateCarree = 26200,
01783 IDNUM_UserDefinedBase = IdNumUserDefinedBase
01784 };
01785
01787 enum AUTOPROJECT {
01788 AUTOPROJECT_UTM = 1,
01789 AUTOPROJECT_TM_WMS = 2,
01790 AUTOPROJECT_Orthographic = 3,
01791 AUTOPROJECT_Equirectangular = 4,
01792 AUTOPROJECT_Gnomonic = 5,
01793 AUTOPROJECT_AzimuthalEquidistant = 6,
01794 AUTOPROJECT_Stereographic = 7,
01795 };
01796
01798 COORDOPDEF (
01799 );
01800
01802 COORDOPDEF (
01803 const COORDOPDEF& rhs
01804 );
01805
01807 ~COORDOPDEF (
01808 );
01809
01811 COORDOPDEF& operator= (
01812 const COORDOPDEF& rhs
01813 );
01814
01816 ERRVALUE Assign (
01817 const IDENTIFIER& Id
01818 );
01819
01821 ERRVALUE Assign (
01822 IDNUM IdNum
01823 );
01824
01826 ERRVALUE Assign (
01827 const XMLNODE* xmlnode
01828 );
01829
01831 ERRVALUE Create (
01832 const MISTRING& name,
01833 const COORDOPMETHOD& method,
01834 const COORDOPPARMLIST& parmlist
01835 );
01836
01838 ERRVALUE Create (
01839 AUTOPROJECT autoproj,
01840 const DPOINT2D& center
01841 );
01842
01844 ERRVALUE Create (
01845 const MISTRING& name,
01846 const MILIST<COORDOPDEF>& StepList
01847 );
01848
01851 bool FindPredefined (
01852 );
01853
01855 void GetDisplay (
01856 MISTRING& string,
01857 int indent,
01858 GETDISPLAY flags = GETDISPLAY_None
01859 ) const;
01860
01862 const IDENTIFIERLIST& GetIdList (
01863 ) const;
01864
01866 IDNUM GetIdNum (
01867 ) const;
01868
01870 const COORDOPMETHOD& GetMethod (
01871 ) const;
01872
01874 const MISTRING& GetName (
01875 ) const;
01876
01877 ERRVALUE GetParm (
01878 COORDOPPARM::IDNUM idnum,
01879 COORDOPPARM& parm
01880 ) const;
01881
01883 const COORDOPPARMLIST& GetParmList (
01884 ) const;
01885
01887 ERRVALUE GetParmValue (
01888 COORDOPPARM::IDNUM idnum,
01889 double& value,
01890 const UOM::UNIT& unit
01891 ) const;
01892
01894 ERRVALUE GetParmValue (
01895 COORDOPPARM::IDNUM idnum,
01896 double& value,
01897 int unitid
01898 ) const;
01899
01901 ERRVALUE GetParmValue (
01902 COORDOPPARM::IDNUM idnum,
01903 bool& value
01904 ) const;
01905
01907 ERRVALUE GetParmValue (
01908 COORDOPPARM::IDNUM idnum,
01909 MISTRING& value
01910 ) const;
01911
01913 const COORDREFSYS& GetSourceCRS (
01914 ) const;
01915
01917 const MILIST<COORDOPDEF>& GetStepList (
01918 ) const;
01919
01921 const COORDREFSYS& GetTargetCRS (
01922 ) const;
01923
01925 const TEXTRESITEMLIST& GetValidAreaList (
01926 ) const;
01927
01929 XMLNODE* GetXML (
01930 XMLNODE *parentnode,
01931 const char *nodename = "CoordOp"
01932 ) const;
01933
01935 bool HasParmValue (
01936 COORDOPPARM::IDNUM idnum
01937 ) const;
01938
01940 bool IsConcatenated (
01941 ) const;
01942
01944 bool IsImplemented (
01945 ) const;
01946
01948 void SetMethod (
01949 const COORDOPMETHOD& CoordOpMethod
01950 );
01951
01953 void SetMethod (
01954 COORDOPMETHOD::IDNUM MethodIdNum
01955 );
01956
01958 ERRVALUE SetParm (
01959 const COORDOPPARM& parm
01960 );
01961
01963 ERRVALUE SetParm (
01964 COORDOPPARM::IDNUM idnum,
01965 bool value
01966 );
01967
01969 ERRVALUE SetParm (
01970 COORDOPPARM::IDNUM idnum,
01971 int value
01972 );
01973
01975 ERRVALUE SetParm (
01976 COORDOPPARM::IDNUM idnum,
01977 double value,
01978 const UOM::UNIT& unit
01979 );
01980
01982 ERRVALUE SetParm (
01983 COORDOPPARM::IDNUM idnum,
01984 double value,
01985 const UOM::IDNUM unitid
01986 );
01987
01988 #ifndef GENERATING_DOXYGEN_OUTPUT
01989 class PRIV;
01990
01991 COORDOPDEF (PRIV& Priv);
01992 bool IsEqual (const COORDOPDEF& rhs) const;
01993 bool IsEquivalent (const COORDOPDEF& rhs) const;
01994 ERRVALUE Resolve ();
01995 private:
01996 PRIV *m_pPriv;
01997 void GetExclusive ();
01998 #endif // GENERATING_DOXYGEN_OUTPUT
01999 };
02000 typedef MILIST<COORDOPDEF> COORDOPDEFLIST;
02001
02002 inline bool operator== (
02003 const COORDOPDEF& lhs,
02004 const COORDOPDEF& rhs
02005 ) {
02006 return (lhs.IsEqual(rhs));
02007 }
02008
02009 inline bool operator!= (
02010 const COORDOPDEF& lhs,
02011 const COORDOPDEF& rhs
02012 ) {
02013 return (!lhs.IsEqual(rhs));
02014 }
02015
02016
02017
02041 class CLASSLIBEXPORT COORDREFSYS {
02042 public:
02043
02046 enum IDNUM {
02047 IDNUM_Undefined = -1,
02048 IDNUM_None = 0,
02049 IDNUM_Geographic2D_WGS84_Deg = 3800,
02050 IDNUM_Geographic2D_WGS72_Deg = 3802,
02051 IDNUM_Geographic3D_WGS84_DegM = 4800,
02052 IDNUM_Geographic3D_WGS72_DegM = 4802,
02053 IDNUM_Geocentric_WGS84 = 7800,
02054 IDNUM_Geocentric_ITRF_1988 = 7804,
02055 IDNUM_Geocentric_ITRF_1989 = 7805,
02056 IDNUM_Geocentric_ITRF_1990 = 7806,
02057 IDNUM_Geocentric_ITRF_1991 = 7807,
02058 IDNUM_Geocentric_ITRF_1992 = 7808,
02059 IDNUM_Geocentric_ITRF_1993 = 7809,
02060 IDNUM_Geocentric_ITRF_1994 = 7810,
02061 IDNUM_Geocentric_ITRF_1996 = 7811,
02062 IDNUM_Geocentric_ITRF_1997 = 7812,
02063 IDNUM_Geocentric_ITRF_2000 = 7813,
02064 IDNUM_Local2D_XY_m = 9000,
02065 IDNUM_Projected_US_NationalAtlas_EqualArea = 10559,
02066 IDNUM_SphericalWebMercator = 12685,
02067 };
02068
02070 enum MEASUREMETHOD {
02071 MEASUREMETHOD_Projected,
02072 MEASUREMETHOD_Geodesic,
02073 MEASUREMETHOD_Automatic,
02074
02075 };
02076
02077 #ifdef GEOMDLL
02079 DEPRECATED enum DISTANCEMETHOD {
02080 DISTANCEMETHOD_Projected = MEASUREMETHOD_Projected
02081 };
02082 #endif
02083
02085 COORDREFSYS (
02086 );
02087
02089 COORDREFSYS (
02090 const COORDREFSYS& rhs
02091 );
02092
02094 ~COORDREFSYS (
02095 );
02096
02098 COORDREFSYS& operator= (
02099 const COORDREFSYS& rhs
02100 );
02101
02104 ERRVALUE Assign (
02105 const IDENTIFIER& Id
02106 );
02107
02109 ERRVALUE Assign (
02110 IDNUM IdNum
02111 );
02112
02114 ERRVALUE Assign (
02115 const XMLNODE* xmlnode
02116 );
02117
02119 ERRVALUE Assign (
02120 const MISTRING& string
02121 );
02122
02124 ERRVALUE Assign (
02125 const OLDPROJPARM& projparm
02126 );
02127
02129 void Clear (
02130 );
02131
02133 ERRVALUE ComputeAngleToNorth (
02134 const DPOINT2D& point,
02135 double& angle,
02136 int angleunitid
02137 ) const;
02138
02140 ERRVALUE ComputeDistance (
02141 const DPOINT2D& point1,
02142 const DPOINT2D& point2,
02143 double& distance,
02144 MEASUREMETHOD method = MEASUREMETHOD_Automatic,
02145 UOM::IDNUM LengthUnitIdNum = UOM::IDNUM_Length_Meter
02146 ) const;
02147
02148 #ifdef GEOMDLL
02151 DEPRECATED ERRVALUE ComputeDistance (
02152 const DPOINT2D& point1,
02153 const DPOINT2D& point2,
02154 DISTANCEMETHOD method,
02155 double& distance,
02156 UOM::IDNUM LengthUnitIdNum = UOM::IDNUM_Length_Meter
02157 ) const;
02158 #endif
02159
02161 ERRVALUE ComputeLength (
02162 const POLYLINE& polyline,
02163 double& length,
02164 MEASUREMETHOD method = MEASUREMETHOD_Automatic,
02165 UOM::IDNUM LengthUnitIdNum = UOM::IDNUM_Length_Meter
02166 ) const;
02167
02169 ERRVALUE Create (
02170 const COORDSYS& CoordSys,
02171 const DATUM& Datum
02172 );
02173
02175 ERRVALUE Create (
02176 COORDSYS::IDNUM CoordSysIdNum,
02177 const DATUM& Datum
02178 );
02179
02181 ERRVALUE Create (
02182 const COORDSYS& CoordSys,
02183 const DATUM& Datum,
02184 const COORDOPDEF& CoordOp
02185 );
02186
02188 ERRVALUE Create (
02189 COORDSYS::IDNUM CoordSysIdNum,
02190 const DATUM& Datum,
02191 const COORDOPDEF& CoordOp
02192 );
02193
02195 ERRVALUE Create (
02196 COORDSYS::IDNUM CoordSysIdNum,
02197 const DATUM& Datum,
02198 const COORDOPDEF::IDNUM CoordOpDefId
02199 );
02200
02202 ERRVALUE Create (
02203 const MILIST<COORDREFSYS>& CoordRefSysList
02204 );
02205
02208 bool FindPredefined (
02209 );
02210
02212 const COORDAXIS& GetAxis (
02213 int axisidx
02214 ) const;
02215
02218 const MILIST<COORDREFSYS>& GetComponentList (
02219 ) const;
02220
02222 const COORDOPDEF& GetCoordOpDef (
02223 ) const;
02224
02226 const COORDSYS& GetCoordSys (
02227 ) const;
02228
02230 const DATUM& GetDatum (
02231 ) const;
02232
02235 bool GetDatumTransOp (
02236 const DATUM& datum,
02237 COORDOPDEF& CoordOpDef
02238 ) const;
02239
02241 const COORDOPDEFLIST& GetDatumTransOpList (
02242 ) const;
02243
02246 int GetDimension (
02247 ) const;
02248
02250 void GetDisplay (
02251 MISTRING& string,
02252 int indent = 0,
02253 GETDISPLAY flags = GETDISPLAY_None
02254 ) const;
02255
02257 const IDENTIFIERLIST& GetIdList (
02258 ) const;
02259
02261 IDNUM GetIdNum (
02262 ) const;
02263
02266 int GetLegacyProjParm (
02267 OLDPROJPARM& projparm
02268 ) const;
02269
02271 const MISTRING& GetName (
02272 ) const;
02273
02275 ERRVALUE GetString (
02276 MISTRING& string
02277 ) const;
02278
02280 const TEXTRESITEMLIST& GetValidAreaList (
02281 ) const;
02282
02284 XMLNODE* GetXML (
02285 XMLNODE *parentnode,
02286 const char *nodename = "CoordRefSys"
02287 ) const;
02288
02290 bool HasCoordSysType (
02291 COORDSYS::TYPE CoordSysType
02292 ) const;
02293
02295 bool HasDatumType (
02296 DATUM::TYPE DatumType
02297 ) const;
02298
02301 bool HasOwnDatumTransOpList (
02302 ) const;
02303
02306 bool IniRead (
02307 INIHANDLE hdl,
02308 const char *group,
02309 const char *field
02310 );
02311
02313 ERRVALUE IniWrite (
02314 INIHANDLE hdl,
02315 const char *group,
02316 const char *field
02317 ) const;
02318
02320 bool IsCompound (
02321 ) const;
02322
02324 bool IsDefined (
02325 ) const;
02326
02329 bool IsLocal (
02330 ) const;
02331
02334 bool IsProjected (
02335 ) const;
02336
02340 ERRVALUE SetCoordOpDef (
02341 const COORDOPDEF& CoordOpDef
02342 );
02343
02347 ERRVALUE SetCoordSys (
02348 const COORDSYS& CoordSys
02349 );
02350
02354 ERRVALUE SetCoordSys (
02355 COORDSYS::IDNUM CoordSysIdNum
02356 );
02357
02361 ERRVALUE SetDatum (
02362 const DATUM& Datum
02363 );
02364
02368 ERRVALUE SetDatum (
02369 DATUM::IDNUM DatumIdNum
02370 );
02371
02378 ERRVALUE SetDatumTransOpList (
02379 const COORDOPDEFLIST& DatumTransOpList
02380 );
02381
02384 void SetId (
02385 const IDENTIFIER& Id
02386 );
02387
02390 void SetName (
02391 const MISTRING& name
02392 );
02393
02395 ERRVALUE Validate (
02396 bool FixIfPossible,
02397 bool CheckOpCreate
02398 );
02399
02400 #ifndef GENERATING_DOXYGEN_OUTPUT
02401 class PRIV;
02402
02403 COORDREFSYS (PRIV& Priv);
02404
02405 PRIV* GetPrivPtr () const { return (m_pPriv); }
02406 bool IsEqual (const COORDREFSYS& rhs) const;
02407 private:
02408 mutable PRIV *m_pPriv;
02409 COORDOPDEFLIST m_DatumTransOpList;
02410 void GetExclusive ();
02411 #endif // GENERATING_DOXYGEN_OUTPUT
02412 };
02413 typedef MILIST<COORDREFSYS> COORDREFSYSLIST;
02414
02415 inline bool operator== (
02416 const COORDREFSYS& lhs,
02417 const COORDREFSYS& rhs
02418 ) {
02419 return (lhs.IsEqual(rhs));
02420 }
02421
02422 inline bool operator!= (
02423 const COORDREFSYS& lhs,
02424 const COORDREFSYS& rhs
02425 ) {
02426 return (!lhs.IsEqual(rhs));
02427 }
02428
02429
02430
02431
02432 class CLASSLIBEXPORT GROUP {
02433 public:
02434
02436 GROUP (
02437 );
02438
02440 GROUP (
02441 const GROUP& rhs
02442 );
02443
02445 ~GROUP (
02446 );
02447
02449 GROUP& operator= (
02450 const GROUP& rhs
02451 );
02452
02454 const COORDOPDEFLIST& GetCoordOpDefList (
02455 ) const;
02456
02458 const COORDREFSYSLIST& GetCoordRefSysList (
02459 ) const;
02460
02462 const COORDSYSLIST& GetCoordSysList (
02463 ) const;
02464
02466 const MILIST<GROUP>& GetGroupList (
02467 ) const;
02468
02470 const MISTRING& GetName (
02471 ) const;
02472
02473 #ifndef GENERATING_DOXYGEN_OUTPUT
02474
02475 GROUP (bool);
02476 class PRIV;
02477 PRIV* GetPrivPtr () const { return (m_pPriv); }
02478 private:
02479 PRIV *m_pPriv;
02480 #endif // GENERATING_DOXYGEN_OUTPUT
02481 };
02482 typedef MILIST<GROUP> GROUPLIST;
02483
02484
02486 class CLASSLIBEXPORT SYSTEM {
02487 public:
02488
02489 static ERRVALUE GetCoordAxis (
02490 COORDAXIS::IDNUM IdNum,
02491 COORDAXIS& CoordAxis
02492 );
02493
02495 static const COORDAXISLIST& GetCoordAxisList (
02496 );
02497
02498 static ERRVALUE GetCoordOpDef (
02499 COORDOPDEF::IDNUM IdNum,
02500 COORDOPDEF& CoordOpDef
02501 );
02502
02504 static const COORDOPDEFLIST& GetCoordOpDefList (
02505 );
02506
02507 static ERRVALUE GetCoordOpMethod (
02508 COORDOPMETHOD::IDNUM IdNum,
02509 COORDOPMETHOD& CoordOpMethod
02510 );
02511
02513 static const COORDOPMETHODLIST& GetCoordOpMethodList (
02514 );
02515
02516 static ERRVALUE GetCoordOpParm (
02517 COORDOPPARM::IDNUM IdNum,
02518 COORDOPPARM& CoordOpParm
02519 );
02520
02522 static const COORDOPPARMLIST& GetCoordOpParmList (
02523 );
02524
02525 static ERRVALUE GetCoordRefSys (
02526 COORDREFSYS::IDNUM IdNum,
02527 COORDREFSYS& CoordRefSys
02528 );
02529
02531 static const COORDREFSYSLIST& GetCoordRefSysList (
02532 );
02533
02534 static ERRVALUE GetCoordSys (
02535 COORDSYS::IDNUM IdNum,
02536 COORDSYS& CoordSys
02537 );
02538
02540 static const COORDSYSLIST& GetCoordSysList (
02541 );
02542
02543 static ERRVALUE GetDatum (
02544 DATUM::IDNUM IdNum,
02545 DATUM& Datum
02546 );
02547
02549 static const DATUMLIST& GetDatumList (
02550 );
02551
02552 static ERRVALUE GetEllipsoid (
02553 ELLIPSOID::IDNUM IdNum,
02554 ELLIPSOID& Ellipsoid
02555 );
02556
02558 static const ELLIPSOIDLIST& GetEllipsoidList (
02559 );
02560
02561 static ERRVALUE GetPrimeMeridian (
02562 PRIMEMERIDIAN::IDNUM IdNum,
02563 PRIMEMERIDIAN& PrimeMeridian
02564 );
02565
02567 static const PRIMEMERIDIANLIST& GetPrimeMeridianList (
02568 );
02569
02571 static const GROUPLIST& GetSelectionGroupList (
02572 );
02573
02575 static ERRVALUE Initialize (
02576 );
02577
02580 static bool IsInitialized (
02581 );
02582
02584 static void Terminate ();
02585
02586 #ifndef GENERATING_DOXYGEN_OUTPUT
02587 static const CHECKEXE& GetChk ();
02588 class PRIV;
02589 private:
02590 static PRIV *s_pPriv;
02591
02592 #ifdef MAC_OSX
02593 static void* BackgroundInit (void*);
02594 #endif
02595 #endif // GENERATING_DOXYGEN_OUTPUT
02596 };
02597
02598
02599
02600
02601
02603 enum COORDREFSYS_SELFLAGS {
02604 COORDREFSYS_SELFLAG_Default = 0x0000,
02605 COORDREFSYS_SELFLAG_AllowChangeDatumType = 0x0001,
02606 COORDREFSYS_SELFLAG_AllowGeocentric = 0x0002,
02607 COORDREFSYS_SELFLAG_AllowLocal = 0x0004,
02608 COORDREFSYS_SELFLAG_Allow3D = 0x0008,
02609 COORDREFSYS_SELFLAG_AllowCompound2DGR = 0x0010,
02610 COORDREFSYS_SELFLAG_AllowUndefined = 0x0020,
02611 COORDREFSYS_SELFLAG_Need3D = 0x0040,
02612 COORDREFSYS_SELFLAG_AllowCheckLegacy = 0x0080,
02613 COORDREFSYS_SELFLAG_AllowDftUndefined = 0x0100,
02614 };
02615 DEFINE_ENUM_OP_BITWISE(COORDREFSYS_SELFLAGS)
02616
02617
02618
02619 ERRVALUE DlgGetCoordRefSys (
02620 MDLGPARENT dlgparent,
02621 COORDREFSYS& CoordRefSys,
02622 COORDREFSYS_SELFLAGS flags,
02623 DATUM::TYPE DatumTypesAllowed = DATUM::TYPE_Geodetic,
02624 COORDSYS::TYPE CoordSysTypesAllowed = (COORDSYS::TYPE_Projected | COORDSYS::TYPE_Ellipsoidal | COORDSYS::TYPE_Equatorial)
02625 );
02626
02628 ERRVALUE DlgGetCoordRefSys (
02629 MDLGPARENT dlgparent,
02630 const MISTRING& title,
02631 COORDREFSYS& CoordRefSys,
02632 COORDREFSYS_SELFLAGS flags = COORDREFSYS_SELFLAG_Default,
02633 DATUM::TYPE DatumTypesAllowed = DATUM::TYPE_Geodetic,
02634 COORDSYS::TYPE CoordSysTypesAllowed = (COORDSYS::TYPE_Projected | COORDSYS::TYPE_Ellipsoidal | COORDSYS::TYPE_Equatorial)
02635 );
02636
02638 inline ERRVALUE DlgGetCoordRefSys (
02639 MDLGPARENT dlgparent,
02640 COORDREFSYS& CoordRefSys,
02641 DATUM::TYPE DatumTypesAllowed = DATUM::TYPE_Geodetic,
02642 COORDSYS::TYPE CoordSysTypesAllowed = (COORDSYS::TYPE_Projected | COORDSYS::TYPE_Ellipsoidal | COORDSYS::TYPE_Equatorial),
02643 COORDREFSYS_SELFLAGS flags = COORDREFSYS_SELFLAG_Default
02644 ) { return (DlgGetCoordRefSys(dlgparent,CoordRefSys,flags,DatumTypesAllowed,CoordSysTypesAllowed)); }
02645
02647 void DlgMapCalculator (
02648 MDLGPARENT dlgparent
02649 );
02650
02651
02652
02653
02654 };
02655
02656 #undef CLASSLIBEXPORT
02657
02658 #endif // INC_MI32_SPATREF_H
02659