0
我使用谷歌地圖api得到一個基於給定的經度和緯度的地址。可以有多個調用api,經度和緯度從數據庫加載。解析json數據到一個表格,但一些行不被取出
我想通過所有的API調用,並獲得格式化的地址,並將其顯示在表中。
表佈局如下:計數/ REF /經度/緯度/地址
我的腳本如下:
<?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調用的鏈接),你會發現格式化地址有數據。
我在做什麼錯?
所有的行都應該返回地址。
那麼你的建議,在數據庫調用long和lats時放上十個限制? – RSM
如果您有一個包含地址的數據庫,請在其中緩存地理編碼座標(以遵守使用條款,並定期重新對其進行地理編碼)。使用數據庫中的座標,而不是通過加載地址對地址進行地理編碼。或者,如果你這樣做是爲了填充數據庫,那麼是一次10個,每組10個之間延遲。儘管實際上我建議的是「檢查錯誤」。如果出現錯誤(表示您超出配額),請延遲一段時間並重新嘗試。 – geocodezip
這可能是一個解決方案,但它沒有提供任何關於您一次可以撥打多少電話的使用政策,它只是說每天有2500個限制 – RSM