17

tengo 153 marcadores y la necesidad de generar un mapa estático con ellos, pero cuando los puso en la url me sale un error como este:Google Static Maps longitud de la URL límite

414 Request-Uri Too Large 

Mi url es algo como esto

"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&......" 

gracias amigos!

Respuesta

15

Esta respuesta provino del Servidor (google). Por lo tanto, no está permitido solicitar URL tan largas.

Véase la documentación del API Google para obtener más informaciones:

estático Mapa URLs están limitados a 2.048 caracteres de tamaño. En la práctica, es probable que no necesite URL más largas que esta, a menos que genere mapas complicados con una gran cantidad de marcadores y rutas.

+1

y ¿qué ocurre si necesita generar una imagen con una gran cantidad de ubicaciones? (es decir, si quería generar un polígono que representara varios condados de EE. UU.) – PrivateJoker

+4

Estoy tan cansado de las respuestas inútiles de la gente inteligente. ¿Por qué esta respuesta se subió? OBVIAMENTE hay mapas por ahí con más puntos de los que caben en una URL. Esta NO es una respuesta. – Hill

+0

@Hill Answer y upvote pueden ser falsificados. Sabes que la mayoría de las cosas que puedes ver son falsas en lugar de reales: D – Kasnady

2

Las URL de más de 2000 caracteres ish no son válidas. ¿Es tu cadena de consulta más larga que eso?

también ver este post

18

La forma en que veo es que sea reducir la precisión de sus marcadores con el fin de ganar espacio en la URL. (es decir, marcadores = 13.72326, -86.13705 ----> marcadores = 13.73, -86.14) que resultan en la colocación de los marcadores en una cuadrícula ...
O vas con un API no estática

+0

Esto es lo que terminé haciendo: redondear en PHP con precisión hasta el 6to decimal realmente acortó las cosas para mí. –

5
+0

¿Cómo hiciste esto? No puedo averiguar cómo manipular el enlace generado por los polígonos. – Hill

4

Puede codificar sus polilíneas y hacerlos más corto.

Aquí es el ejemplo que puede ayudar a la manera de corta sus polilíneas

estoy usando la biblioteca de php para corta la longitud aquí está el enlace de la biblioteca https://github.com/danmandle/encoded-polyline-stitcher

si utiliza esta biblioteca

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

punto aquí es importante si utiliza URL corta que tiene que utilizar "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 biblioteca está disponible para otros idiomas, así si no está usando PHP.

espero que ayuda a los demás

+1

La pregunta es sobre marcadores, NO polilíneas. –

1

hilo muy antiguo, pero tuve que improvisar algo para abordar este problema en un apuro. Compartir aquí en caso de que alguien más tenga el mismo problema.

Se toma una matriz de marcadores en la forma:

$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 longitud url es de 2048 caracteres por lo que primero se reduce la exactitud de la lng lat a $ marker_accuracy (4) a continuación, inicia la eliminación de los marcadores desde la mitad . marcadores de sacarlo del medio podrían mejorarse mucho como lo hace se una a la vez

$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 ha ampliado recientemente el límite de URL para 8192, pero si necesita más que eso, todavía se necesitan para simplificar su mapa o recurrir a otro tricks.

Cuestiones relacionadas