Ich verwende die Google Maps v3 API . Ich stelle derzeit eine Anfrage, um jedes Mal, wenn eine Person das Ansichtsfenster ändert (entweder durch Zoomen oder Verschieben der Karte), neue Daten abzurufen, und werfe die alten Daten weg, die ich habe. Das funktioniert prima, aber jetzt möchte ich die Daten zwischenspeichern, damit ich sie nicht jedes Mal abrufen muss, wenn sich das Ansichtsfenster ändert. Die Google Maps API definiert ein Ansichtsfenster durch seine nordöstlichen und südwestlichen Koordinaten, die aus einem Breitengrad und einem Längengrad bestehen. Sie werden in Objekten namens LatLngBounds .
Ich habe mir 2 Möglichkeiten ausgedacht, wie ich dies tun kann:
- Speichern Sie die Grenzen jedes neuen Ansichtsfensters, das der Benutzer besucht, und prüfen Sie, ob das neue Ansichtsfenster in einem alten Ansichtsfenster liegt, und holen Sie neue Daten nur für den Teil des neuen Ansichtsfensters, der nicht in einem alten Ansichtsfenster liegt. Im Wesentlichen,
- Unterteilen Sie jedes neue Ansichtsfenster in rechteckige Abschnitte mit Daten, die bereits vorhanden sind, und Daten, die abgerufen werden müssen. Speichern Sie die Grenzen der einzelnen rechteckigen Abschnitte.
Falls jemandem eine bessere Lösung einfällt, kann er gerne neue Ansätze vorschlagen.
Meine Frage ist, welche Lösung in Bezug auf Leistung/Speichernutzung und Gesamtgeschwindigkeit besser ist? Sie sind beide ähnliche Algorithmen so ist es wirklich wichtig?
Außerdem basieren beide Algorithmen derzeit auf der Aufteilung des neuen Ansichtsfensters auf der Grundlage der alten Ansichtsfenster. Wie würde der Algorithmus zur Aufteilung neuer Ansichtsfenster aussehen? (Angenommen, ich habe meinen 2. Algorithmus implementiert)
var prevBounds = [ /* Array of previously seen bounds */ ];
var newViewport = map.getBounds(); // New Viewport to divide up
var sw = newViewport.getSouthWest();
var swlat = sw.lat();
var swlng = sw.lng();
var ne = newViewport.getNorthEast();
var nelat = ne.lat();
var nelng = ne.lng();
// newViewport.intersects(bounds)
// Returns true if this bounds shares any points with this bounds.