PHP / MySQL: Wählen Sie Orte in der Nähe eines bestimmten Ortes aus der DB

8

In PHP habe ich den folgenden Code zum Berechnen der Entfernung zwischen zwei Orten:

%Vor%

Aber jetzt möchte ich Orte in der Nähe eines bestimmten Ortes über PHP aus meiner MySQL-Datenbank auswählen:

  • Der Benutzer betritt seine Heimatstadt
  • Mein Skript erhält die Breiten- und Längengrade über die Google API
  • In meiner Datenbank habe ich ungefähr 200 Orte mit einem Feld für den Breitengradwert und einem Feld für den Längengradwert
  • Ich brauche einen Code für PHP und MySQL, um die 10 Orte auszuwählen, die der Heimatstadt des Benutzers am nächsten sind

Ich hoffe, du kannst mir helfen. Vielen Dank im Voraus!

    
caw 21.05.2009, 19:36
quelle

6 Antworten

7

Die MySQL-Großkreisentfernung (Haversine-Formel) macht genau das, was Sie brauchen .

Mit nur 200 Datensätzen können Sie sie aber auch einfach alle laden und mit Code überprüfen. Der Datensatz ist wirklich viel zu klein, um sich zu viele Gedanken über Datenbank oder Code oder andere Optimierungen zu machen.

Berechnung der Entfernung zwischen Postleitzahlen in PHP hat ein paar PHP-Implementierungen dieses Algorithmus.

Suche mit der geografischen Nähe ist ziemlich genau das gleiche Problem, das Sie haben.

    
cletus 24.05.2009, 00:53
quelle
3

Vielleicht etwas wie

%Vor%

oder

%Vor%

(direkt aus dem PHP-Code übersetzt) ​​

:1 und :2 sind $lat2/180*pi() bzw. $long2/180*pi() .

    
itsbth 24.05.2009 01:41
quelle
1

Das ist die Haversine-Formel. Sie können das PHP direkt in SQL übersetzen, so dass Sie die Datenbank räumlich abfragen können (die Alternative besteht darin, jeden Datensatz aus der Datenbank abzurufen und die Daten über PHP auszuführen). MySQL bietet alle mathematischen Funktionen, die Sie benötigen.

Ich tat dies für eine kommerzielle Website, die post / zipcode-basierte Distanz-Lookups zur Verfügung stellte, also ist es sicherlich ohne spezifische GIS-Funktionen möglich.

    
nOw2 23.05.2009 23:57
quelle
0

Dafür stehen MySQL-Funktionen zur Verfügung.

Ссылка

    
Frank Farmer 21.05.2009 19:41
quelle
0

MySQL kann Zeilen geospatial indizieren. Sie müssen diese Berechnungen möglicherweise nicht selbst durchführen (Sie können MySQL einfach bitten, den Abstand zwischen zwei Geoobjekten zu berechnen und danach zu sortieren.).

Siehe: Ссылка

    
Assaf Lavie 21.05.2009 19:41
quelle
-1

Warum benutzen Sie nicht die Geodaten von MySQL ...? Nein, nur Spaß.

Wenn die 200 Datensätze tatsächliche Orte wie Städte usw. sind, könnten Sie als Alternative die API von GeoNames verwenden?

Der folgende Webservice stellt die 10 am nächsten gelegenen Orte zur Verfügung:

Ссылка

Quelle: Ссылка

Vollständige Liste: Ссылка

    
mr-euro 23.05.2009 23:48
quelle