134 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Matlab
		
	
	
			
		
		
	
	
			134 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Matlab
		
	
	
| function  [x,y,utmzone] = deg2utm(Lat,Lon)
 | |
| % -------------------------------------------------------------------------
 | |
| % [x,y,utmzone] = deg2utm(Lat,Lon)
 | |
| %
 | |
| % Description: Function to convert lat/lon vectors into UTM coordinates (WGS84).
 | |
| % Some code has been extracted from UTM.m function by Gabriel Ruiz Martinez.
 | |
| %
 | |
| % Inputs:
 | |
| %    Lat: Latitude vector.   Degrees.  +ddd.ddddd  WGS84
 | |
| %    Lon: Longitude vector.  Degrees.  +ddd.ddddd  WGS84
 | |
| %
 | |
| % Outputs:
 | |
| %    x, y , utmzone.   See example
 | |
| %
 | |
| % Example 1:
 | |
| %    Lat=[40.3154333; 46.283900; 37.577833; 28.645650; 38.855550; 25.061783];
 | |
| %    Lon=[-3.4857166; 7.8012333; -119.95525; -17.759533; -94.7990166; 121.640266];
 | |
| %    [x,y,utmzone] = deg2utm(Lat,Lon);
 | |
| %    fprintf('%7.0f ',x)
 | |
| %       458731  407653  239027  230253  343898  362850
 | |
| %    fprintf('%7.0f ',y)
 | |
| %      4462881 5126290 4163083 3171843 4302285 2772478
 | |
| %    utmzone =
 | |
| %       30 T
 | |
| %       32 T
 | |
| %       11 S
 | |
| %       28 R
 | |
| %       15 S
 | |
| %       51 R
 | |
| %
 | |
| % Example 2: If you have Lat/Lon coordinates in Degrees, Minutes and Seconds
 | |
| %    LatDMS=[40 18 55.56; 46 17 2.04];
 | |
| %    LonDMS=[-3 29  8.58;  7 48 4.44];
 | |
| %    Lat=dms2deg(mat2dms(LatDMS)); %convert into degrees
 | |
| %    Lon=dms2deg(mat2dms(LonDMS)); %convert into degrees
 | |
| %    [x,y,utmzone] = deg2utm(Lat,Lon)
 | |
| %
 | |
| % Author: 
 | |
| %   Rafael Palacios
 | |
| %   Universidad Pontificia Comillas
 | |
| %   Madrid, Spain
 | |
| % Version: Apr/06, Jun/06, Aug/06, Aug/06
 | |
| % Aug/06: fixed a problem (found by Rodolphe Dewarrat) related to southern 
 | |
| %    hemisphere coordinates. 
 | |
| % Aug/06: corrected m-Lint warnings
 | |
| %-------------------------------------------------------------------------
 | |
| 
 | |
| % Argument checking
 | |
| %
 | |
| error(nargchk(2, 2, nargin));  %2 arguments required
 | |
| n1=length(Lat);
 | |
| n2=length(Lon);
 | |
| if (n1~=n2)
 | |
|    error('Lat and Lon vectors should have the same length');
 | |
| end
 | |
| 
 | |
| 
 | |
| % Memory pre-allocation
 | |
| %
 | |
| x=zeros(n1,1);
 | |
| y=zeros(n1,1);
 | |
| utmzone(n1,:)='60 X';
 | |
| 
 | |
| % Main Loop
 | |
| %
 | |
| for i=1:n1
 | |
|    la=Lat(i);
 | |
|    lo=Lon(i);
 | |
| 
 | |
|    sa = 6378137.000000 ; sb = 6356752.314245;
 | |
|          
 | |
|    %e = ( ( ( sa ^ 2 ) - ( sb ^ 2 ) ) ^ 0.5 ) / sa;
 | |
|    e2 = ( ( ( sa ^ 2 ) - ( sb ^ 2 ) ) ^ 0.5 ) / sb;
 | |
|    e2cuadrada = e2 ^ 2;
 | |
|    c = ( sa ^ 2 ) / sb;
 | |
|    %alpha = ( sa - sb ) / sa;             %f
 | |
|    %ablandamiento = 1 / alpha;   % 1/f
 | |
| 
 | |
|    lat = la * ( pi / 180 );
 | |
|    lon = lo * ( pi / 180 );
 | |
| 
 | |
|    Huso = fix( ( lo / 6 ) + 31);
 | |
|    S = ( ( Huso * 6 ) - 183 );
 | |
|    deltaS = lon - ( S * ( pi / 180 ) );
 | |
| 
 | |
|    if (la<-72), Letra='C';
 | |
|    elseif (la<-64), Letra='D';
 | |
|    elseif (la<-56), Letra='E';
 | |
|    elseif (la<-48), Letra='F';
 | |
|    elseif (la<-40), Letra='G';
 | |
|    elseif (la<-32), Letra='H';
 | |
|    elseif (la<-24), Letra='J';
 | |
|    elseif (la<-16), Letra='K';
 | |
|    elseif (la<-8), Letra='L';
 | |
|    elseif (la<0), Letra='M';
 | |
|    elseif (la<8), Letra='N';
 | |
|    elseif (la<16), Letra='P';
 | |
|    elseif (la<24), Letra='Q';
 | |
|    elseif (la<32), Letra='R';
 | |
|    elseif (la<40), Letra='S';
 | |
|    elseif (la<48), Letra='T';
 | |
|    elseif (la<56), Letra='U';
 | |
|    elseif (la<64), Letra='V';
 | |
|    elseif (la<72), Letra='W';
 | |
|    else Letra='X';
 | |
|    end
 | |
| 
 | |
|    a = cos(lat) * sin(deltaS);
 | |
|    epsilon = 0.5 * log( ( 1 +  a) / ( 1 - a ) );
 | |
|    nu = atan( tan(lat) / cos(deltaS) ) - lat;
 | |
|    v = ( c / ( ( 1 + ( e2cuadrada * ( cos(lat) ) ^ 2 ) ) ) ^ 0.5 ) * 0.9996;
 | |
|    ta = ( e2cuadrada / 2 ) * epsilon ^ 2 * ( cos(lat) ) ^ 2;
 | |
|    a1 = sin( 2 * lat );
 | |
|    a2 = a1 * ( cos(lat) ) ^ 2;
 | |
|    j2 = lat + ( a1 / 2 );
 | |
|    j4 = ( ( 3 * j2 ) + a2 ) / 4;
 | |
|    j6 = ( ( 5 * j4 ) + ( a2 * ( cos(lat) ) ^ 2) ) / 3;
 | |
|    alfa = ( 3 / 4 ) * e2cuadrada;
 | |
|    beta = ( 5 / 3 ) * alfa ^ 2;
 | |
|    gama = ( 35 / 27 ) * alfa ^ 3;
 | |
|    Bm = 0.9996 * c * ( lat - alfa * j2 + beta * j4 - gama * j6 );
 | |
|    xx = epsilon * v * ( 1 + ( ta / 3 ) ) + 500000;
 | |
|    yy = nu * v * ( 1 + ta ) + Bm;
 | |
| 
 | |
|    if (yy<0)
 | |
|        yy=9999999+yy;
 | |
|    end
 | |
| 
 | |
|    x(i)=xx;
 | |
|    y(i)=yy;
 | |
|    utmzone(i,:)=sprintf('%02d %c',Huso,Letra);
 | |
| end
 | |
| 
 |