2013-05-30 52 views
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調用的鏈接),你會發現格式化地址有數據。

我在做什麼錯?

所有的行都應該返回地址。

回答

1

檢查錯誤。地理編碼器受制於配額和速率限制。每次頁面加載時對大量地址進行地理編碼並不是一個好主意(大數字是大於10的數字)。

+0

那麼你的建議,在數據庫調用long和lats時放上十個限制? – RSM

+0

如果您有一個包含地址的數據庫,請在其中緩存地理編碼座標(以遵守使用條款,並定期重新對其進行地理編碼)。使用數據庫中的座標,而不是通過加載地址對地址進行地理編碼。或者,如果你這樣做是爲了填充數據庫,那麼是一次10個,每組10個之間延遲。儘管實際上我建議的是「檢查錯誤」。如果出現錯誤(表示您超出配額),請延遲一段時間並重新嘗試。 – geocodezip

+0

這可能是一個解決方案,但它沒有提供任何關於您一次可以撥打多少電話的使用政策,它只是說每天有2500個限制 – RSM

相關問題