Foros del Web » Programando para Internet » Javascript »

Duda con API de GoogleMaps

Estas en el tema de Duda con API de GoogleMaps en el foro de Javascript en Foros del Web. No tengo basta experiencia con Google Maps, pero conozco "lo básico" pero ahora me enfrento a la siguiente situación: debo posicionar ciertas direcciones en un ...
  #1 (permalink)  
Antiguo 14/09/2010, 17:37
Avatar de Anarninquë
Colaborador
 
Fecha de Ingreso: julio-2005
Ubicación: MVD | Uruguay
Mensajes: 1.096
Antigüedad: 18 años, 9 meses
Puntos: 28
Pregunta Duda con API de GoogleMaps

No tengo basta experiencia con Google Maps, pero conozco "lo básico" pero ahora me enfrento a la siguiente situación: debo posicionar ciertas direcciones en un google map, el código que utilizaba (para definir cada punto) era algo así:

Código PHP:
<?php
   $k 
0;
    while(
$campo mysql_fetch_assoc($query)){
      
$k++;
?>
var address<?php echo $k?> = "<?php echo $direccion.', '.$zona?>";

geocoder.getLatLng(address<?php echo $k?>,
   function showLocation(point){
      var marker = new GMarker(point);
      map.addOverlay(marker);

      // Etiqueta
      var label = "etiqueta con datos y demas...";
      GEvent.addListener(marker, "click",
         function showLabel(){marker.openInfoWindowHtml(label);});
      });

<?php ?>
Pero el problema es que esto no está funcionando cuando las direcciones son muchas (más de 100 o 200)... supongo que al JS no le da para procesar (al menos de esta forma) ese número de direcciones y agregar todos los pointers en el mapa...

Hay alguna forma mejor de hacer esto? Alguna sugerencia/comentario?

Muchas gracias!
__________________
Marcelo Ferreiro - Desarrollador Web
Mi Web - Pixelar.me
  #2 (permalink)  
Antiguo 14/09/2010, 17:38
Avatar de Anarninquë
Colaborador
 
Fecha de Ingreso: julio-2005
Ubicación: MVD | Uruguay
Mensajes: 1.096
Antigüedad: 18 años, 9 meses
Puntos: 28
Respuesta: Duda con API de GoogleMaps

O sea, explicando un poco el código:

Luego de definir el mapa y demas, lo que hago es un while en PHP que va creando variables del tipo address1, address2, address3, .... addressN y a cada una le asigna una "dirección, ciudad" para luego con getLatLng asignarle unas latitudes en el mapa.


Pero esto falla cuando se trata de muchas direcciones...
Cualquier ayuda es bien bienvenida ;)
__________________
Marcelo Ferreiro - Desarrollador Web
Mi Web - Pixelar.me
  #3 (permalink)  
Antiguo 14/09/2010, 20:34
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Duda con API de GoogleMaps

En primer lugar, puedes optimizar el código Javascript de esta manera:
Código PHP:
Ver original
  1. <?php
  2.     $addresses = array();
  3.     while($campo = mysql_fetch_assoc($query)){
  4.         $addresses[] = "$direccion, $zona";
  5.     }
  6.     if (count($addresses) > 0) {
  7. ?>
  8. var addresses = <?php json_encode($addresses); ?>;
  9.  
  10. function showLocation(point) {
  11.     var marker = new GMarker(point);
  12.     map.addOverLay(marker);
  13.  
  14.     // Etiqueta
  15.     GEvent.addListener(marker, "click", function (){
  16.         var label = "etiqueta con datos y demas...";
  17.         this.openInfoWindowHtml(label);
  18.     });
  19. }
  20.  
  21. for (i = 0; i < addresses.length; i++) {
  22.     geocoder.getLatLng(addresses[i], showLocation);
  23. }
  24. <?php } ?>
Otra sugerencia es almacenar en la base de datos una caché de las coordenadas de las direcciones, de modo que no tengas que llamar a getLatLng() cada vez que se carga la página.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #4 (permalink)  
Antiguo 15/09/2010, 06:07
Avatar de Anarninquë
Colaborador
 
Fecha de Ingreso: julio-2005
Ubicación: MVD | Uruguay
Mensajes: 1.096
Antigüedad: 18 años, 9 meses
Puntos: 28
Respuesta: Duda con API de GoogleMaps

Gracias David por tu respuesta y por tu sugerencia :)

El problema que note es que yo necesito que la etiqueta (label) varíe en cada caso... pero se me ocurre que podría hacerlo pasando como parámetro el contenido de label, no?
Aunque cómo lo haría? simplemente pasandolo entre paréntesis así:

Código PHP:
function showLocation(pointcontenidoLabel) {
    var 
marker = new GMarker(point);
    
map.addOverLay(marker);
 
    
// Etiqueta
    
GEvent.addListener(marker"click", function (){
        var 
label contenidoLabel;
        
this.openInfoWindowHtml(label);
    });
}
 
for (
0addresses.lengthi++) {
    
geocoder.getLatLng(addresses[i], showLocation(this"texto de la etiqueta"));

__________________
Marcelo Ferreiro - Desarrollador Web
Mi Web - Pixelar.me
  #5 (permalink)  
Antiguo 15/09/2010, 08:41
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Duda con API de GoogleMaps

¿Varía en base a qué precisamente?
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #6 (permalink)  
Antiguo 15/09/2010, 08:43
Avatar de Anarninquë
Colaborador
 
Fecha de Ingreso: julio-2005
Ubicación: MVD | Uruguay
Mensajes: 1.096
Antigüedad: 18 años, 9 meses
Puntos: 28
Respuesta: Duda con API de GoogleMaps

A cada marcador... o sea cada dirección tiene un nombre y datos asociados que van en la label... se entiende?
__________________
Marcelo Ferreiro - Desarrollador Web
Mi Web - Pixelar.me
  #7 (permalink)  
Antiguo 15/09/2010, 09:04
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Duda con API de GoogleMaps

Puedes crear una función anónima para el caso:
Código Javascript:
Ver original
  1. geocoder.getLatLng(addresses[i], function() {
  2.     showLocation(this, "texto de la etiqueta");
  3. });
Sólo ten en cuenta que cuando se ejecuta esa parte del código, los registros ya terminaron de recorrerse. Si la etiqueta está en la base de datos, debes hacer algo parecido a lo que indiqué con $addresses.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #8 (permalink)  
Antiguo 15/09/2010, 11:33
Avatar de Anarninquë
Colaborador
 
Fecha de Ingreso: julio-2005
Ubicación: MVD | Uruguay
Mensajes: 1.096
Antigüedad: 18 años, 9 meses
Puntos: 28
Respuesta: Duda con API de GoogleMaps

Muchas gracias David, sirvió. Pero al aumentar el número de registros, sigue dando problemas :S

No da error ni nada, pero carga un X número (unos 50) y luego se queda... :(
Lo que estuve viendo es que se puede cargar desde un XML previamente generado con PHP... quizá eso sea lo más estable, has trabajado de esa forma alguna vez!?


Muchas gracias por tu ayuda, lo valoro mucho!
__________________
Marcelo Ferreiro - Desarrollador Web
Mi Web - Pixelar.me
  #9 (permalink)  
Antiguo 15/09/2010, 11:36
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Duda con API de GoogleMaps

¿Y qué tal si guardas en tu base de datos las coordenadas de la dirección? Eso aumentaría en gran manera el rendimiento. Ya que cada vez que llamas a getLatLng() se tiene que hacer una petición a los servidores de Google, eso es un problema cuando son muchas direcciones como en tu caso.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #10 (permalink)  
Antiguo 15/09/2010, 11:45
Avatar de Anarninquë
Colaborador
 
Fecha de Ingreso: julio-2005
Ubicación: MVD | Uruguay
Mensajes: 1.096
Antigüedad: 18 años, 9 meses
Puntos: 28
Respuesta: Duda con API de GoogleMaps

Y tu crees que eso solucionaría el tema?
Digo porque debería reestructurar la BBDD y todo lo que eso implica al agregar y editar datos... pero puede ser una buena opción si pudiera solucionar de esa forma...

Crees que teniendo las coordenadas aliviaría tanto?
__________________
Marcelo Ferreiro - Desarrollador Web
Mi Web - Pixelar.me
  #11 (permalink)  
Antiguo 15/09/2010, 14:18
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Duda con API de GoogleMaps

De que aumentará de forma importante el rendimiento, es seguro.

De todos modos, puedes crear una tabla adicional (de relación uno a uno) para realizar pruebas y ver si te convence el resultado.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #12 (permalink)  
Antiguo 17/09/2010, 05:06
Avatar de Anarninquë
Colaborador
 
Fecha de Ingreso: julio-2005
Ubicación: MVD | Uruguay
Mensajes: 1.096
Antigüedad: 18 años, 9 meses
Puntos: 28
Respuesta: Duda con API de GoogleMaps

Excelente muchas gracias por el tip, voy a hacer algunas pruebas al respecto...

Por cierto, encontré también un tutorial sobre lo de importar un XML que comentaba el otro día, ese será mi "plan B"... http://code.google.com/intl/es/apis/...hpsqlajax.html


__________________
Marcelo Ferreiro - Desarrollador Web
Mi Web - Pixelar.me

Etiquetas: ajax, api, mysql, php, googlemaps
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:03.