WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Punkte verbinden + transformieren auf Karte

 

Kiritsugu
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 02.04.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.04.2021, 22:51     Titel: Punkte verbinden + transformieren auf Karte
  Antworten mit Zitat      
Hallo.

Ich versuche 2 Punkte auf einer Karte miteinander zu verbinden, also eine einfache Gerade erstmal. Diese Geraden muss ich aber noch transformieren, allerdings nur die y-Koordinaten, sodass (hoffentlich) Kurven entstehen. Die Transformationsformel lautet:
y = 180/pi * log(tand(45 + phi/2)). Wobei Phi die geographische Breite beschreibt.

Nach obigem Vorgehen muss ich alle Punkte, d.h. in meinem Fall alle mit einem Kreuz gekennzeichneten Städte auf meiner Karte mit Berlin verbinden. Obendrein muss ich auch noch die Länge berechnen, aber das ist erstmal zweitrangig. Hat jemand eine Idee wie man das plotten kann?

So sieht meine Karte bisher aus:


Code:
clear all
close all
clc

landareas = shaperead('landareas.shp','UseGeoCoords',true);
axesm ('mercator', 'Frame', 'on', 'Grid', 'on');

%Achsengrenzen
latlim = [-86 86]; lonlim = [-180 180];

% Koordinaten
x1 = (13.41053);
y1 = (52.52437);

x2 = (116.39723);
y2 = (39.9075);

x3 = (37.61556);
y3 = (55.75222);

x4 = (-118.24368);
y4 = (34.05223);

x5 = (151.20732);
y5 = (-33.86785);

x6 = (-0.12574);
y6 = (51.50853);

x7 = (-43.2075);
y7 = (-22.90278);

x8 = (28.0436300);
y8 = (-26.2022700);


geoshow(landareas);


%x einzeichnen
plotm(y1,x1, 'x', 'MarkerSize', 10, 'LineWidth', 2);  
hold on;
plotm(y2,x2, 'x', 'MarkerSize', 10, 'LineWidth', 2);
hold on;
plotm(y3,x3, 'x', 'MarkerSize', 10, 'LineWidth', 2);
hold on;
plotm(y4,x4, 'x', 'MarkerSize', 10, 'LineWidth', 2);
hold on;
plotm(y5,x5, 'x', 'MarkerSize', 10, 'LineWidth', 2);
hold on;
plotm(y6,x6, 'x', 'MarkerSize', 10, 'LineWidth', 2);
hold on;
plotm(y7,x7, 'x', 'MarkerSize', 10, 'LineWidth', 2);
hold on;
plotm(y8,x8, 'x', 'MarkerSize', 10, 'LineWidth', 2);


%Städtename an x
textm(y1,x1, 'Berlin')
textm(y2,x2, 'Peking')
textm(y3,x3, 'Moskau')
textm(y4,x4, 'Los Angeles')
textm(y5,x5, 'Sydney')
textm(y6,x6, 'London')
textm(y7,x7, 'Rio de Janeiro')
textm(y8,x8, 'Johannesburg')
Private Nachricht senden Benutzer-Profile anzeigen


wusa
Forum-Anfänger

Forum-Anfänger


Beiträge: 42
Anmeldedatum: 20.06.17
Wohnort: Berlin
Version: 2021
     Beitrag Verfasst am: 13.04.2021, 20:28     Titel:
  Antworten mit Zitat      
Hallo Kiritsugu,
ich habe ein bisschen recherchiert. Es gibt einen Befehl

https://www.mathworks.com/help/map/ref/track2.html

Der führt zum Ziel, wenn man die Formel nicht zwingend selbst implementieren muss.
Private Nachricht senden Benutzer-Profile anzeigen
 
wusa
Forum-Anfänger

Forum-Anfänger


Beiträge: 42
Anmeldedatum: 20.06.17
Wohnort: Berlin
Version: 2021
     Beitrag Verfasst am: 13.04.2021, 21:05     Titel:
  Antworten mit Zitat      
Die entscheidenden Zeilen im Skript (Anhang):
Code:

    % circle track
    [lattrkgc,lontrkgc] = track2(Y_Ber,X_Ber,CoordTable.Y_tbl(k),CoordTable.X_tbl(k));              

    % rhumb line track = direct line
    [lattrkrh,lontrkrh] = track2('rh',Y_Ber,X_Ber,CoordTable.Y_tbl(k),CoordTable.X_tbl(k));
     
    plotm(Y_Ber,X_Ber, 'xg', 'MarkerSize', 10, 'LineWidth', 2);  
    hold on;
    plotm(CoordTable.Y_tbl(k),CoordTable.X_tbl(k), 'xr', 'MarkerSize', 10, 'LineWidth', 2);

    % Plot both tracks
    plotm(lattrkgc,lontrkgc,'Color','#0072BD')  % Navy blue, circle track
    plotm(lattrkrh,lontrkrh,'Color','#A2142F')  % Darker red, direct line
 

Viele Grüße
Michael

mercator_projection3.m
 Beschreibung:
Skript

Download
 Dateiname:  mercator_projection3.m
 Dateigröße:  1.71 KB
 Heruntergeladen:  209 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Kiritsugu
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 02.04.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.04.2021, 19:49     Titel:
  Antworten mit Zitat      
Was muss man bitte googlen um diesen track2 Befehl zu finden, ich hab so viel Zeit mit der Suche danach verschwendet. Abermals vielen Dank. Kannst du mir noch erklären was diese table Variablen machen?
Private Nachricht senden Benutzer-Profile anzeigen
 
wusa
Forum-Anfänger

Forum-Anfänger


Beiträge: 42
Anmeldedatum: 20.06.17
Wohnort: Berlin
Version: 2021
     Beitrag Verfasst am: 14.04.2021, 20:10     Titel:
  Antworten mit Zitat      
Gern!
Code:

Y_tbl = [52.52437 39.9075 55.75222 34.05223 -33.86785 51.50853 -22.90278 -26.2022700]';       % Latitude coordinates
X_tbl = [13.41053 116.39723 37.61556 -118.24368 151.20732 -0.12574 -43.2075 28.0436300]';     % Longitude coordinates

CoordTable = table(Y_tbl, X_tbl);

Y_Ber = CoordTable.Y_tbl(1);
X_Ber = CoordTable.X_tbl(1);
 

Die Koordinaten der Städte findest du nun in der Tabelle. Alle Y Koord. in einer Spalte, und alle X Koord. in einer Spalte. Die Tabelle ist erweiterbar, wenn du etwas ändern möchtest (dann auch CityPairs und CitiesDestination entspr. erweitern).

Nur für Berlin habe ich Y_Ber und X_Ber extra definiert. Deswegen startet z.Bsp auch die for Schleife bei k=2 also bei den Koord. für Peking.

Die Tabelle "CoordTable" siehst du nach der Ausführung des Skript rechts im Workspace (ist auch klickbar Wink )

Mit CoordTable "Punkt" greifst du auf eine Spalte der Tabelle zu:
Code:

CoordTable.Y_tbl(1);
% gib mir den ersten Wert in der Spalte Y_tbl aus CoordTable
 


Code:

[lattrkgc,lontrkgc] = track2(Y_Ber,X_Ber,CoordTable.Y_tbl(k),CoordTable.X_tbl(k))
% mit der Laufvariable k gehst du bei jeder Iteration deine Koordinatenpaare (ab k=2 ) Zeile für Zeile durch
% Berlin braucht kein "k" - es ist ja immer Startpunkt
 
Private Nachricht senden Benutzer-Profile anzeigen
 
wusa
Forum-Anfänger

Forum-Anfänger


Beiträge: 42
Anmeldedatum: 20.06.17
Wohnort: Berlin
Version: 2021
     Beitrag Verfasst am: 15.04.2021, 22:27     Titel:
  Antworten mit Zitat      
In Zeile 20 habe ich übersehen, das "-1" beim Start der for loop rauszunehmen.
Im Anhang das Skript korrigiert!

mercator_projection3.m
 Beschreibung:
Skript

Download
 Dateiname:  mercator_projection3.m
 Dateigröße:  1.7 KB
 Heruntergeladen:  182 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Kiritsugu
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 02.04.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.04.2021, 08:57     Titel:
  Antworten mit Zitat      
Genau danke. Dann wird auch Johannesburg angezeigt. Hab ich auch schon festgestellt, deswegen hab ich meine letzte Mitteilung gelöscht. Very Happy
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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.