2016-03-21 3 views
1

Ich entwerfe eine Android-Anwendung, wo ein Benutzer dort Adresse eingeben kann und es wird eine Liste von Bars/Clubs/Restaurants innerhalb einer 300 Meilen Radius zu holen.Umgang mit großen Datenmengen mit der Google Maps API

Die Art, wie es derzeit funktioniert, ist, der Benutzer gibt seine/ihre Adresse ein und die App sendet einen Anruf an einen RESTful Service (asp), der dann jede Bar/Club/Restaurant auswählt und dort Entfernung vom Benutzerort puts prüft jede innerhalb einer Entfernung von 300 Meilen in ein Array und gibt das Ergebnis als json zurück, sobald es fertig ist.

Das Problem ist, das ist wirklich langsam ist, weil es jede Bar/Club/eaterie aus der Datenbank auswählen muss und berechnen Sie die Entfernung (ich habe etwa 20k Datenzeilen)

Die durchschnittliche Antwortzeit für den gesamten Prozess (Benutzer klicken auf Suche, um die Informationen auf dem Telefon anzuzeigen) ist etwa 6-8 Sekunden, ich möchte es auf etwa 1-2 Sekunden

Gibt es einen besseren Weg, um darüber zu gehen? Sie müssen alle Datensätze auswählen und überprüfen, ob die Entfernung für jedes einzelne das Problem verursacht.

+0

Ist das Ihr RESTful Service oder eine ausländische ein? –

+1

Ja - verwenden Sie einen realistischeren Radius. Warum benutzt du 300 Meilen? Wer zum Teufel fährt 200 Meilen zum Abendessen? Ansonsten müssten Sie Code anzeigen. Aber es gibt wahrscheinlich Optimierungen, die Sie bei der Abstandsprüfung machen können, wenn Sie die tatsächliche Entfernung berechnen (Wege, die Sie durch eine Annäherung ersetzen können). –

+0

@ t.niese es ist mein erholsamer Service iv'e optimiert es so viel wie möglich, die einzige andere Sache, die ich tun kann, ist Speichern der Daten in einer sqlLite-Datenbank und die Handhabung aller Android-seitig mit den eingebauten Standortdienste – user2649305

Antwort

0

Sie haben nicht die GPS-Position von Zielen? Wenn es immer noch 20k Ergebnisse in 300 Meilen gibt, können Sie Orte in zunehmendem Radius asynchron rendern. Aber es ist wahr ... Warum 300 Meilen ?! Eine andere Sache ist, dass ich seine 300 Meilen auf der Straße, die fast unmöglich zu fahren ist, und wenn ja, können Sie es laden, wenn Benutzer die Karte nicht alle auf einmal verschieben ...

+0

Ich versuchte mit Längen- und Breitengrad und mit einem mathematischen Ansatz zur Berechnung der Differenz, aber es ist ungenau bis zu einem Grad von etwa 1: 0,70, dh; etwas 100 Meilen entfernt auf Google Maps ist 70 Meilen entfernt mit Längen- und Breitengrad, vermutlich weil long/lat nur berechnet die Entfernung unabhängig davon, ob es Straßen oder nicht – user2649305

+0

ja, aber Sie müssen nur Radius haben, ist unmöglich zählen 20k Ergebnisse nach Entfernung auf der Straße! Sie zählen jetzt die Entfernung auf der Straße? –