17

J'ai 153 marqueurs et besoin de générer une carte statique avec eux, mais quand les mettre dans l'URL que je reçois une erreur comme ceci:Google Static Maps limite de longueur d'URL

414 Request-Uri Too Large 

Mon URL est quelque chose comme ça

"http://maps.google.com/maps/api/staticmap?center=13.00,-85.00&size=600x500&maptype=roadmap&markers=13.305,-86.18636&markers=13.72326,-86.13705&......" 

Merci à tous!

Répondre

15

Cette réponse provient du serveur (google). Vous n'êtes donc pas autorisé à demander des URL aussi longues.

Voir la doc api google pour plus d'infos:

URL Static Map sont limités à 2048 caractères de taille. En pratique, vous n'aurez probablement pas besoin d'URL plus longues que celles-ci, sauf si vous produisez des cartes compliquées avec un nombre élevé de marqueurs et de chemins.

+1

(c'est-à-dire si je voulais générer un polygone représentant plusieurs comtés américains) – PrivateJoker

+4

Je suis si fatigué des réponses intelligentes et inutiles des gens. Pourquoi cette réponse a-t-elle été mise à jour? EVIDEMMENT il y a des cartes là-bas avec plus de points que ne peut tenir dans une URL. Ce n'est pas une réponse. – Hill

+0

@Hill Réponse et upvote peut être truqué. Vous savez que la plupart des choses que vous pouvez voir sont fausses au lieu de vraies: D – Kasnady

2

Les URL de plus de 2000 caractères ne sont pas valides. Est-ce que votre querystring est plus longue que ça?

Voir aussi ce post

18

La façon dont je vois est soit vous réduire la précision de vos marqueurs afin de gagner de l'espace dans l'URL. (c.-à-marqueurs = 13.72326, -86.13705 ----> marqueurs = 13,73, -86.14) résultant en plaçant les marqueurs dans une grille ...
Ou vous allez avec un api non statique

+0

C'est ce que j'ai fini par faire - arrondir en PHP en utilisant la précision à la 6ème décimale a vraiment raccourci les choses pour moi. –

5
+0

Comment avez-vous fait ceci? Je ne peux pas savoir comment manipuler le lien généré par les polygones. – Hill

4

Vous pouvez encoder vos polylignes et les rendre plus courtes.

Voici l'exemple qui peut vous aider comment court vos polylignes

J'utilise la bibliothèque php à court la longueur ici est le lien de la bibliothèque https://github.com/danmandle/encoded-polyline-stitcher

si vous utilisez cette bibliothèque

(51.838245,-111.834991|51.833179,-111.83503|51.831007022306,-111.8232751234|51.838244686875,-111.82327418214) = (atk{HtwqiTt^[email protected]) 

ici point important est que si vous utilisez URL courte, vous devez utiliser "enc:" keywor d

(fillcolor:0xAA000033|color:0xFFFFFF00|51.838245,-111.834991|51.833179,-111.83503|51.831007022306,-111.8232751234|51.838244686875,-111.82327418214) = (fillcolor:0xAA000033|color:0xFFFFFF00|enc:atk{HtwqiTt^[email protected]) 

La bibliothèque est disponible pour d'autres langues si vous n'utilisez pas php.

J'espère que cela aide les autres

+1

La question concerne les marqueurs, PAS les polylignes. –

1

fil très vieux mais je devais bricoler quelque chose pour résoudre ce problème très pressé. Partage ici au cas où quelqu'un d'autre aurait eu le même problème.

Il prend un tableau de marqueurs sous la forme:

$points = 
     [0] => Array 
      (
       [lat] => 52.1916312 
       [lng] => -1.7083109 
      ) 

     [1] => Array 
      (
       [lat] => 50.2681918 
       [lng] => 2.5616710 
      ) 
      ... 
      ... 
      ... 
     [500] => Array 
      (
       [lat] => 49.1821968 
       [lng] => 2.1671056 
      ) 

Max longueur d'URL est de 2048 caractères de sorte qu'il réduit d'abord la précision de la lat lng à marker_accuracy de $ (4) commence alors l'élimination des marqueurs à partir du milieu . Suppression des marqueurs du milieu pourrait être beaucoup amélioré comme il le fait un à la fois

$map_url = make_static_map($points); 

function make_static_map($points,$reduce_len=false,$reduce_count=false){ 
    $grp_points = array(); 
    $grps = array(); 
    $url = array(); 
    $max_len = 0; 
    $width = 640; //max 640 :(
    $height = 640; //max 640 :(
    $marker_accuracy = 4; //Lat lng to 4 decimal places minimum, 3 would be less accurate 

    $url[] = 'http://maps.googleapis.com/maps/api/staticmap?'; 
    $url[] = '&size='.$width.'x'.$height.'&scale=2'; 
    $url[] = '&markers='; 

    if($reduce_count){ //Last resort to shortening this 
     array_splice($points, ceil(count($points)/2), 1); 
    } 

    foreach($points as $i => $point){ 
     if($reduce_len){ 
      $point['lat'] = number_format($point['lat'], $reduce_len, '.', ''); 
      $points[$i]['lat'] = $point['lat']; 
      $point['lng'] = number_format($point['lng'], $reduce_len, '.', ''); 
      $points[$i]['lng'] = $point['lng']; 
     }else{ 
      $t_len = max(strlen($point['lat']),strlen($point['lng'])); 
      if($t_len>$max_len){ 
       $max_len = $t_len; 
      } 
     } 
     $grps[] = array($point['lat'],$point['lng']); 
    } 
    $grps = remove_duplicate_points($grps); 
    foreach($grps as $grp){ 
     $grp_points[] = implode(',',$grp); 
    } 
    $url[] = implode('|',$grp_points); 
    $url[] = '&sensor=false'; 
    $url = implode('',$url); 
    if(strlen($url) > 2048){ 
     // Bugger, too long for google 
     if($max_len>$marker_accuracy){ 
      // Reduce the length of lat lng decimal places 
      return(make_static_map($points,$max_len-1,false)); 
     }else{ 
      // Reduce the number of lat lng markers (from center) 
      return(make_static_map($points,false,true)); 
     } 
    }else{ 
     return($url); 
    } 
} 


function remove_duplicate_points($points){ 
    $points = array_map('serialize', $points); 
    $points = array_unique($points); 
    return(array_map('unserialize', $points)); 
} 
2

Google a récemment étendu la limite d'URL à 8192, mais si vous avez besoin de plus que cela, vous avez encore besoin de simplifier votre carte ou recours à d'autres tricks. Et si vous avez besoin de générer une image avec un nombre élevé d'emplacements?