目前在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;
答案 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...
}