2010-04-29 5 views
5

Ich habe eine Anwendung in CakePHP erstellt, die Unternehmen auflistet. Es gibt ungefähr 2000 Einträge, und die Breiten- und Längenkoordinaten für jedes Geschäft sind in der DB.
Ich versuche jetzt, die Suchfunktion anzugehen.Finden Sie die nächstgelegenen Standorte zu einer bestimmten Adresse

Es wird ein Eingabefeld geben, in dem der Benutzer eine Adresse, eine Stadt oder eine Postleitzahl eingeben kann, und dann möchte er die 11 nächstgelegenen Unternehmen aus der Datenbank zurückgeben.

Wie würde ich das machen?

+1

* (verwandt) * http://stackoverflow.com/questions/838344/algorithm-for-finding-nearby-points – Gordon

+0

(verwandt) http://www.artfulsoftware.com/infotree/queries.php?&bw = 1680 # 109 –

Antwort

2

Ich benutze die Yahoo Geo Planet API, um den Ort zu identifizieren, der dem eingegebenen Suchbegriff entspricht. Dies entspricht normalerweise mehreren Orten, daher müssen Sie sie dem Benutzer zurückgeben, damit sie den richtigen auswählen können. Dann, sobald Sie den richtigen Ort kennen, und es ist Lat Longs, die die Yahoo API bietet, können Sie die haversine formula verwenden, um die nächstgelegenen Unternehmen zum Standort des Benutzers zu bekommen. Es gibt ein gutes Beispiel in der Antwort auf this question.

+0

Dies ist wirklich hilfreich und näher an dem, was ich suche, danke! – xtine

0

Ich würde dies durch Erstellen eines Quadrats um den Punkt, um den Punkt zu bekommen, ist eine ganze Sache in sich selbst, wie Sie eine Postleitzahl Datenbank oder API benötigen, die dazu neigen, Geld zu kosten. Entweder beim Kauf der Datenbank oder per Nachschlagen.

Wenn Sie es zumindest per Stadt oder ähnlichem tun, könnten Sie wahrscheinlich, nicht sicher, den Long-Lat von GMaps für diese Stadt zurückgeben.

Dann würde ich versuchen, 4 Ecke Longlat Coords um diesen Punkt zu bekommen. Dann konnte ich die Datenbank nach Werten suchen, die zwischen diesen liegen.

Wie auch immer, es ist eine knifflige Sache, die ich sagen würde, aber gute Frage! Interessiert, um Vorschläge der Völker zu sehen.

+0

Die us-Census-Daten können verwendet werden, um bevölkerungsgewichtete Datenbanken im Vergleich zu Postleitzahlen zu generieren. Ich habe diese Daten in der Vergangenheit verwendet. Wenn Sie herum googeln, finden Sie eine long-lat vs. Postleitzahl-Datenbank für Sie kostenlos. Und dann finden Sie alle Postleitzahlen, die in einem Quadrat in der Nähe der fraglichen sind, eine ziemlich schnelle und einfache, um eine wirklich gute Nähe zu bekommen. –

Verwandte Themen