///////////////////////////////////////////////////////////////////////////// // Transform // aus WGS84 zum eigenen geodätischem Datum, d.h. WBS84-Offsets // subtrahieren HRESULT CTDSThrough7ParameterPositionVector::Transform(long nCoords, LPTCSDBLCOORD pData) { bool fNeedsShift = (0 != m_dx || 0 != m_dy || 0 != m_dz) ? true : false; bool fNeedsRotation = (0 != m_rx || 0 != m_ry || 0 != m_rz || 0 != m_ds) ? true : false; double ds = 1. - m_ds; for(int i = 0; i < nCoords; i++, pData++) { pData->c1 /= m_scaleXIn; pData->c2 /= m_scaleYIn; if (fNeedsShift || fNeedsRotation) { LLH2XYZ(m_DstSys, pData); if (fNeedsShift) { pData->c1 -= m_dx; pData->c2 -= m_dy; pData->h -= m_dz; } if (fNeedsRotation) { double x = (ds * pData->c1) + (m_rz * pData->c2) - (m_ry * pData->h); double y = -(m_rz * pData->c1) + (ds * pData->c2) + (m_rx * pData->h); pData->h = (m_ry * pData->c1) - (m_rx * pData->c2) + (ds * pData->h); pData->c1 = x; pData->c2 = y; } XYZ2LLH(m_MeSelf, pData); } pData->c1 *= m_scaleXOut; pData->c2 *= m_scaleYOut; } return S_OK; }
///////////////////////////////////////////////////////////////////////////// // Transform // aus WGS84 zum eigenen geodätischem Datum, d.h. WBS84-Offsets // subtrahieren HRESULT CTDSThroughECEF::Transform(long nCoords, LPTCSDBLCOORD pData) { bool fNeedsShift = (0 != m_dx || 0 != m_dy || 0 != m_dz) ? true : false; for(int i = 0; i < nCoords; i++, pData++) { pData->c1 /= m_scaleXIn; pData->c2 /= m_scaleYIn; if (fNeedsShift) { LLH2XYZ(m_DstSys, pData); pData->c1 -= m_dx; pData->c2 -= m_dy; pData->h -= m_dz; XYZ2LLH(m_MeSelf, pData); } pData->c1 *= m_scaleXOut; pData->c2 *= m_scaleYOut; } return S_OK; }