2016-08-08 8 views
0

私はサービスを格納しているテーブルを持っており、サービステーブルの列は緯度、経度、つまりサービスの場所です。phpで2つの場所の間の距離をキロメートルで計算する方法は?

今、私はユーザーの現在の位置を取得し、利用可能なサービスをユーザーから約10キロメートル離れた場所で検索したいと考えています。

これについては、2つの場所の距離を計算する方法を検索し、コードの1つを試しましたが、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(A、B、キー=なし、スペック=キロ)

+0

ようこそスタックオーバーフロー!このコードスニペットは問題を解決するかもしれませんが、[説明を含めて](// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)本当にあなたの投稿の質を向上させるのに役立ちます。将来読者の質問に答えていることを覚えておいてください。そうした人々はあなたのコード提案の理由を知らないかもしれません。また、コードと説明の両方の可読性が低下するため、説明的なコメントを使用してコードを混乱させないようにしてください。 – FrankerZ

0

は、KMまたはMILES

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

このコードを試しても、同じ構文エラーが発生しました。他のコードで何か間違っていますか? @ラックスシャー –

関連する問題