2016-09-14 1 views
2

도움이 필요합니다. Google API Snap To Road를 사용하고 있습니다. Road To Snap API에서 결과 얻기

<?php 
set_time_limit(0); 
$jsonarr = array(); 
$today=date("Y-m-d"); 

$ACCOUNT=$_GET['ACCOUNT']; 
$ticket_no=$_GET['ticket_no']; 
require_once("config/msdb_connect.php"); 

$query = mssql_query("SELECT * FROM TblGps WHERE DOOR = '".$ticket_no."' AND  DATETIME BETWEEN '".$today." 00:00:00' AND '".$today." 23:59:59' ORDER BY DATETIME DESC"); 
while($row = mssql_fetch_array($query)) 
{ 
    //parameters 
    $lng=$row['LONG']; 
    $lat=$row['LAT']; 
    //$data = array('lat'=>$lat,'lng'=>$lng); 
    //echo $latlng = GetArray($data); 

$jsonarr[] = array(
         'id' => $row['ID'], 
         'account' => $row['ACCOUNT'], 
         'datetime' =>date("m/d/Y  H:i:s",strtotime($row['DATETIME'])), 
         'loc' => $row['LOCATION'], 
         // 'speed' => $row['SPEED'], 
         'longi' => $lng, 
         'lat' => $lat, 
         'lac' => $row['LAC'], 
         'cid' => $row['CID'], 
         // 'engine' => $row['ENGINE'], 
         'remarks' => $row['REMARKS'] 
        ); 
} 

$path = GetArray($jsonarr); 
$snailtrail=GetSnailTrail($path); 

function GetArray($array){ 

    $stringdata = ""; 
    for($i = 0 ; $i <= count($array) - 1 ; $i++){ 
    $rows = (object)$array[$i]; 
    if($i == count($array) - 1) $stringdata .= $rows->lat.','.$rows->longi; 
    else $stringdata .= $rows->lat.','.$rows->longi.'|'; 
    } 
    return $stringdata; 
} 
function GetSnailTrail($path){ 
    $key='AIzaSyDRlfacNyHn7ZOsC0FzufqZ_rtQYfZD6wA'; 
    $url='https://roads.googleapis.com/v1/snapToRoads?path='.$path.'&interpolate=true&key='.$key.' '; 

    $curl = curl_init(); 
    curl_setopt($curl, CURLOPT_URL, $url); 
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST,"POST"); 
    // curl_setopt($curl, CURLOPT_POSTFIELDS, $json); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); 
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 

    $api_response = curl_exec($curl); 
    curl_close($curl); 
    $result = json_decode($api_response); 

    $result = (object)$result; 
    $result = (object)$result->location; 

    return $result; 
    } 

그래서 내가, 데이타베이스에서 경도 값 및 위도를 가져 오는 해요 : 다음은 내 코드입니다. 그런 다음 GetAnail 함수를 사용하여 GetSnailTrail 함수의 매개 변수 경로에 대한 여러 레코드로 구성합니다. 내가 에코 또는 얻을 수없는 몇 가지 이유를 들어

{ 
    "snappedPoints": [ 
    { 
     "location": { 
     "latitude": 14.567361300000002, 
     "longitude": 121.03068420000001 
     }, 
     "originalIndex": 0, 
     "placeId": "ChIJF6oagKzJlzMRlFWOLr4F1SI" 
} 

이 같은 결과가 반환 후

https://roads.googleapis.com/v1/snapToRoads?path=14.567467,121.030726|14.566950,121.030497|14.567447,121.031204|14.566947,121.030520|14.566947,121.030520|14.567590,121.031181|14.567590,121.031181|14.567377,121.031236|14.566947,121.030520|14.567447,121.031204|14.566947,121.030520|14.566947,121.030520|14.566947,121.030520|14.566947,121.030520|14.567590,121.031181|14.567377,121.031236|14.567447,121.031204|14.567377,121.031236|14.567377,121.031236|14.567377,121.031236|14.567377,121.031236|14.567377,121.031236|14.567377,121.031236|14.567590,121.031181|14.567377,121.031236|14.567590,121.031181|14.567377,121.031236|14.567447,121.031204|14.567377,121.031236|14.567447,121.031204|14.567377,121.031236|14.567466,121.030726|14.567377,121.031236|14.567377,121.031236|14.567377,121.031236|14.567447,121.031204|14.567377,121.031236|14.567056,121.030569|14.567012,121.030539|14.567049,121.030568|14.567009,121.030545|14.567468,121.030728|14.567031,121.030549|14.567007,121.030545|14.567098,121.030403|14.567037,121.030548|14.567178,121.030624|14.566899,121.030486|14.566946,121.030520|14.567056,121.030569|14.567056,121.030569|14.567056,121.030569|14.566946,121.030520|14.566947,121.030522|14.566947,121.030522|14.566947,121.030522|14.567103,121.030594|14.566946,121.030520|14.566947,121.030522|14.566947,121.030524|14.567028,121.030556|14.566780,121.030502|14.566780,121.030502|14.567103,121.030594|14.567103,121.030594|14.566947,121.030522|14.566946,121.030520|14.566946,121.030520|14.566946,121.030520|14.566947,121.030524|14.566947,121.030524&interpolate=true&key=AIzaSyDRlfacNyHn7ZOsC0FzufqZ_rtQYfZD6wA 

API를 :

는 그래서 API에 전송하기 전에 다음과 같이 될 것입니다 응답을 내 $jsonarr에 입력하십시오. 응답을 받으면 어떻게해야합니까? 고맙습니다

+0

은 컬 오류를 제공 했습니까? 참조 : [curl_error] (http://php.net/manual/en/function.curl-error.php). 및'var_dump ($ api_response)'를 사용하십시오. – Jigar

+0

예 411 오류 –

답변

1

반환 된 데이터의 각 부분에 액세스하기 위해 브라우저에서 반환되는 URL과 관련 데이터가 주어진다면에 컬 요청의 응답이 할당되었다고 가정하면이 작업이 정상적으로 작동하는 것으로 나타났습니다.

curl 요청이 POST가 아닌 GET을 사용하여 완료되었으며 응답이 함수 외부에서 디코딩되었습니다. 처음에 경로를 구성 할 때 $result->snappedPoints

function GetSnailTrail($path=false){ 
     if(!$path)return false; 
     $key='AIzaSyDRlfacNyHn7ZOsC0FzufqZ_rtQYfZD6wA'; 
     $url='https://roads.googleapis.com/v1/snapToRoads?path='.$path.'&interpolate=true&key='.$key.' '; 

     $curl = curl_init(); 
     curl_setopt($curl, CURLOPT_URL, $url); 
     curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
     curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); 
     curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 

     $result = curl_exec($curl); 
     curl_close($curl); 

     return $result; 
    } 

    $path='14.567467,121.030726|14.566950,121.030497|14.567447,121.031204|14.566947,121.030520|14.566947,121.030520|14.567590,121.031181|14.567590,121.031181|14.567377,121.031236|14.566947,121.030520|14.567447,121.031204|14.566947,121.030520|14.566947,121.030520|14.566947,121.030520|14.566947,121.030520|14.567590,121.031181|14.567377,121.031236|14.567447,121.031204|14.567377,121.031236|14.567377,121.031236|14.567377,121.031236|14.567377,121.031236|14.567377,121.031236|14.567377,121.031236|14.567590,121.031181|14.567377,121.031236|14.567590,121.031181|14.567377,121.031236|14.567447,121.031204|14.567377,121.031236|14.567447,121.031204|14.567377,121.031236|14.567466,121.030726|14.567377,121.031236|14.567377,121.031236|14.567377,121.031236|14.567447,121.031204|14.567377,121.031236|14.567056,121.030569|14.567012,121.030539|14.567049,121.030568|14.567009,121.030545|14.567468,121.030728|14.567031,121.030549|14.567007,121.030545|14.567098,121.030403|14.567037,121.030548|14.567178,121.030624|14.566899,121.030486|14.566946,121.030520|14.567056,121.030569|14.567056,121.030569|14.567056,121.030569|14.566946,121.030520|14.566947,121.030522|14.566947,121.030522|14.566947,121.030522|14.567103,121.030594|14.566946,121.030520|14.566947,121.030522|14.566947,121.030524|14.567028,121.030556|14.566780,121.030502|14.566780,121.030502|14.567103,121.030594|14.567103,121.030594|14.566947,121.030522|14.566946,121.030520|14.566946,121.030520|14.566946,121.030520|14.566947,121.030524|14.566947,121.030524'; 

    $data=GetSnailTrail($path); 

    if($data) { 

     $json=json_decode($data,true); 
     $points=$json['snappedPoints']; 

     foreach($points as $key => $value){ 
      $obj=(object)$value; 
      $lat=$obj->location['latitude']; 
      $lng=$obj->location['longitude']; 
      $index=property_exists($obj,'originalIndex') ? $obj->originalIndex : 'n/a'; 
      $id=$obj->placeId; 
      echo 'id:'.$id.' index:'.$index.' lat:'.$lat.' lng:'.$lng.'<br />'; 
     } 
    } 

당신은 더 코드를 단순화 할 수 있어야한다 반면 이전 코드는 ~ $result->location 액세스를 시도했다.

$pathdata=array(); 

while($row = mssql_fetch_array($query)){ 
    $jsonarr[] = array(
     'id'  => $row['ID'], 
     'account' => $row['ACCOUNT'], 
     'datetime' => date("m/d/Y H:i:s", strtotime($row['DATETIME'])), 
     'loc'  => $row['LOCATION'], 
     'longi'  => $row['LONG'], 
     'lat'  => $row['LAT'], 
     'lac'  => $row['LAC'], 
     'cid'  => $row['CID'], 
     'remarks' => $row['REMARKS'] 
    ); 
    $pathdata[]="{$row['LAT']},{$row['LONG']}"; 
} 

$path=implode('|',$pathdata); 

그런 다음 선택 구분자를 사용하여 데이터를 implode 수 (|를)는 어레이를 구성하고,이 같은 while 루프 위도/LNG 채워한다면 복잡한 함수 $jsonarr 데이터를 처리하기보다는 포인트의 문자열을 달성했다.

이 다음에 대해 재생할 수있는 자바 스크립트로 처리하려면 :

echo " 
<script type='text/javascript'> 
    /* \$data is already a json object, echo it in javascript and process */ 
    var path={$data}; 

    function processpath(path){ 
     var json=path.snappedPoints; 
     for(var o in json){ 
      try{ 
       var point=json[ o ]; 
       if(typeof(point)!='undefined'){ 

        var lat=point.hasOwnProperty('location') && point.location.hasOwnProperty('latitude') ? point.location.latitude : false; 
        var lng=point.hasOwnProperty('location') && point.location.hasOwnProperty('longitude') ? point.location.longitude : false; 
        var index=point.hasOwnProperty('originalIndex') ? point.originalIndex : 'n/a'; 
        var id=point.hasOwnProperty('placeId') ? point.placeId : 'n/a'; 

        if(lat && lng) console.log('id:%s, index:%s, lat:%s, lng:%s', id, index, lat, lng); 
       } 
      }catch(err){ 
       console.warn(err); 
       continue; 
      } 
     } 
    } 
    processpath(path); 
</script>"; 
+0

답장을 보내 주셔서 감사합니다. 'BR'을 없애는 방법을 물어봐도 될까요? –

+0

아, 죄송합니다 - 'BR'은 로컬로 정의 된 상수입니다. 답변을 게시 할 때 항상 제거하는 것을 잊어 버렸습니다 ...'
' – RamRaider

+0

고맙습니다 ...하지만 어떻게하면 $ jsonarray에 넣을 수 있습니까? 자바 스크립트로 표시 되나요? 그리고 데이터베이스에서 긴 lat가 아닌가요? –