2016-08-08 3 views
0

У меня есть таблица, в которой я храню службу, а столбцы таблицы обслуживания - это ширина, долгота и местоположение службы.Как рассчитать расстояние между двумя точками в километрах, в php?

Теперь я хочу получить текущее местоположение пользователя и выполнить поиск доступных услуг на расстоянии 10 километров от пользователя.

Для этого я искал, как рассчитать расстояние между двумя точками и пробовал один из кода, но он дает мне некоторую синтаксическую ошибку в JSON.

Ошибка является синтаксической ошибкой (неожиданный «S»), также я не получаю результат в километрах по этой формуле.

 public function searchVendors($lattitudeFrom,$longitudeFrom) 
    { 
     $lattitudeTo = -10.4212157; 
     $longitudeTo = 28.6031842; 


     $dist = $this -> haversineGreatCircleDistance($latitudeFrom, $longitudeFrom, $latitudeTo, $longitudeTo, $earthRadius = 6371000); 

     return $dist; 

    } 

public function haversineGreatCircleDistance($latitudeFrom, $longitudeFrom, $latitudeTo, $longitudeTo, $earthRadius = 6371000) 
{ 
    // convert from degrees to radians 
    $latFrom = deg2rad($latitudeFrom); 
    $lonFrom = deg2rad($longitudeFrom); 
    $latTo = deg2rad($latitudeTo); 
    $lonTo = deg2rad($longitudeTo); 

    $latDelta = $latTo - $latFrom; 
    $lonDelta = $lonTo - $lonFrom; 

    $angle = 2 * asin(sqrt(pow(sin($latDelta/2), 2) + 
     cos($latFrom) * cos($latTo) * pow(sin($lonDelta/2), 2))); 
    return $angle * $earthRadius; 
} 

getVendors.php

<?php 

header("Content-type: application/json"); 

    // if ($_SERVER['REQUEST_METHOD']=='POST') { 
     include_once ("../include/Vendor.php"); 
    try { 

    $con = DB::getConnection(); 

    $raw = file_get_contents("php://input"); 
    $data = json_decode($raw, true); 

    $longitude = $data->longitude; 
    $lattitude = $data->lattitude; 

    $v = new Vendor(); 
    $response = $v -> searchVendors($lattitude,$longitude); 


    json_encode($response); 


    echo $response; 

     if ($response == null) { 
      $response = json_encode(array("result" => -2, "message" => "Empty result")); 
      echo $response; 
     } else { 
      echo $response; 
     } 
    } catch(Exception $e) { 
     $result = array("result" => -1, "message" => $e -> getMessage()); 
     echo json_encode($result); 
     } 
//} 
?> 

Как я могу добиться этого? Может кто-нибудь помочь, пожалуйста .. Очень новое в php.

+0

Можете ли вы предоставить полное сообщение об ошибке с именем файла и строки номер? –

ответ

0

PHP cal_dist (а, б, ключ = нет, спецификация = км)

+0

Добро пожаловать в переполнение стека! Хотя этот фрагмент кода может решить вопрос, [включая объяснение] (// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин вашего предложения кода. Также попробуйте не толковать код с пояснительными комментариями, так как это уменьшает читаемость кода и объяснений! – FrankerZ

0

Попробуйте этот код находят расстояния в километрах или милях

function distance($lat1, $lon1, $lat2, $lon2, $unit) { 

     $theta = $lon1 - $lon2; 
     $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta)); 
     $dist = acos($dist); 
     $dist = rad2deg($dist); 
     $miles = $dist * 60 * 1.1515; 
     $unit = strtoupper($unit); 

     if ($unit == "K") { 
     return ($miles * 1.609344); 
     } else if ($unit == "N") { 
      return ($miles * 0.8684); 
     } else { 
      return $miles; 
      } 
    } 
+0

пробовал этот код, все еще получая ту же ошибку синтаксиса, что-то не так в моем другом коде? @Rax Shah –