Index: trunk/BNC/src/bncutils.cpp
===================================================================
--- trunk/BNC/src/bncutils.cpp	(revision 7243)
+++ trunk/BNC/src/bncutils.cpp	(revision 7244)
@@ -409,4 +409,22 @@
 }
 
+// Rectangular Coordinates -> Geocentric Coordinates
+////////////////////////////////////////////////////////////////////////////
+void xyz2geoc(const double* XYZ, double* Geoc) {
+
+  const double bell = t_CST::aell*(1.0-1.0/t_CST::fInv) ;
+  const double e2   = (t_CST::aell*t_CST::aell-bell*bell)/(t_CST::aell*t_CST::aell) ;
+
+  double Ell[3];
+  xyz2ell(XYZ, Ell);
+
+  double rho = sqrt(XYZ[0]*XYZ[0]+XYZ[1]*XYZ[1]+XYZ[2]*XYZ[2]);
+  double Rn = t_CST::aell/sqrt(1-(e2)*pow(sin(Ell[0]),2));
+
+  Geoc[0] = atan((1-e2 * Rn/(Rn + Ell[2])) * tan(Ell[0]));
+  Geoc[1] = Ell[1];
+  Geoc[2] = rho-t_CST::rgeoc;
+}
+
 // 
 ////////////////////////////////////////////////////////////////////////////
Index: trunk/BNC/src/bncutils.h
===================================================================
--- trunk/BNC/src/bncutils.h	(revision 7243)
+++ trunk/BNC/src/bncutils.h	(revision 7244)
@@ -73,4 +73,6 @@
 
 t_irc        xyz2ell(const double* XYZ, double* Ell);
+
+void         xyz2geoc(const double* XYZ, double* Geoc);
 
 void         xyz2neu(const double* Ell, const double* xyz, double* neu);
