2016-12-10 2 views
1

Я пытаюсь написать строку поиска, которая ищет вблизи места. Пока это жестко закодировано. Заявление работает до тех пор, пока я не добавлю подобные заявления для долготы и широты. Есть лучший способ сделать это?SQL-поиск «около» долготы и широты

$searchString = explode(' ', $_GET["searchString"]); 
$useLocation = $_GET["useCurrentLocation"]; 
if($useLocation == 1){ 
    foreach($searchString AS $key){ 
     $stmt = $db->prepare("SELECT * FROM locations WHERE Name LIKE '%{$key}%' AND Longitude Like '-79.8579' And Latitude Like '43.5237'"); 
     $stmt->execute(); 
     $result = $stmt->get_result(); 
     while($row = $result->fetch_assoc()){ 
      echo $row['Name']; 
     } 

    } 
} 

ответ

0

Вы можете найти много решение на интернете о "как поиск по местоположению"

Есть какой-то ответ на Stackoverflow:

Или на Google:

Вот мой последний запрос о том, что:

я долготы/широты с помощью Google Maps API. Введите адрес, и верните координату GPS. После, рассчитать с SQL положение и объекты вокруг

$ longitude_ref = 7.694731; $ latitude_ref = 48.560719;

SELECT * 
    FROM maps 
    WHERE (
    6366 * 
    acos(
     cos(radians(48.560719)) -- $latitude_ref 
     * 
     cos(radians(`latitude`)) 
     * 
     cos(radians(`longitude`) - radians($longitude_ref)) -- $longitude_ref 
     + 
     sin(radians(48.560719)) * sin(radians(`latitude`)) -- $latitude_ref 
    ) 
) <= 2 -- r in Km (here: 2 km) 

Вы также можете рассчитать расстояние между двумя точками:

SELECT pg.id, pg.*, pg1.*, 6366 * 2 * 
    atan2(
     sqrt(
     SIN((RADIANS(pg1.latitude) - RADIANS(pg.latitude))/2) * SIN((RADIANS(pg1.latitude) - RADIANS(pg.latitude))/2) + COS(RADIANS(pg.latitude)) * COS(RADIANS(pg1.latitude)) * SIN((RADIANS(pg1.longitude) - RADIANS(pg.longitude))/2) * SIN((RADIANS(pg1.longitude) - RADIANS(pg.longitude))/2)  
    ), 
     sqrt(
     1 - SIN((RADIANS(pg1.latitude) - RADIANS(pg.latitude))/2) * SIN((RADIANS(pg1.latitude) - RADIANS(pg.latitude))/2) + COS(RADIANS(pg.latitude)) * COS(RADIANS(pg1.latitude)) * SIN((RADIANS(pg1.longitude) - RADIANS(pg.longitude))/2) * SIN((RADIANS(pg1.longitude) - RADIANS(pg.longitude))/2) 
    ) 
    ) as calculated_distance_final_km 
    FROM perso_gps pg 
    WHERE pg.calculated_dist IS NULL 

Многие примеры на интернете :)

Смежные вопросы