/////////////////////////////////////////////////////////////////////////////// // 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_ODCOMPOUNDDATUMSHIFT_INCLUDED_ #define _ODSPATIALREFERENCE_ODCOMPOUNDDATUMSHIFT_INCLUDED_ #include "OdCoordinateReferenceSystemDefinition.h" #include "OdVerticalCoordinateReferenceSystemDefinition.h" namespace OdSpatialReference { class OdCompoundDatumShift; /** \details This template class is a specialization of the OdSmartPtr class for OdCompoundDatumShift object pointers. */ typedef OdSmartPtr OdCompoundDatumShiftPtr; class OdCompoundDatumShiftImpl; class TD_SPATIALREFERENCE_API OdCompoundDatumShift : public OdRxObject { ODSPREF_RX_WITH_IMPL_DECLARE_MEMBERS(OdCompoundDatumShift); public: /** \details Creates compound datum shift by source and target coordinate systems. \param pSourceCRSD [in] Source coordinate reference system definition. \param pSourceVCRSD [in] Source vertical coordinate reference system definition. \param pTargetCRSD [in] Target vertical coordinate reference system definition. \param pTargetVCRSD [in] Target vertical coordinate reference system definition. \param pDatumShift [out] Pointer to compound datum shift, result of loading. \returns Returns eOK if successful, or an appropriate error code if not. */ static OdResult load( const OdCoordinateReferenceSystemDefinition* pSourceCRSD, const OdVerticalCoordinateReferenceSystemDefinition* pSourceVCRSD, const OdCoordinateReferenceSystemDefinition* pTargetCRSD, const OdVerticalCoordinateReferenceSystemDefinition* pTargetVCRSD, OdCompoundDatumShiftPtr& pDatumShift ); /** \details Creates compound datum shift by source and target coordinate systems. \param sCodeSourceCS [in] Source coordinate reference system code. \param sCodeSourceVerticalCS [in] Source vertical coordinate reference system code. \param sCodeTargetCS [in] Target vertical coordinate reference system code. \param sCodeTargetVerticalCS [in] Target vertical coordinate reference system code. \param pDatumShift [out] Pointer to compound datum shift, result of loading. \returns Returns eOK if successful, or an appropriate error code if not. */ static OdResult load( const OdString& sCodeSourceCS, const OdString& sCodeSourceVerticalCS, const OdString& sCodeTargetCS, const OdString& sCodeTargetVerticalCS, OdCompoundDatumShiftPtr& pDatumShift ); /** \details Converts coordinate (longitude, latitude, height) using current compound datum shift. \param dLon [in/out] Longitude. \param dLat [in/out] Latitude. \param dHeight [in/out] Height. \returns Returns eOK if successful, or an appropriate error code if not. */ OdResult convert3D(double& dLon, double& dLat, double& dHeight) const; }; } #endif //_ODSPATIALREFERENCE_ODCOMPOUNDDATUMSHIFT_INCLUDED_