--- a
+++ b/inst/op_inv.m
@@ -0,0 +1,146 @@
+## Copyright (C) 2009, José Luis García Pallero, <jgpallero@gmail.com>
+##
+## This file is part of OctPROJ.
+##
+## OctPROJ is free software; you can redistribute it and/or modify it
+## under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 3 of the License, or (at
+## your option) any later version.
+##
+## This program is distributed in the hope that it will be useful, but
+## WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+## General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with Octave; see the file COPYING.  If not, see
+## <http://www.gnu.org/licenses/>.
+
+## -*- texinfo -*-
+## @deftypefn {Function File}{[@var{lon},@var{lat}] =}op_inv(@var{X},@var{Y},@var{params})
+##
+## This function unprojects cartesian projected coordinates (in a defined
+## cartographic projection) into geodetic coordinates using the PROJ.4 function
+## pj_inv().
+##
+## @var{X} is a scalar or a vector containing the X projected coordinates.
+## @var{Y} is a scalar or a vector containing the Y projected coordinates.
+## @var{params} is a text string containing the projection parameters in PROJ.4
+## format.
+##
+## @var{lon} is a scalar or a column vector containing the geodetic longitude,
+## in radians.
+## @var{lat} is a scalar or a column vector containing the geodetic latitude, in
+## radians.
+##
+## If a projection error occurs, the resultant coordinates for the affected
+## points have both Inf value and a warning message is emitted (one for each
+## erroneous point).
+## @seealso{op_fwd}
+## @end deftypefn
+
+
+
+
+function [lon,lat] = op_inv(X,Y,params)
+
+try
+    functionName = 'op_inv';
+    argumentNumber = 3;
+
+%*******************************************************************************
+%NUMBER OF INPUT ARGUMENTS CHECKING
+%*******************************************************************************
+
+    %number of input arguments checking
+    if nargin~=argumentNumber
+        error(['Incorrect number of input arguments (%d)\n\t         ',...
+               'Correct number of input arguments = %d'],...
+              nargin,argumentNumber);
+    end
+
+%*******************************************************************************
+%INPUT ARGUMENTS CHECKING
+%*******************************************************************************
+
+    %X must be a column vector
+    if ismatrix(X)
+        %lon dimensions
+        [row,col] = size(X);
+        %checking dimensions
+        if (row>1)&(col>1)
+            %error message
+            error('The first input argument must be scalar or column vector');
+        elseif col>1
+            %convert into column vector, if it was a row vector
+            X = X(:);
+        end
+    else
+        error('The first input argument is not numeric');
+    end
+    %Y must be a column vector
+    if ismatrix(Y)
+        %lat dimensions
+        [row,col] = size(Y);
+        %checking dimensions
+        if (row>1)&(col>1)
+            %error message
+            error('The second input argument must be scalar or column vector');
+        elseif col>1
+            %convert into column vector, if it was a row vector
+            Y = Y(:);
+        end
+    else
+        error('The second input argument is not numeric');
+    end
+    %params must be a text string
+    if ~ischar(params)
+        error('The third input argument is not a text string');
+    end
+catch
+    %error message
+    error('\n\tIn function %s:\n\t -%s ',functionName,lasterr);
+end
+
+%*******************************************************************************
+%COMPUTATION
+%*******************************************************************************
+
+try
+    %calling oct function
+    [lon,lat] = _op_inv(X,Y,params);
+catch
+    %error message
+    error('\n\tIn function %s:\n\tIn function %s ',functionName,lasterr);
+end
+
+
+
+
+%*****END OF FUNCION*****
+
+
+
+
+%*****FUNCTION TESTS*****
+
+
+
+
+% %!test
+% %!  [x,y,z]=op_params(pi/5,pi/3,1000,6378388,1/297);
+% %!  assert(x,2587045.81927379,1e-5)
+% %!  assert(y,1879598.80960088,1e-5)
+% %!  assert(z,5501461.60635409,1e-5)
+%!error(op_inv)
+%!error(op_inv(1,2,3,4))
+%!error(op_inv('string',2))
+%!error(op_inv(1,'string',3))
+%!error(op_inv(1,2,3))
+%!error(op_inv([1 1;2 2],2,'+proj=poly +ellps=clrk66 +lon_0=90W'))
+%!error(op_inv(1,[2 2;3 3],'+proj=poly +ellps=clrk66 +lon_0=90W'))
+
+
+
+
+%*****END OF TESTS*****