Entfernungsberechnung und diverses

  • 10 Antworten
  • Neuester Beitrag
Diskutiere Entfernungsberechnung und diverses im Android App Entwicklung im Bereich Betriebssysteme & Apps.
E

Egistar

Neues Mitglied
Hallo zusammen,

ich bin newbie in Sachen App-Entwicklung. Habe grundsätzlich ein paar kleine Ideen, aber irgendwie bin ich mir nicht so ganz schlüssig wohin ich manche Info packen soll.

Grundsätzlich manches Prinzip zu verstehen macht dann doch schon Sinn. Auch hat mir die Suche hier nicht so recht geholfen.

Recht häufig treffe ich in Apps auf Distanzberechnungen, ob ich jetzt Autos bei mobile.de suche, oder nur die nächstgelegene Tankstelle. Was ich hier aber nicht so ganz verstehe ich, wo liegen die Daten und berechne ich die Distanzen vor Übergabe in die App bereits vor und zeige sie dann an. Der Grund warum ich frage ist, die Paginierung mancher Tools beschränkt sich auf z.B. 25 Treffer mit der geringsten Entfernung zu einem Ausgangspunkt. Da ich kaum glaube, dass mobile.de erstmal 1 Mio Auto-Datensätze übergibt, die Distanzberechnung dann in der App erfolgt und die App diese auf 25 Treffer paginiert und cached, frage ich mich wie das Konzept hier aussehen muss um so etwas performant darstellen zu können.

Nach meiner Vorstellung liegen die Geo-Daten in der Datenbank auf einem Server ab, per http-Request, SOAP, REST whatever rufe ich mir die Daten ab, das Serverskript liefert mit vorberechnet die 25er Pakete zurück, die zweite Seite wird erneut requested. Last also vollständig auf den Webserver ausgelagert. Lege ich dann lokal über eine Datenbank an??

Sorry, dass ich für meinen ersten Post so viel runterphilosophiere, aber die Frage nach dem grundsätzlichen Aufbau eines solchen Kontruktes erschließt sich mir aus keiner Forensuche.

Danke euch schon mal für ein Feedback zu dem Thema.
 
Black NEXUS

Black NEXUS

Ambitioniertes Mitglied
Es ist recht einfach, du sendest deine Positionsdaten in Form eines Längengrades + Breitengrades, deren Server führt eine Entfernungsberechnung durch (Gutes Beispiel, welches ich selber nutze gibt es HIER) und dieser sendet dir dann die Ergebnisse zurück.

Deine GPS-Position bekommst du entweder via GPS, G-Netz (GSM-Ortung) oder durch (W)LAN.
 
E

Egistar

Neues Mitglied
Das heißt also du schickst den gesamten Bestand deiner Adresstabelle dorthin? Irgendwie mußt du ja dann die ersten 25 Treffer ausgeben die am nächsten zu deinem Ziel liegen. Wenn der Request der zweiten Seite dann kommt wieder alles von neu?

Das klingt irgendwie nicht performant. :(

Und deine Adressdaten speicherst du dann samt Längen und Breitengeraden in einer Tabelle deines Webservers ab?
 
Black NEXUS

Black NEXUS

Ambitioniertes Mitglied
Nein, du als Client schickst deine Positionsdaten, der Server schickt dir dann die 25 ersten Einträge.

Klar speichert der Server die Positionsdaten der Ziele, aber vom Client braucht er diese nicht. Kommt immer drauf an, was du machen möchtest ;)
 
E

Egistar

Neues Mitglied
OK verstanden. War ein wenig verwirrt...

Vielen vielen Dank.
 
M

MrWagner

Gast
Wird vermutlich so laufen.

Kannst ja bei Mobile.de deine PLZ eintippen und mal schauen wie lange es dauert bis die Anzeige "Treffer anzeigen" sich bei einen Umkreis von 10km und 200km aktualisiert. Und dann wechsel immer mal zwischen 100km und 200km und schau was passiert. Ich hab da auch nicht so den Plan, aber es gibt natürlich auch die Möglichkeit die Ergebnisse von Abfragen zwischenzuspeichern auf die dann später zurückgegriffen werden kann. Eventuell wird einmal die Entfernung von allen Autos im Umkreis von 200km berechnet und bei jeder weiteren Abfrage/Seitenwechsel wird auf die Ergebnisse zurückgegriffen

Aber wie die Berechnung bzw. Datenbank genau aussieht ist auch so ne Frage. Eventuell wird gar nicht die GPS-Koordinate gespeichert sondern es wird einfach ein normaler Punkt(x,y) draus gemacht. Ist jetzt totale Spekulation, aber ich vermute die Entfernung zwischen zwei Punkten im 2D-Raum lässt sich schneller berechnen als die Entfernung zwischen zwei GPS-Koordinaten.
 
Black NEXUS

Black NEXUS

Ambitioniertes Mitglied
Naja, wenn man mit ein wenig Logik an die Sache heran geht, sollte es ja einleuchten, wie man was macht.

Warum sollte der Client alles wissen? Erstens ist es unnötig, es bringt dem Nutzer ja nix, zweitens bedeutet es Traffic der vergeudet wird und drittens dauern die Abfragen ja wesentlich länger.

Nebenbei kann man mit den Koordinaten in Verbindung der API von GoogleMaps, schöne Positionsangaben erstellen. So kann man gleich drauf zu navigieren und hat nicht nur die Entfernungsangaben :)
 
E

Egistar

Neues Mitglied
Naja es gibt ja unzählige Apps die eine Umkreissuche haben. Ich gehe meist davon aus je nach Datenmenge müsste die Kommunikation so laufen:

Client sendet Request mit GPS Koordinaten oder Ort an Webserver
Webserver macht Select * auf eigene Adressdaten und sendet sie an einen Analyseserver samt Ausgangsort
Analyseserver berechnet alle Abstände zum Ausgangsort und gibt 100 des Requests berechnet zurück an Webserver
Webserver paginiert und liefert json an den Client

Client zeigt z.B. 25 Treffer und darunter Anzahl Gesamtseiten
Seite 2 fordert den gesamten Prozess erneut.

Aber das ist jetzt mal gesponnen.
 
Black NEXUS

Black NEXUS

Ambitioniertes Mitglied
Wenn du das in Seiten aufteilst, reicht eine Abfrage. Der Server kann ja auch alle Ergebnisse in einem gewissen Umkreis zurückgeben und der Client sortiert diese dann. Wäre ein bisschen unwirklich, wenn man die gesamte Anfrage nocheinmal stellt, obwohl man die nächsten Angebote haben möchte, dann lieber gleich alles.
 
A

amfa

Experte
Also wenn es nur darum geht Treffer in einem bestimmten umkreis zu erhalten kann man das ja relativ einfach aus einer Datenbank auslesen:

(vermutlich stark)Vereinfachtes Beispiel

nehmen wir an wir haben koordinaten von 0-10 (km)
Es gibt Orte die mit ihren Koordinaten in einer Datenbank stehen:
X-koordinate, Y-Koordinate, Ort Name
4,6,erster ort
etc.

Wenn ich nun alle Orte in einem Umkreis von 1 km haben um den Punkt in der Mitte (5/5) dann hole ich aus der Datenbank alle Orte, die in den Koordinaten von 4/4 bis 6/6 liegen. (also in unserem einfachen beispiel 4/4, 4/5, 4/6, 5/4, 5/5, 5/6, 6/4, 6/5, 6/6)

Von diesen relativ wenigen Orten könnte ich dann noch die genaue Entfernung berechnen.
Luftlinie wäre der Satz des pythagoras (a² + b² = c²) nutzbar.
Beispiel der Punkt 4/4
da wären a und b jeweils 1 Entfernung von 5/5 wäre dann 1.414 (km oder welche einheit man für die koordinaten benutzt.)
Diese Berechnung kann durchaus bei jedem Request ausgeführt werden, denn das kostet kaum rechenzeit, da braucht man kein Analyseserver für.
Satz des Pythagoras sollte ein normaler PC zichtausend pro Sekunde berechnen können.

Und schon könnte man eine Liste mit Entfernungen vom aktuellen Punkt an den Client senden und dieser kann die dann anzeigen.

Wie gesagt das beispiel ist vereinfacht, und es ist auch kein richter Umkreis sondern ein "Um"Quadrat aber das Prinzip sollte klar sein.

FÜr solche Berechnungen ist es halt gut, wenn man im Mathe Unterricht aufgepasst hat und nicht nur die Frage gestellt hat "Und wofür brauch ich das später im Leben" ;)

Und ich bin sicher, dass es für solche Berechnungen mittlerweile noch viel effizientere Methoden zur Berechnung gibt.
 
Black NEXUS

Black NEXUS

Ambitioniertes Mitglied
Aber auch das ergibt pro Rechnung max. 1/4 des möglichen Zielgebietes, heißt, man muss diesen Weg 4x durchlaufen. Aber für die grobe Einteilung reicht es ;)