/////////////////////////////////////////////////////////////////////////////// // 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 _OD_DB_GEOCOORDINATESYSTEM_IMPL_ #define _OD_DB_GEOCOORDINATESYSTEM_IMPL_ #include "OdDbGeoCoordinateSystem.h" #include "SpatialReference/OdCategoryDefinition.h" #include "SpatialReference/OdCoordinateReferenceSystemTransformation.h" #include "SpatialReference/OdCompoundCoordinateReferenceSystemDefinition.h" using namespace OdSpatialReference; #include "TD_PackPush.h" class OdDbGeoCoordinateSystemCategoryImpl : public OdDbGeoCoordinateSystemCategory { ODRX_DECLARE_MEMBERS(OdDbGeoCoordinateSystemCategoryImpl); public: virtual OdResult getId(OdString& sCategoryId) const ODRX_OVERRIDE; virtual OdResult getNumOfCoordinateSystem(int& nNum) const ODRX_OVERRIDE; virtual OdResult getCoordinateSystemAt(int nIndex, OdDbGeoCoordinateSystemPtr& pCoordSys) const ODRX_OVERRIDE; virtual OdResult getCoordinateSystemIds(OdStringArray& arrIds) const ODRX_OVERRIDE; virtual OdResult getNumOfVerticalCoordinateSystem(int& nNum) const ODRX_OVERRIDE; virtual OdResult getVerticalCoordinateSystemAt(int nIndex, OdDbGeoVerticalCoordinateSystemPtr& pCoordSys) const ODRX_OVERRIDE; virtual OdResult getVerticalCoordinateSystemIds(OdStringArray& arrIds) const ODRX_OVERRIDE; static OdResult createAll(OdArray& arrCategories); private: OdCategoryDefinitionPtr m_pCategory; }; typedef OdSmartPtr OdDbGeoCoordinateSystemCategoryImplPtr; class OdDbGeoCoordinateSystemImpl : public OdDbGeoCoordinateSystem { ODRX_DECLARE_MEMBERS(OdDbGeoCoordinateSystemImpl); public: virtual OdResult getId(OdString& sCoordSysId) const ODRX_OVERRIDE; virtual OdResult getEpsgCode(int& nEpsgCode) const ODRX_OVERRIDE; virtual OdResult getType(OdDbGeoCoordinateSystem::Type& eType) const ODRX_OVERRIDE; virtual OdResult getDescription(OdString& sDescription) const ODRX_OVERRIDE; virtual OdResult getSource(OdString& sSource) const ODRX_OVERRIDE; virtual OdResult getUnit(OdDb::UnitsValue& eUnitsValue) const ODRX_OVERRIDE; virtual OdResult getUnit(OdDbGeoCoordinateSystem::Unit& eUnit) const ODRX_OVERRIDE; virtual OdResult getUnit(OdString& sUnit) const ODRX_OVERRIDE; virtual OdResult getUnitScale(double& dUnitScale) const ODRX_OVERRIDE; virtual OdResult getProjectionCode(OdDbGeoCoordinateSystem::ProjectionCode& ePrjCode) const ODRX_OVERRIDE; virtual OdResult getProjectionParameters(OdArray& arrPrjParams, bool bIncludeSpecialParams) const ODRX_OVERRIDE; virtual OdResult getDatum(OdDbGeoDatum& datum) const ODRX_OVERRIDE; virtual OdResult getDatumId(OdString& sDatumId) const ODRX_OVERRIDE; virtual OdResult getEllipsoid(OdDbGeoEllipsoid& ellipsoid) const ODRX_OVERRIDE; virtual OdResult getOffset(OdGeVector2d& voffset) const ODRX_OVERRIDE; virtual OdResult getCartesianExtents(OdGeExtents2d& exts) const ODRX_OVERRIDE; virtual OdResult getGeodeticExtents(OdGeExtents2d& exts) const ODRX_OVERRIDE; virtual OdResult getXmlRepresentation(OdString& sXml) const ODRX_OVERRIDE; virtual OdResult getWktRepresentation(OdString& sWkt) const ODRX_OVERRIDE; virtual OdResult getStatus(OdDbGeoCoordinateSystem::StatusType& eStatusType) const ODRX_OVERRIDE; static OdResult create(const OdString& sCoordSysIdOrFullDef, OdDbGeoCoordinateSystemPtr& pCoordSys); static OdResult createAll(const OdGePoint3d& ptGeo, OdArray& arrCoordSys); static OdResult createAll(OdArray& arrCoordSys, const OdDbGeoCoordinateSystemCategory* pCategory = NULL); void init(OdCoordinateReferenceSystemDefinition* pCRSD); private: OdCoordinateReferenceSystemDefinitionPtr m_pCRSD; }; typedef OdSmartPtr OdDbGeoCoordinateSystemImplPtr; class OdDbGeoVerticalCoordinateSystemImpl : public OdDbGeoVerticalCoordinateSystem { ODRX_DECLARE_MEMBERS(OdDbGeoVerticalCoordinateSystemImpl); public: virtual OdResult getId(OdString& sCoordSysId) const ODRX_OVERRIDE; virtual OdResult getEpsgCode(int& nEpsgCode) const ODRX_OVERRIDE; virtual OdResult getType(OdDbGeoVerticalCoordinateSystem::Type& eType) const ODRX_OVERRIDE; virtual OdResult getDescription(OdString& sDescription) const ODRX_OVERRIDE; virtual OdResult getAxisDirection(OdDbGeoVerticalCoordinateSystem::AxisDirection& eAxisDirection) const ODRX_OVERRIDE; virtual OdResult getUnit(OdDb::UnitsValue& eUnitsValue) const ODRX_OVERRIDE; virtual OdResult getUnit(OdDbGeoCoordinateSystem::Unit& eUnit) const ODRX_OVERRIDE; virtual OdResult getUnitScale(double& dUnitScale) const ODRX_OVERRIDE; virtual OdResult getDatum(OdDbGeoDatum& datum) const ODRX_OVERRIDE; virtual OdResult getDatumId(OdString& sDatumId) const ODRX_OVERRIDE; virtual OdResult getGeodeticExtents(OdGeExtents2d& exts) const ODRX_OVERRIDE; virtual OdResult getXmlRepresentation(OdString& sXml) const ODRX_OVERRIDE; virtual OdResult getStatus(OdDbGeoCoordinateSystem::StatusType& eStatusType) const ODRX_OVERRIDE; static OdResult create(const OdString& sCoordSysIdOrFullDef, OdDbGeoVerticalCoordinateSystemPtr& pCoordSys); static OdResult createAll(OdArray& arrCoordSys, const OdDbGeoCoordinateSystemCategory* pCategory = NULL); void init(OdVerticalCoordinateReferenceSystemDefinition* pVCRSD); private: OdVerticalCoordinateReferenceSystemDefinitionPtr m_pVCRSD; }; typedef OdSmartPtr OdDbGeoVerticalCoordinateSystemImplPtr; class OdDbGeoCompoundCoordinateSystemImpl : public OdDbGeoCompoundCoordinateSystem { ODRX_DECLARE_MEMBERS(OdDbGeoCompoundCoordinateSystemImpl); public: virtual OdResult getGeodeticCoordinateSystem(OdDbGeoCoordinateSystemPtr& pCoordSys) const ODRX_OVERRIDE; virtual OdResult getVerticalCoordinateSystem(OdDbGeoVerticalCoordinateSystemPtr& pCoordSys) const ODRX_OVERRIDE; virtual OdResult getXmlRepresentation(OdString& sXml) const ODRX_OVERRIDE; virtual OdResult getWktRepresentation(OdString& sWkt) const ODRX_OVERRIDE; static OdResult create(const OdString& sCoordSysIdOrFullDef, OdDbGeoCompoundCoordinateSystemPtr& pCoordSys); static OdResult verify(const OdString& sCoordSysId, const OdString& sVerticalCoordSysId); private: OdCoordinateReferenceSystemDefinitionPtr m_pCRSD; OdVerticalCoordinateReferenceSystemDefinitionPtr m_pVCRSD; }; typedef OdSmartPtr OdDbGeoCompoundCoordinateSystemImplPtr; class OdDbGeoCoordinateSystemTransformerImpl : public OdDbGeoCoordinateSystemTransformer { ODRX_DECLARE_MEMBERS(OdDbGeoCoordinateSystemTransformerImpl); public: virtual OdResult getSourceCoordinateSystemId(OdString& sSourceCoordSysId) const ODRX_OVERRIDE; virtual OdResult getTargetCoordinateSystemId(OdString& sTargetCoordSysId) const ODRX_OVERRIDE; virtual OdResult transformPoint(const OdGePoint3d& ptIn, OdGePoint3d& ptOut) const ODRX_OVERRIDE; virtual OdResult transformPoints(const OdGePoint3dArray& arrPtIn, OdGePoint3dArray& arrPtOut) const ODRX_OVERRIDE; static OdResult transformPoint(const OdString& sSourceCoordSysId, const OdString& sTargetCoordSysId, const OdGePoint3d& arrPtIn, OdGePoint3d& arrPtOut); static OdResult transformPoints(const OdString& sSourceCoordSysId, const OdString& sTargetCoordSysId, const OdGePoint3dArray& arrPtIn, OdGePoint3dArray& arrPtOut); static OdResult create(const OdString& sSourceCoordSysId, const OdString& sTargetCoordSysId, OdDbGeoCoordinateSystemTransformerPtr& pCoordSysTransformer); private: OdCoordinateReferenceSystemTransformationPtr m_pTransformation; }; typedef OdSmartPtr OdDbGeoCoordinateSystemTransformerImplPtr; #include "TD_PackPop.h" #endif //_OD_DB_GEOCOORDINATESYSTEM_IMPL_