0

Die Google Places API bietet eine radarSearch method, die einen einzelnen Typ und eine Bereichsbeschränkung akzeptiert. Die Fläche kann entweder ein Constraint latlng/Radius-Paar oder eine latlng Grenzen ...Google Places radarSuchen Sie, um 100 Orte zu finden

var request = { 
    location: latlng, // where latlng is a google.maps.LatLng 
    radius: 2000,  // meters 
    type: placeType // e.g. 'restaurant' or 'gas_station', etc. 
} 

oder

var request = { 
    bounds: latlngbounds, // google.maps.LatLngBounds 
    type: placeType  // e.g. 'restaurant' or 'gas_station', etc. 
} 

A radarSearch entweder mit den oben genannten Anfragen sein kehren bis zu 200 passenden Stellen. Wenn die Suche tatsächlich 500 Orten entspricht, sind nur 200 Orte der 500 Orte in der Antwort enthalten. Es scheint keine offensichtliche Möglichkeit zu geben, zu beeinflussen, welche 200 Orte zurückgegeben werden. Erste Tests zeigen, dass es zufällig ist, aber vielleicht voreingenommen, um die Orte zurückzubringen, die am weitesten vom Zentrum entfernt sind.

Das Problem ist ... Ich bin nur an der am nächsten 100 Plätze interessiert. Gibt es eine unterstützte Möglichkeit, die 500 übereinstimmenden Orte zu sortieren und die ersten 200 zurückzugeben? Ich habe versucht, die ‚rankBy‘ Eigenschaft verwenden, aber es scheint, um ignoriert zu werden ...

var request = { 
    bounds: latlngbounds, // google.maps.LatLngBounds 
    type: placeType  // e.g. 'restaurant' or 'gas_station', etc. 
    rankby: google.maps.places.RankBy.DISTANCE, 
} 

Der einzige Weg, eine richtige Antwort, um sicherzustellen, ist eine erste Suche mit einem kleinen Bereich zu tun, und erhöhe nacheinander die Grenzen und re-search, bis ich mindestens 100 Plätze, aber nicht mehr als 200 Plätze bekomme. Dann kann ich in JS sortieren und bis 100 schneiden, um meine 100 nächsten Plätze zu bekommen. Gibt es einen performanteren Algorithmus, um zu den gleichen Ergebnissen zu gelangen?

Google hat kürzlich die 'types' Eigenschaft, in der man ein Array von mehreren passenden Typen angeben könnte, veraltet. Derzeit wird nur die Eigenschaft 'type' unterstützt, in der nur ein einziger Suchtyp angegeben werden kann. Ich muss eine Handvoll von Ortstypen unterstützen und muss nun individuelle Suchen für jeden Ortstyp durchführen und zusammenführen. Diese Änderung wirkt sich dramatisch auf die Leistung meiner App aus. Mit dem obigen Ansatz dauerte es zwischen 1 bis 3 Sekunden für eine Handvoll von Ortstypen, bis zu nicht akzeptablen 20 bis 30 Sekunden, um individuelle Suchen für jeden Ortstyp durchzuführen.

Gibt es bessere Möglichkeiten, um beispielsweise die nächsten 100 Bars, Restaurants oder Cafes zu erreichen? Mit der Änderung von Google dauert es jetzt 10x länger, um das Ergebnis zu erhalten.

Schätzen Sie alle Ideen!

Antwort

0

In Ermangelung weiterer Führung, konnte ich die folgende Lösung implementieren ...

  • Verwenden radarSearch Anforderung, die für nur Standort, Radius und einzigen Ort Typ
  • Einführung radarSearches parallel umfasst jeder Ort Art von Interesse
  • jeder radarSearch stellt den Radius und ruft sich selbst rekursiv , bis die Antwort Zahl zwischen 100 und 200
  • Merge Antwort-Arrays ist, wenn alle Suchvorgänge abgeschlossen sind, sortieren auf Abstand, und in Scheiben schneiden zu 100
  • Der endgültige Radius für jeden radarSearch in localstorage für nachfolgenden Such auf dem gleichen Typ

Die Ergebnisse sind recht gut zwischengespeichert wird. Kaltstart 5-6 Sekunden, Warmstart (unter Verwendung von zwischengespeicherten Radiuswerten) 300-600 ms. Cache wird auch für wiederholte radarSearches innerhalb der App-Sitzung verwendet. Dies war ein besser als erwartetes Ergebnis, obwohl es sich um eine erhebliche Umgestaltung handelte.

Viel Glück für alle Besucher, die dies lesen. Hoffentlich ist dieses zusätzliche Follow-up hilfreich.

Verwandte Themen