2017-03-09 1 views
0

In Matlab habe ich eine Liste von 2410 Standorten durch ihre Breite und Länge gegeben. Ich möchte eine Entfernungsmatrix in Kilometern erstellen. Ich weiß, wie man das in Grad macht, aber wie mache ich das in Kilometern? Ich habe die Mapping-Toolbox mit 2016b. Vielen Dank!Entfernungsmatrix in Kilometern von Breiten- und Längengrad in Matlab

Zum Beispiel meine Distanzmatrix in Grad sieht wie folgt aus:

enter image description here

Antwort

1

Zuerst müssen Sie Ihre selbst fragen, was Sie mit dem Abstand bedeuten.

Wollen Sie den euklidischen Abstand zwischen den Punkten? Stellen Sie sich vor, Sie könnten von einem Punkt zum anderen durch die Erde tunneln, das ist der euklidische Abstand zwischen den Punkten. Um diese Entfernung zu berechnen, müssen Sie zuerst jeden der lat langen Punkte in ecef Punkte umrechnen. Sie können diese Konvertierung mit diesem Code (https://www.mathworks.com/matlabcentral/fileexchange/7942-covert-lat--lon--alt-to-ecef-cartesian) durchführen. Nachdem Sie jeden Punkt in einen ecef-Punkt konvertiert haben, können Sie nun die euklidische Norm https://en.wikipedia.org/wiki/Norm_(mathematics)) zwischen jedem möglichen Punktepaar berechnen.

Oder möchten Sie die Entfernung berechnen, die ein Reisender zurücklegen würde, wenn er entlang der Erdoberfläche laufen würde. In Anbetracht dessen ist dies ein viel schwierigeres Problem, das einen iterativen Solver erfordert. Glücklicherweise hat jemand bereits die Arbeit zur Implementierung eines Algorithmus getan, um dies für Sie zu tun (https://www.mathworks.com/matlabcentral/fileexchange/5379-geodetic-distance-on-wgs84-earth-ellipsoid). Beachten Sie, dass wenn Sie die Kommentare dieser Funktion lesen, es so aussieht, als ob mathworks bereits einen anderen Algorithmus implementiert hat, um dieselbe Berechnung in der Mapping Toolbox durchzuführen. Um die Matrix zu berechnen, müssen Sie einfach über jede mögliche Paarung von lat langen Punkten iterieren und sie in die vdist-Funktion einklinken.

Folgendes sollte die Entfernungsmatrix für Sie mithilfe der obigen vdist-Funktion berechnen. Hinweis Ich habe diesen Code nicht getestet, um Fehler zu korrigieren.

points % assuming this is a matrix of your points [2 x N] formatted as follows 
% [ lat1 , lat2, ... ] 
% [ lon1 , lat2, ... ] 

dist = zeros(N,N); % the resulting distance matrix 

for(idx1 = 1:N) 
    for(idx2 = 1:N) 
     dist(idx1,idx2) = vdist(points(1,idx1),points(2,idx1),points(1,idx2)points(2,idx2)); 
    end 
end 

Hinweis, da die Erdoberfläche vielfältig ist (https://en.wikipedia.org/wiki/Manifold) die Ergebnisse ähnlich sein, wenn die Punkte nahe beieinander. Wenn die Geschwindigkeit für Sie wichtig ist und die Punkte eng gruppiert sind, können Sie die erste Methode zum Berechnen der Abstandsmatrix verwenden. Wie nah die Punkte sein sollten, um diese Näherung zu nutzen, hängt davon ab, wie genau Sie die Ergebnisse benötigen.

+0

danke - Ich möchte die zweite Option. Ich bin mir nicht sicher, wie ich das aus einer Liste von Längen- und Breitenpunkten programmieren soll. Irgendwelche Vorschläge wären großartig. – user2861089

+0

Danke! Das ist sehr hilfreich. Ich änderte eine Zeile leicht: 'Punkte = [lat lon]; N = 2410; % Anzahl der Plätze dist = Nullen (N, N); % der resultierenden Distanzmatrix für idx1 = 1: N für idx2 = 1: N dist (idx1, idx2) = vdist (Punkte (1, idx1), Punkte (1, idx2), Punkte (2, idx1) , Punkte (2, idx2)); Ende Ende ', aber ich bekomme den Fehler 'Index überschreitet Matrix Dimensionen.' – user2861089

+0

Was ist die Matrix, wo Ihr Index überschritten wird? Ist es die Punktematrix? Meine Vermutung ist, dass es so ist. Was ist die Ausgabe der Größe (Punkte)? – kabla002

Verwandte Themen