Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   
Bücher:

Studierende:
weitere Angebote

Partner:


Vermarktungspartner


Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Funktion "utm2deg" ohne Matlab/Informatikkenntniss

 

Carlson
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 24.05.19
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 24.05.2019, 14:59     Titel: Funktion "utm2deg" ohne Matlab/Informatikkenntniss
  Antworten mit Zitat      
Guten Tag allerseits,

wie im Titel zu lesen, würde ich gerne die Funktion "utm2deg"https://de.mathworks.com/matlabcentral/fileexchange/10914-utm2degnutzen. Dabei geht es um die Konvertierung von UTM-Koordinaten in Breitengrad/Längengrad.

Meine erste Frage dazu lautet, was ich an der gegebenen Funktion abändern/löschen muss, damit sie überhaupt funktioniert und mir ein Ergebnis liefert? Ich habe leider keinerlei Wissen auf diesem Gebiet.

Wenn dies funktioniert, würde ich gerne die x,y-Werte der Stadt Aachen einlesen:

https://www.opengeodata.nrw.de/produkte/geobasis/dgm/dgm1/

Hierbei handelt es sich um ein Datenpaket bestehend auf 60 Dateien. Wobei jede Datei 4000000 Zeilen mit x,y-Werten besitzt. Ich habe also ingesamt 240.000.000 x,y-Werte, welche eingelesen und konvertiert werden müssen. Der Parameter "utmzone" ist mit "32 U" immer der selbe. Kann mir jemand hierzu sagen, wie ich dies am schnellsten einlesen kann? Alle x,y-Werte müssen hierbei ja auch noch durch ein Semikolon getrennt werden.

Die konvertierten x,y-Werte will ich dann den z-Werten( Höhenangabe in m) der Ursprungsdateien zuordnen.

Ich weiß, dass sind wirklich viele Fragen. Aber vielleicht findet sich jemand der mir Helfen kann. Über jegliche Hilfe wäre ich sehr, sehr glücklich!

Beste Grüße aus Aachen,

Carlson

Code:
function  [Lat,Lon] = utm2deg(xx,yy,utmzone)
% -------------------------------------------------------------------------
% [Lat,Lon] = utm2deg(x,y,utmzone)
%
% Description: Function to convert vectors of UTM coordinates into Lat/Lon vectors (WGS84).
% Some code has been extracted from UTMIP.m function by Gabriel Ruiz Martinez.
%
% Inputs:
%    x, y , utmzone.
%
% Outputs:
%    Lat: Latitude vector.   Degrees.  +ddd.ddddd  WGS84
%    Lon: Longitude vector.  Degrees.  +ddd.ddddd  WGS84
%
% Example 1:
% x=[ 458731;  407653;  239027;  230253;  343898;  362850];
% y=[4462881; 5126290; 4163083; 3171843; 4302285; 2772478];
% utmzone=['30 T'; '32 T'; '11 S'; '28 R'; '15 S'; '51 R'];
% [Lat, Lon]=utm2deg(x,y,utmzone);
% fprintf('%11.6f ',lat)
%    40.315430   46.283902   37.577834   28.645647   38.855552   25.061780
% fprintf('%11.6f ',lon)
%    -3.485713    7.801235 -119.955246  -17.759537  -94.799019  121.640266
%
% Example 2: If you need Lat/Lon coordinates in Degrees, Minutes and Seconds
% [Lat, Lon]=utm2deg(x,y,utmzone);
% LatDMS=dms2mat(deg2dms(Lat))
%LatDMS =
%    40.00         18.00         55.55
%    46.00         17.00          2.01
%    37.00         34.00         40.17
%    28.00         38.00         44.33
%    38.00         51.00         19.96
%    25.00          3.00         42.41
% LonDMS=dms2mat(deg2dms(Lon))
%LonDMS =
%    -3.00         29.00          8.61
%     7.00         48.00          4.40
%  -119.00         57.00         18.93
%   -17.00         45.00         34.33
%   -94.00         47.00         56.47
%   121.00         38.00         24.96
%
% Author:
%   Rafael Palacios
%   Universidad Pontificia Comillas
%   Madrid, Spain
% Version: Apr/06, Jun/06, Aug/06
% Aug/06: corrected m-Lint warnings
%-------------------------------------------------------------------------

% Argument checking
%
error(nargchk(3, 3, nargin)); %3 arguments required
n1=length(xx);
n2=length(yy);
n3=size(utmzone,1);
if (n1~=n2 || n1~=n3)
   error('x,y and utmzone vectors should have the same number or rows');
end
c=size(utmzone,2);
if (c~=4)
   error('utmzone should be a vector of strings like "30 T"');
end

   
 
% Memory pre-allocation
%
Lat=zeros(n1,1);
Lon=zeros(n1,1);


% Main Loop
%
for i=1:n1
   if (utmzone(i,4)>'X' || utmzone(i,4)<'C')
      fprintf('utm2deg: Warning utmzone should be a vector of strings like "30 T", not "30 t"\n');
   end
   if (utmzone(i,4)>'M')
      hemis='N';   % Northern hemisphere
   else
      hemis='S';
   end

   x=xx(i);
   y=yy(i);
   zone=str2double(utmzone(i,1:2));

   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

   X = x - 500000;
   
   if hemis == 'S' || hemis == 's'
       Y = y - 10000000;
   else
       Y = y;
   end
   
   S = ( ( zone * 6 ) - 183 );
   lat =  Y / ( 6366197.724 * 0.9996 );                                    
   v = ( c / ( ( 1 + ( e2cuadrada * ( cos(lat) ) ^ 2 ) ) ) ^ 0.5 ) * 0.9996;
   a = X / v;
   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 );
   b = ( Y - Bm ) / v;
   Epsi = ( ( e2cuadrada * a^ 2 ) / 2 ) * ( cos(lat) )^ 2;
   Eps = a * ( 1 - ( Epsi / 3 ) );
   nab = ( b * ( 1 - Epsi ) ) + lat;
   senoheps = ( exp(Eps) - exp(-Eps) ) / 2;
   Delt = atan(senoheps / (cos(nab) ) );
   TaO = atan(cos(Delt) * tan(nab));
   longitude = (Delt *(180 / pi ) ) + S;
   latitude = ( lat + ( 1 + e2cuadrada* (cos(lat)^ 2) - ( 3 / 2 ) * e2cuadrada * sin(lat) * cos(lat) * ( TaO - lat ) ) * ( TaO - lat ) ) * ...
                    (180 / pi);
   
   Lat(i)=latitude;
   Lon(i)=longitude;
   
end
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 20.616
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 24.05.2019, 16:12     Titel:
  Antworten mit Zitat      
Hallo,

woraus schließt du, dass du an der Funktion etwas ändern musst? Normalerweise muss man eine Funktion nur aufrufen. Falls dir nicht klar ist, wie das geht, siehe die Beispiele im Kommentar der Funktion oder
https://de.mathworks.com/learn/tutorials/matlab-onramp.html

Ich kenne mich mit der Anwendung nicht aus, würde aber die Verbesserungsvorschläge in den Kommentaren auf File Exchange durchgehen.

Bei deiner Datenmenge solltest du die vektorisierte Version verwenden, siehe hier:
https://de.mathworks.com/matlabcent.....exchange/44242-utm2lonlat

Was du machen solltest: die Funktion so anpassen, dass sie eine einzige utmzone-Angabe übernimmt. Sollte nicht allzu schwer sein, wenn man den Code zeilenweise durchgeht.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Carlson
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 24.05.19
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 27.05.2019, 19:44     Titel:
  Antworten mit Zitat      
Guten Abend Harald,

vielen Dank für deine Antwort!

Du hattest natürlich Recht, die Funktion arbeitet nach dem Aufruf fehlerfrei! Es war ein Bedienungsfehler meinerseits, aber dank deiner hilfreichen Verlinkung finde ich mich nun gut zurecht.

Die x,y-Werte konnte ich auch gut per "Import Data" einlesen.

Es gelingt mir jedoch nicht, dass nur eine utmzone-Angabe für alle Werte übernommen wird. Auch der Kommentar aus dem File-Exchange hilft mir leider nicht:

"Well, if it is the same '30 T' for all values, just set a variable zonn = '30 T', and use it for all conversions.

[lat long] = utm2deg(easting, northing, zonn)"

Ich habe zwar eine Variable definiert, jedoch wird diese nicht für alle Konvertierungen übernommen, sodass die Meldung:

"Error using utm2deg (line 64)
x,y and utmzone vectors should have the same number or rows"

erscheint. Weißt du Rat?

Gruß Carlson
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 20.616
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 27.05.2019, 20:32     Titel:
  Antworten mit Zitat      
Hallo,

wie gesagt:
Zitat:
Was du machen solltest: die Funktion so anpassen, dass sie eine einzige utmzone-Angabe übernimmt. Sollte nicht allzu schwer sein, wenn man den Code zeilenweise durchgeht.


Das beginnt dabei, diese Zeile anzupassen zu:
Code:
if (n1~=n2 || (n1~=n3 && n3 ~= 1)


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Carlson
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 24.05.19
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 27.05.2019, 23:29     Titel:
  Antworten mit Zitat      
Hallo Harald,

die von dir angesprochene Zeile hatte ich bereits abgeändert zu :

Code:
if (n1~=n2 || n3 ~= 1)


Die darauf folgende Anweisung lasse ich ja so bestehen. Was danach noch geschehen muss weiß ich jedoch leider nicht.

Gruß Carlson
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 20.616
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 29.05.2019, 10:28     Titel:
  Antworten mit Zitat      
Hallo,

ich habe mal eine Version für eine UTM Zone angehängt. Im Testaufruf stimmen die Ergebnisse mit dem von mir gefundenen File Exchange - Beitrag überein.

Code:
x=[ 458731;  407653;  239027;  230253;  343898;  362850];
y=[4462881; 5126290; 4163083; 3171843; 4302285; 2772478];
utmzone=repmat('30 T', 6, 1);
[Lat1, Lon1]=utm2deg(x,y,utmzone)

[Lat2, Lon2]=utm2deg_singleZone(x,y,'30 T')


Grüße,
Harald

utm2deg_singleZone.m
 Beschreibung:

Download
 Dateiname:  utm2deg_singleZone.m
 Dateigröße:  4.27 KB
 Heruntergeladen:  37 mal

_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2019 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.