2017-06-05 4 views

Antwort

1

In PHP könnten Sie es tun, indem Sie die Datensätze abrufen und die folgende Formel verwenden. Aber ich möchte, dass Sie Abfrage verwenden, um dieses Problem zu lösen. Es ist effizienter.

function getNearestUsers($givenLat,$givenLng) 
{ 
    $res = []; 
    $recs = getAllTheRecordsFromDb(); 
    foreach($recs as $r) 
    { 
     $distance = sqrt(POW((69.1 * ($r['lat'] - $givenLat)),2) + POW((69.1 * ($givenLng - $r['lng']) * cos($r['lat']/57.3)),2)); 
     if($distance<=50) //50 miles 
     { 
      //some code 
     } 
    } 
} 

Angenommen, Sie haben eine Benutzertabelle mit userId, Längen- und Breitengrad. Im Folgenden finden Sie eine SQL-Abfrage, um Benutzer im Radius von 50 Meilen von der angegebenen Breite und Länge zu erhalten.

SELECT userId, latitude, longitude, SQRT(
    POW(69.1 * (latitude - [givenLat]), 2) + 
    POW(69.1 * ([givenLng] - longitude) * COS(latitude/57.3), 2)) AS distance 
FROM TableName HAVING distance < 50 ORDER BY distance; 

Sie könnten mehr Antwort erhalten aus Bezugnahme den unten stehenden Link: latitude/longitude find nearest latitude/longitude - complex sql or complex calculation

1

Diese Abfragemethode ist die Basis auf der Google Map Store Locator api.

Bitte lesen Sie diese Seite:

Lassen Sie sagen, Sie haben eine Variable von lat und lang $ lat; $ lng;

Nehmen wir an, dass diese Variable ihre Koordinaten hat.

In Ihrer Anfrage tun:

SELECT id, lat, lng (3959 * acos (cos (Radiant ($ lat)) * cos (Radiant (lat)) * cos (Radiant (lng) - Radiant ($ lng)) + sin (Radiant ($ lat)) * sin (Radiant (lat)))) AS-Abstand FROM-Marker HAVING-Abstand < = 50 ORDER BY Abstand;

Das Ergebnis gibt die ID-, Lat- und lng-Koordinaten zurück, die kleiner oder gleich 50 Meilen sind.

P.S Die 3959 ist die Einheit, die die Meilen zurückgibt.

Verwandte Themen