2013-05-26 3 views
0

아래 코드를 도와주세요. 나는 버튼을 클릭 할 때 장소 이름의 위도와 경도를 얻는다. 그러나 늦게까지 작동하지 않습니다. "주소 x 지오 코딩에 실패했습니다.받은 상태"x는 주어진 주소이고 상태 코드는 제공되지 않습니다.v3를 사용하는 Google 지오 코딩이 오류를 표시하지 않습니다.

$id=$_REQUEST['id']; 
    define("MAPS_HOST", "maps.googleapis.com"); 
    define("KEY", "xxxxxxx"); 

    $query = "SELECT * FROM markers WHERE mid = $id LIMIT 1"; 
    $result = mysql_query($query); 
    if (!$result) { 
     die("Invalid query: " . mysql_error()); 
    } 

    // Initialize delay in geocode speed 
    $delay = 0; 
    $base_url = "http://" . MAPS_HOST . "/maps/api/geocode/xml?address="; 

    if($row = @mysql_fetch_assoc($result)){ 
    $geocode_pending = true; 
    $address = $row["address"]; 
    while ($geocode_pending) { 
    $request_url = $base_url . urlencode($address) . "&sensor=false&key=" . KEY; 
     $xml = simplexml_load_file($request_url) or die("url not loading"); 

     $status = $xml->Response->Status->code; 
     if (strcmp($status, "200") == 0) { 
      // Successful geocode 
      $geocode_pending = false; 
      $coordinates = $xml->Response->Placemark->Point->coordinates; 
      //$coordinatesSplit = split(",", $coordinates); 
      // Format: Longitude, Latitude, Altitude 
      //$lat = $coordinatesSplit[1]; 
      //$lng = $coordinatesSplit[0]; 
      list($lat,$lng) = explode(",",$coordinates); 
      $query = sprintf("UPDATE markers " . 
       " SET lat = '%s', lng = '%s' " . 
       " WHERE mid = '%s' LIMIT 1;", 
       mysql_real_escape_string($lng), 
       mysql_real_escape_string($lat), 
       mysql_real_escape_string($id)); 
      $update_result = mysql_query($query); 
      if (!$update_result) { 
      die("Invalid query: " . mysql_error()); 
      }else{ 
       echo "$lat;$lng"; 
      } 
     } else if (strcmp($status, "620") == 0) { 
      // sent geocodes too fast 
      $delay += 100000; 
     } else { 
      // failure to geocode 
      $geocode_pending = false; 
      echo "Address " . $address . " failed to geocode. "; 
      echo "Received status " . $status . " 
    \n"; 
     } 
     usleep($delay); 
    } 
    } 

답변

1

나는있는 코드의 기반이되는 API를하지만, 현재의 API의 응답이 라인에서는 작동하지 않습니다 모르겠어요 :

$status = $xml->Response->Status->code; 
if (strcmp($status, "200") == 0) { 

에 요소가 없습니다 Response, Status 또는 code, 응답에는 숫자 상태 코드가 포함되지 않습니다.

사용이 대신 :

$status = $xml->status; 
if (strcmp($status, "OK") == 0) { 

반환 된 XML의 구조를 살펴 보시기 바랍니다 코드의 나머지 부분을 해결하기 위해, 또한 어떤 요소 Placemark, Pointcoordinates 없습니다.

그것은해야한다 :

$lat = $xml->result->geometry->location->lat; 
$lng = $xml->result->geometry->location->lng; 
+0

정말 감사합니다 Dr.Molle. 내가 열쇠를 제거한 후에 그것은 매력처럼 작동했습니다. – user1149162

관련 문제