在Google地图中设置纬度和经度 - 未定义的结果

时间:2016-02-26 03:54:07

标签: php json google-maps

目前在home.php上使用downloadURL()下载xml.php文件。从数据库创建xml doc以在地图上显示标记。之前工作得很好,但现在我收到了geoCode / lat / long的错误。有什么建议? FireFox错误:未定义的偏移量[0]通过结果。

<?php    
 include 'connect.php';
 if(isset($_SESSION['user_name']))
 {
     header('Location: home.php');
 }
     $query = "SELECT `acc_id`,`acc_name`,`acc_address`,acc_zip FROM `account_acc` ";
     $result = mysqli_query($connection,$query) or die(mysql_error());

     $doc = new DomDocument('1.0');
     $node = $doc->createElement("markers");
     $parnode = $doc->appendChild($node);

     header('Content-type: text/xml');

     while($row = mysqli_fetch_array($result))
     {
       $node = $doc->createElement("marker");
       $newnode = $parnode->appendChild($node);

        $address = $row['acc_zip'];
        $prepAddr = str_replace(' ','+',$address);
                 $geocode=file_get_contents('https://maps.google.com/maps/api/geocode/json?key=API&address='.$prepAddr);
        $output= json_decode($geocode);
        $lat = $output->results[0]->geometry->location->lat;
        $long = $output->results[0]->geometry->location->lng;

        $newnode->setAttribute("name", $row['acc_name']);
        $newnode->setAttribute("accid", $row['acc_id']);
        $newnode->setAttribute("address", $row['acc_address']);
        $newnode->setAttribute("zip", $row['acc_zip']);
        $newnode->setAttribute("lat", $lat);
        $newnode->setAttribute("long", $long);

       }

       print $doc->saveXML();

&GT;

2 个答案:

答案 0 :(得分:0)

没有位置的lat / lng属性,它们是函数(lat()/ lng())。

答案 1 :(得分:0)

由于无法确定提供的地址(undefined offset [0]变量)且响应包含空$address,因此您很可能收到错误results。对于这种情况,Google Maps Geocoding API提供Status Codes

  
      
  • &#34; OK&#34;表示没有发生错误;地址已成功解析,并且至少返回了一个地理编码。
  •   
  • &#34; ZERO_RESULTS&#34;表示地理编码成功但未返回任何结果。如果地理编码器通过了,可能会发生这种情况   不存在的地址。
  •   
  • &#34; OVER_QUERY_LIMIT&#34;表示您已超过配额。
  •   
  • &#34; REQUEST_DENIED&#34;表示您的请求被拒绝。
  •   
  • &#34; INVALID_REQUEST&#34;通常表示缺少查询(地址,组件或latlng)。
  •   
  • &#34; UNKNOWN_ERROR&#34;表示由于服务器错误而无法处理请求。如果再试一次,请求可能会成功。
  •   

您可以利用它来确定地址是否已解决。

示例

$geocode = file_get_contents('https://maps.google.com/maps/api/geocode/json?address=' . $prepAddr);
$output = json_decode($geocode);
if($output->status == "OK"){

    $lat = $output->results[0]->geometry->location->lat;
    $long = $output->results[0]->geometry->location->lng;

    //the remaining code goes here...
}