2016-08-08 2 views
0

나는 위치가 명시된 위도, 경도의 열이있는 경기장 테이블을 가지고 있습니다. 나는 장소 테이블에서 위치를 얻고 사용자의 현재 위치 근처에있는 위치를 얻고 싶습니다.10 킬로미터 사이의 위치 거리를 얻으십시오

현재 위치는 함수의 매개 변수로 주어집니다.

이 1 일에 나는 경기장 테이블에서 모든 위도와 경도를 얻으 려 노력했다.

그럼 장소 배열에서 각 장소의 거리를 계산하려고했습니다. 그러나 그것은 내가 만든 거리 배열에 대한 에러를 준다.

저는 PHP에 익숙하지 않으므로 이것을 어떻게 할 생각이 없습니다.

사용자의 현재 위치에서 10km에 가까운 위치를 반환하고 싶습니다.

검색 기능 :

public function searchVendors($fields) 
{ 

    try { 

     $lat1 = $fields -> lat1; 
     $lat2 = $fields -> lon1; 

     $con = DB::getConnection(); 

     $query = "SELECT `lattitude`,`longitude` FROM venues"; 

     $rs = mysqli_query($con,$query) or die (json_encode(array("result"=>-1, "message"=>mysql_error()))); 
     $n = mysqli_num_rows($rs); 

     $venues = array(); 

     if ($n > 0) { 

      while ($row = mysqli_fetch_assoc($rs)) { 
       $venues[] = $row; 
      } 

      $distances = array(); 

      foreach($venues as $venue) { 

       $distance = (((acos(sin((".$latitude."*pi()/180)) * sin((`Latitude`*pi()/180))+ 
        cos((".$latitude."*pi()/180)) * cos((`Latitude`*pi()/180)) * 
        cos(((".$longitude."- `Longitude`)*pi()/180))))*180/pi())*60*1.1515*1.609344) 

       $distances[] = $distance; 

      } 

      $result = array("result"=>1, "message"=>"success", "distances" => $distances); 
      return json_encode($result); 

     } else { 
      $result = array("result"=>-1, "message"=>"Event list is empty"); 
      return json_encode($result); 
     } 
    } catch(DBConnectionException $e) { 
     $result = array("result"=>-1, "message"=> $e -> getMessage()); 
     return json_encode($result); 
    } 
    return null; 
} 

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); 

     $v = new Vendor(); 
     $response = $v -> searchVendors($data); 

     json_encode($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); 
    } 
} 

?> 

편집 :이 같은 검색 기능

public function searchVendors($fields) 
{ 


try{ 

$lat1 = $fields -> lat1; 
$lat2 = $fields -> lon1; 

    $con = DB::getConnection(); 

    $query = "SELECT `lattitude`,`longitude` FROM venues"; 

    $rs = mysqli_query($con,$query) or die (json_encode(array("result"=>-1, "message"=>mysql_error()))); 
    $n = mysqli_num_rows($rs); 

    $venues = array(); 

     if ($n > 0) { 

     while ($row = mysqli_fetch_assoc($rs)) { 
       $venues[] = $row; 
      } 

      $distances = array(); 

      foreach($venues as $venue) 
      { 
    $distance = (((acos(sin((".$latitude."*pi()/180)) * sin((`Latitude`*pi()/180))+ 
      cos((".$latitude."*pi()/180)) * cos((`Latitude`*pi()/180)) * 
      cos(((".$longitude."- `Longitude`)*pi()/180))))*180/pi())*60*1.1515*1.609344); 

      if($distance < 10) 
      { 

      $distances[] = $distance; 
      } 

      } 

      $result = array("result"=>1, "message"=>"success", "distances" => $distances); 

      return json_encode($result); 

     } else { 
      $result = array("result"=>-1, "message"=>"Event list is empty"); 
      return json_encode($result); 
     } 
    } catch(DBConnectionException $e) { 
     $result = array("result"=>-1, "message"=> $e -> getMessage()); 
     return json_encode($result); 
    } 
    return null; 
} 

점점 출력 :

{ 
    "result": 1, 
    "message": "success", 
    "distances": [ 
    0, 
    0, 
    0, 
    0, 
    0, 
    0, 
    0, 
    0 
    ] 
} 
,

어떻게해야합니까? 내 코드에서 무엇을 변경해야합니까? 아무도 도와 줄 수 있습니까? 고맙습니다.

+1

너무 많이 들어가기 전에 해당 세미콜론이 누락됩니다. $ 거리 = ...'진술. 그게 도움이 되니? –

+1

PHP가'$ distanceances'를 기대하지 않는다고 말하는 오류가 있다고 가정합니다 (이전 명령문이 종료되지 않았기 때문에). –

+0

예, 문제는 해결되었지만 null 배열을 얻으면 편집 된 코드를 확인하십시오. @ Don'tPanic – Sid

답변

0

거리 및 순서는 MySQL 문 자체에서 해결할 수 있습니다. 검색 할 때 사용자가 지정한 현재 주소에서 위도/경도를 계산하고 다음 코드를 사용해야합니다.

SELECT *, 
(3959 * acos(cos(radians($latitude)) * cos(radians(lattitude)) 
* cos(radians(longitude) - radians($longitude)) + sin(radians($latitude)) 
* sin(radians(lattitude)))) AS distance 
FROM venues 
ORDER BY distance; 
+0

다음과 같이 검색된 주소로부터 최대 거리를 설정할 수도 있습니다 .. 'HAVING distance <50' (50 miles) –

관련 문제