Verfasst am: 12.01.2011, 00:33
Titel: Aus Matlab an google Maps übergeben
Hallo Leute,
ist es möglich von Matlab aus eine Route in Google Earth oder Maps zu berechnen?
Also ich gebe in Matlab den Startort und den Zielort ein und bekomme dann den Link der Route zurück? Oder die Koordinaten der Route? Das muss doch irgendwie möglich sein.
Hierbei sei jedoch anzumerken, dass ich in manchen Fälllen die Entfernung und Zeit nicht erhalte, da es "urlread" einfach nicht mit einliest (auch wenn die Information im google Quelltext im enthalten ist). Ich habe leider keine Ahnung warum dies so ist (hat dies vielleicht was mit Java zu tun?).
Ausserdem hatte ich Probleme unter 2008a mit Hilfe des web Befehls direkt auf die Seite von google maps zu gelangen (er öffnete immer nur www.google.de). Durch die Verwendung des Matlab Browsers (im web Befehl) wurde zwar die richtige Homepage angezeigt, jedoch mit sehr schlechter und kleiner kleiner Darstellung. Unter 2010a gab es keine dieser Probleme.
Die regexp Ausdrücke lassen sich sicher noch optimieren.
Auf dieser Seite kann ich die Daten konvertieren und Höhendaten hinzufügen. Diese widerum möchte ich dann wieder in Matlab haben um die einzelnen Koordinaten in 3 Spalten zu bekommen.
Das hört sich sehr kompliziert an. Ich weis leider keinen anderen Weg. Und damit der Anwender nicht so viele Seiten öffnen und Daten hin und her kopieren muss, möchte ich das alles über Matlab steuern.
Mit deinem Ansatz kann ich erstmal versuchen das weiter zu entwickeln. Aber für jede Hilfe bin ich sehr dankbar!
Wie hast du das denn rausgefunden? Den ersten Teil verstehe ich ja, aber diese beiden Zeilen gar nicht.
Ah doch, jetzt habe ich es auch im Quelltext gefunden. Da wäre ich ja nie drauf gekommen. So müsste man doch auch direkt an die Koordinaten kommen? Anders kann es die Seite GPSVisualizer auch nicht machen!
vorweg: Normalerweise werden in diesem Forum keine kompletten Aufgaben gelöst. Jedoch hasst du es irgendwie geschafft mich für deine Problemstellung zu interessieren, so dass ich mich heute ziemlich intensiv mit google maps , Koordinaten usw. auseinander gesetzt habe. Ich denke ich habe nach intensiver google Suche nun eine Lösung gefunden!!!
Um die Latitude, Longitude und Höhe von google maps zu extrahieren musst du die URL um %output=kml erweitern. Was kml ist (falls du es nicht wissen solltest) einfach mal googlen. Weitere google maps Parameter findest du hier: http://mapki.com/wiki/Google_Map_Parameters
Damit erhalten wir nun im Quellcode die gewünschten Koordinaten. Jedoch gibt google maps nicht die Höhenangaben mit an bzw. alle sind Null. Bei der Suche dieses Problem zu lösen bin ich auf diese Seite gestossen: http://www.nearby.org.uk/elevation-kml.phps , welche spezielle Homepages enthält, welche die Höhe an einer bestimmten lat/long Position bestimmen.
Alles in Matlab zusammengepackt sieht dann etwa so aus:
Code:
start = 'München'; % 'Dachauer Straße 5, München, Deutschland'
destination = 'Erding'; % ' Berliner Straße 5 Dortmund Germany &*$
url = ['http://maps.google.com/maps?hl=en&q=' route{1} '+to+' route{2} '&um=1&ie=UTF-8&sa=N&tab=wl&output=kml'];
info = urlread(url);
idx = regexp(info,'GeometryCollection');
info = info(idx(1):idx(2));
coordinates = regexp(info,'\d+.\d+','match'); % get coordinates (lat/long/elevation)-->elevation is always zero
coordinates = transpose(reshape(coordinates,3,[]));
coordinates(:,3) = []; % remove the zero elevation values
coordinates = fliplr(coordinates); % flip matrix so that lat is along the first and long along the second coloum
for k = 1:size(coordinates,1) % this could take ages for long routes
elevation(k,1) = str2num(urlread(['http://ws.geonames.org/srtm3?lat=' coordinates{k,1} '&lng=' coordinates{k,2}])); % get elevation for particular lat/lon coordinate end
Nochmals Vielen Vielen Dank für deine Hilfe und Arbeit.
Mit %output=kml die URL erweitern, das hatte ich auch schon gefunden. Aber ich wusste und weis auch immer noch nicht wie ich die Daten dann an die andere Website schicke und zurückbekomme.
Bei deinem Code habe ich das jetzt gesehen und auch halbwegs verstanden. Aber da wäre ich doch nie drauf gekommen? Wie hast du das gefunden?
Ich habe den Code auch ausprobiert und er liefert mir Höhendaten, aber nicht zu allen lat und lon Koordinaten.
48.1429 11.7395 526.0000
48.1430 11.7446 526.0000
48.1428 11.7493 527.0000
48.1426 11.7571 NaN
48.1425 11.7612 NaN
48.1424 11.7649 NaN
48.1425 11.7669 NaN
48.1426 11.7683 NaN
48.1427 11.7696 525.0000
48.1429 11.7710 525.0000
48.1433 11.7729 525.0000
48.1440 11.7752 524.0000
48.1446 11.7767 522.0000
48.1470 11.7814 NaN
48.1478 11.7830 523.0000
48.1484 11.7848 NaN
48.1490 11.7864 524.0000
Ich habe mir zum Beispiel auch den Quelltext von dieser Seite http://www.gpsvisualizer.com/elevation angeschaut, aber dort habe ich zum Beispiel nicht so einen Link gefunden, den ich die Daten übergeben kann und wieder auslesen kann.
Ich wollte auch nicht, dass du mir die komplette Aufgabe löst. Es ist ja nicht so, dass ich mir keine Gedanken mache und nichts dafür tue. Ich sitze halt nur schon ewig da dran und habe bisher keine Lösungen gefunden. Ich bin absolut Neu in Matlab und auch was Websites etc. angeht.
Ich habe das jetzt anders gelöst. Ich habe die Funktion out = GetSRTMData(p1, p2) benutzt. Damit kann ich SRTM3 Daten einlesen und den einzelnen Koordinaten zuordnen.
Die Koordinaten bekomme ich weiterhin von Google!
Danke nochmal dafür. Das ist echt nett wie die Forenmitglieder hier anderen Helfen und unterstützen.
Ich habe die Funktion out = GetSRTMData(p1, p2) benutzt. Damit kann ich SRTM3 Daten einlesen und den einzelnen Koordinaten zuordnen.
Ich weiss zwar nicht was SRTM3 Daten sind, aber geht es hierbei um die Berechnug der fehlenden Höhen?
Zeig doch mal deinen Code, dann lerne ich auch noch was dazu . Besonders die Anwendung von "out = GetSRTMData(p1, p2)" interessiert mich. Woher stammt diese Funktion?
Die NAN's kommen wahrscheinlich daher, dass der Server teilweise (wahrscheinlich tagsüber) recht oft überlastet ist und dir dann eine Fehlermeldung anstatt der Höhe zurückgibt, welche natürlichh für den Befehl str2num keinen Sinn macht. Nachts um 2 hatte das alles problemlos geklappt. Könnte man ja mit einer If clause abfragen ob die Rückgabe eine Zahl ist.
Mit der Funktion und dem Code von dir klappt es wunderbar. Jetzt werde ich noch eine Funktion schreiben bzw. suchen (die gibt es glaube ich schon) um die lat-,lon-Koordinaten umzurechnen. Anschließend eventuell noch eine GUI um den Star und Zielort einzugeben etc.
Mal schauen
Ja das mit den Fehlerdaten zwischendurch kann sein. Denn mal gings, mal nicht. Und es hat für längere Strecken auch sehr lange gedauert, was auch verständlich ist
dass mit den Nasa Daten ist natürlich praktisch, da damit die Höhendatenberechnung viel schneller funktioniert. Jedoch ist mir nich nicht klar woher du weisst, welche spezielle Datei du nun benötigst (scheint ja Massen zu geben wenn schon die von Eurasien einige hundert sind)? Du möchest dein Tool ja bestimmt auch so flexibel wie möglich machen, deswegen frage ich mich wie du das mit den Nasa Karten, für beispielsweise Routenplanung um die ganze Welt, realisieren möchtest?
Ja das habe ich anfangs auch gedacht. Aber wenn die GetSRTMData Funktion die .hgt file nicht findet, dann gibt sie ein Error aus, welche Datei genau fehlt. und dann kann man die runterladen. Das kann man bestimmt auch noch wieder automatisieren Und die ganze Welt ist zu groß. Es reicht wenn man dann irgendwann mal Deutschland bzw. Europa zusammen hat.
Wenn man mit einer Funktion fertig ist, dann fällt einem direkt die nächste ein. Man kann hier wirklich soooo viele Sachen noch implementieren. Das macht richtig Spaß. Nur fehlt mir leider auch bißchen die Zeit. Jetzt beginnt wieder eine Klausurphase...
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
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.