2012-06-26 21 views
0

對於應用程序i'me建築物圖像我想從http://maps.googleapis.com/maps/api/streetview?location=myaddressvariable &使用街景圖像大小= mysizes &鍵= myapikey & restofvars ...節省http://maps.googleapis.com/maps/api/streetview?vars用PHP捲曲,或的fsockopen的fopen

這讓這個形象trought一個正常的瀏覽器請求時工作正常。

但我真的很想用php - > cUrl或fsockopen或fopen保存這個圖像。 奇怪的是,無論我使用請求超時的PHP功能,我從谷歌得到400錯誤。

這是一個權限問題還是我做錯了什麼?

那麼什麼是最好的方式來保存圖像從谷歌街景使用服務器端請求與PHP?

+0

刮到谷歌頁面是違反他們的服務條款。 –

回答

0

這就是我的做法。做任何你想做的事情,你可能需要編輯它。我也使用緩存。

public function Flat($Coors='', $Zoom=15, $Size='250x200'){ 
    # Ok, on doit avoir des coordonnées valides 
    $Coors = array_map('trim', explode(',', $Coors)); 

    $CoorsName = array(); 
    foreach($Coors as $X){ 
     if(!is_numeric($X)){ 
      $Error = 1; 
     } else { 
      if($X[0] == '-'){ 
       $CoorsName[] = substr($X, 0, 6); 
      } else { 
       $CoorsName[] = substr($X, 0, 5); 
      } 
     } 
    } 
    $Coors = implode(',', $Coors); 
    $CoorsName = implode('_', $CoorsName); 

    # Le zoom doit aussi être valide 
    if(!is_numeric($Zoom) OR !is_int($Zoom)){ 
     $Error = 1; 
    } 

    # Maintenant on doit s'assurer de la grandeur 
    $Size = array_map('trim', explode('x', $Size)); 

    foreach($Size as $X){ 
     if(!is_numeric($X)){ 
      $Error = 1; 
     } 
    } 
    $Size = implode('x', $Size); 

    # Ok, avant d'aller chercher l'image, on doit vérifier le cache 
    $ImageExist = false; 

    # Est-ce que les dossiers existes ? 
    $CachePath = '/home/.../cache/maps/flat/'; 
    $PathLevel = array($CachePath.$Zoom.'/', 
         $CachePath.$Zoom.'/'.$Size.'/', 
         $CachePath.$Zoom.'/'.$Size.'/'.$CoorsName.'/'); 

    foreach($PathLevel as $Path){ 
     if(!file_exists($Path)){ 
      mkdir($Path, 0777); 
     } 
    } 

    # Chemin complet de l'image 
    $ImagePath = $PathLevel[2].$Coors.'.png'; 
    $GoogleURL = 'http://maps.googleapis.com/maps/api/staticmap?'; 
    $Args = array( 'center' => $Coors, 
        'zoom'  => $Zoom, 
        'size'  => $Size, 
        'markers' => 'icon:http://www.domain.com/pin.png|'.$Coors, 
        'sensor' => 'false'); 

    $URL_GET = ''; 
    foreach($Args as $Arg => $Value){ 
     $URL_GET.= ($URL_GET != '' ? '&' : '') . $Arg.'='.$Value.'&'; 
    } 
    $GoogleURL.= ($URL_GET != '' ? '?'.$URL_GET : ''); 

    # On va vérifier si l'image existe maintenant 
    if(!file_exists($ImagePath)){ 
     $Content = file_get_contents($GoogleURL); 

     $fHandle = fopen($ImagePath, 'a'); 
     fwrite($fHandle, $Content); 
     fclose($fHandle); 

    // file_put_contents($ImagePath, $Content); 
    } else { 
     $ImageExist = true; 
    } 

    # Header requis 
    header('Pragma: public'); // Requis 
    header('Expires: 0'); 
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
    header('Cache-Control: private', false); // Requis 
    header('Content-Type: image/png'); 
    header('Content-Transfer-Encoding: binary'); 

    # On va afficher l'image maintenant 
    if($ImageExist === true){ 
     header('Content-Length: '.filesize($ImagePath)); 
     readfile($ImagePath); 
    } else { 
     header('Content-Length: '.strlen($Content)); 
     echo $Content; 
    } 
} 
+0

感謝有用的功能,我發現我不得不用%20替換所有的空間。由於這是一個Ajax請求,400郵件是因爲網址不正確。 – user1483639

+0

我的榮幸。至少,你發現了這個問題。 –