0

我正在使用 google maps api 根据给定的经度和纬度获取地址。可以对 api 进行多次调用,经度和纬度是从数据库中加载的。

我想通过所有的 api 调用并获取格式化的地址并将其显示在表格中。

表格布局如下:count / ref / longitude / latitude / address

我的脚本如下:

<?php
$databasehost = "localhost";
$databasename = "...";
$databasetable = "import1";
$databasetable2 = "data1";
$databaseusername ="...";
$databasepassword = "...";


$con = @mysql_connect($databasehost,$databaseusername,$databasepassword) or die(mysql_error());
@mysql_select_db($databasename) or die(mysql_error());

$query = mysql_query("SELECT * from $databasetable;");

$data = array();

$index = 0;
while($row = mysql_fetch_assoc($query))
{
     $data[$index] = $row;
     $index++;
}
$count = 1;
?>
<table>
<?php
foreach ($data as $key) {
    $url = 'http://maps.googleapis.com/maps/api/geocode/json?latlng='.$key['latitude'].','.$key['longitude'].'&sensor=true';
    $json = file_get_contents($url);
    $dataReceived = json_decode($json, TRUE);

    if(!empty($dataReceived['results'][0]['formatted_address']))
    {
        $formattedAddress = $dataReceived['results'][0]['formatted_address'];
    }else{
        $formattedAddress = '';
    }
    ?>
    <tr>
        <td><?=$count?></td>
        <td><?=$key['id']?></td>
        <td><?=$key['latitude']?></td>
        <td><?=$key['longitude']?></td>
        <td><?=$formattedAddress?></td>
    </tr>
    <?php
    $count++;
}
?>
</table>
<?php
@mysql_close($con);
?>

现在,如果您访问此链接:http ://www.ryansmurphy.com/crawler/get-data.php ,问题就变得清晰了。有些行,没有地址。如果您不断刷新,您会注意到每次似乎都不同的行没有地址。它非常奇怪。

如果您选择其中没有地址的行并将经度和纬度放入 api 调用中(请参阅上面脚本中 api 调用的链接),您会注意到格式化地址的数据。

我究竟做错了什么?

所有行都应返回地址。

4

1 回答 1

1

检查错误。地理编码器受到配额和速率限制。每次页面加载时对大量地址进行地理编码并不是一个好主意(其中很大的数字是大于 ~10 的数字)。

于 2013-05-30T23:02:53.743 回答