Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 22
  1. #1
    Utente di HTML.it L'avatar di blekm
    Registrato dal
    Jun 2004
    Messaggi
    8,310

    Google Maps: problema con geolocalizzazione

    ho fatto uno script in js per caricare su una mappa un array di indirizzi tramite geocoder (tralasciamo il fatto che solo IE7 mi carica correttamente tutti i marker per un secondo )

    questo è lo script (l'array di indirizzi ne contiene una 90ina, ho accorciato la lista per comodità)

    codice:
    <script type="text/javascript">     
    //<![CDATA[
       var geocoder;
       var map;
       var address = new Array("Via Garibaldi 102, Pisa",
    							"Via Santa Marta 41, Pisa",
    							"Via Ceci Antonio 46, Pisa",
    							"Corso Italia 156, Pisa",
    							"Via degli Ontani 10, Pisa",
    							"Via Degli Ontani 54, Pisa",
    							"Via Palestro 37, Pisa",
    							"Via Domenico Cavalca 33, Pisa"
    							);
       function load()
       {
          map = new GMap2(document.getElementById("map"));
          map.addControl(new GMapTypeControl());	 
          map.addControl(new GLargeMapControl());
    	  
          geocoder = new GClientGeocoder();
          map.setCenter(new GLatLng(43.716667,10.398817), 14);  
      	  for (i=0; i<address.length; i++)
          {
              geocoder.getLocations(address[i], addToMap);
          }
       }
     
       function addToMap(response)
       {
          place = response.Placemark[0];
          point = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);
          marker = new GMarker(point);
          map.addOverlay(marker);	  
       }
        //]]>
    </script>
    su IE, mi segnala un errore PlaceMark è nullo o qualcosa del genere , molto probabilmente non riesce a trasformare determinati indirizzi nelle coordinate .. come faccio a risalire a quali sono questi indirizzi?
    Il portale sul turismo a Lucca

    Siti web Lucca

    Vendo Tex a colori di Repubblica (primi 100 numeri) - info in pvt.

  2. #2
    Forse hai lo stesso problema che ho avuto io in passato.

    La geocodifica di indirizzi multipli via javascript è sconsigliata da Google stesso che invita ad immagazzinare le latitudini e longitudini in un database, da cui poi le estrai.
    Il motivo è che il geocoder di Google non elabora tutte le richieste quando sono troppo frequenti e ravvicinate.

    Io ho avuto il tuo stesso problema e mi sono dovuto creare una paginetta/script in cui ho gli indirizzi e di uno alla volta (con un click) recupero latitudine e longitudine, quindi le salvo in DB.

    Dovevo mostrare più di 80 marker e Google non si sognava neanche di geocodarli tutti (ne recuperavo al massimo una 20ina ).

    Non è il massimo avere una procedura non automatizzata, ma almeno ora mostro più di 100 marker senza problemi (clicca sul bottoncino della cartina ).

    Tuttavia avere le latitudini e longitudini in DB accelera e non di poco i tempi di caricamento e di esecuzione della pagina (almeno nel mio caso).

    Puoi sempre creare una procedura che ad intervalli recupera gli indirizzi finchè non li hai recuperati tutti.

  3. #3
    Utente di HTML.it L'avatar di blekm
    Registrato dal
    Jun 2004
    Messaggi
    8,310
    quindi io dovrei fare una lista e per ogni click salvare nel db lat e lon?

    E poi otterrei tutti i marker estraendoli dal database senza problemi?
    Il portale sul turismo a Lucca

    Siti web Lucca

    Vendo Tex a colori di Repubblica (primi 100 numeri) - info in pvt.

  4. #4
    Io ho fatto cosi:
    - Lungo elenco di indirizzi da gaolocalizzare.
    - A fiano ad ogni indirizzo un pulsante per ricavare le coordinate ed un pulsante per salvarle.
    Nella lista mantengo anche gli indirizzi già geolocalizzati e la possibilità di modificarli (e quindi geolocalizzarli nuovamente)

    La mia scelta non è per niente automatica ed ho agito così solo per lo spasso di farmi una maschera con un po' di ajax e qualche altra funzionalità (tipo il cambio di indirizzo al volo).

    Non mi sono preoccupato di cercare delle API che non fossero javascript per recuperare le coordinate, sempre per il motivo sopra citato: il gusto di farmi una mascherina bella da usare (tanto la uso io).

    Io ti suggerisco di cercare tra le API di Google il modo di ricavare lat e lng attraverso un linguaggio lato server (attraverso ASP, PHP, XML o qualunque altro tu stia usando) per poi immagazzinarle in DB.
    Sarebbe una soluzione automatica e decisamente migliore rispetto a quella adottata da me.

    Se queste API non ci sono...puoi farti uno script (con del javascript) che recuperi le coordinate, ma temporizzando le richieste, tipo una ogni secondo.

    Non mi viene in mente altro... :master:

    Riguardo alla tue seconda domanda: si, una volta che le hai in DB, ne puoi istanziare anche 2000 (!!!) di marker sulla mappa, passandogli direttamente lat e lng.

  5. #5
    Utente di HTML.it L'avatar di blekm
    Registrato dal
    Jun 2004
    Messaggi
    8,310
    Originariamente inviato da Bazzilla
    Se queste API non ci sono...puoi farti uno script (con del javascript) che recuperi le coordinate, ma temporizzando le richieste, tipo una ogni secondo.
    proverò a temporizzare il tutto, vedo cosa riesco a fare. Magari un marker ogni mezzo secondo.

    Originariamente inviato da Bazzilla
    Riguardo alla tue seconda domanda: si, una volta che le hai in DB, ne puoi istanziare anche 2000 (!!!) di marker sulla mappa, passandogli direttamente lat e lng.
    Ma perchè se gli carico 2000 lat/lon dal db mi fa vedere tutti i marker mentre se gli passo direttamente l'indirizzo da geolocalizzare va in tilt? Problematiche loro o "hanno imposto" una qualche limitazione?
    Il portale sul turismo a Lucca

    Siti web Lucca

    Vendo Tex a colori di Repubblica (primi 100 numeri) - info in pvt.

  6. #6
    Originariamente inviato da blekm
    Ma perchè se gli carico 2000 lat/lon dal db mi fa vedere tutti i marker mentre se gli passo direttamente l'indirizzo da geolocalizzare va in tilt? Problematiche loro o "hanno imposto" una qualche limitazione?
    Hanno impostato loro una limitazione, credo per evitare intoppi o malfunzionamenti o eccessive latenze del geocoder, dovuti a troppe richieste.

    Impostare 90 marker passando per il geocoder significa fare 90 richieste praticamente consecutive per ottenere coordinate. Su 90 richieste te ne esaudisce una 20 si e no, comunque mai tutte.
    Quindi, se tu, su 90 indirizzi hai ottenuto solo 20 coordinate, allora potrai impostare solo 20 marker.
    Se le coordinate le hai già tutte in DB, istanzi i marker passandogli DIRETTAMENTE lat e lng; come risultato ti ritroverai tutti i marker che vuoi.

    Creare un marker richiede lavoro del browser del client, mentre ricavare le coordinate attraverso geocoder significa una richiesta remota e lavoro da parte dei server di Google; questi potrebbero andare in crisi di fronte a 100 richieste contemporanee di 90 geolocalizzazioni alla volta (tanto per stare stretti ).

  7. #7
    Utente di HTML.it L'avatar di blekm
    Registrato dal
    Jun 2004
    Messaggi
    8,310
    ho capito, grazie della spiegazione esaustiva.

    Ora sto cercando una maniera per temporizzare quel mio codice di sopra con JS.. senza voler inserire dati nel db e cosi via.. puoi darmi una mano?

    col codice di sopra, potrei anche crearmi un array in js con tutti i dati e poi mettere i marker caricandoli dall'array, no?
    Il portale sul turismo a Lucca

    Siti web Lucca

    Vendo Tex a colori di Repubblica (primi 100 numeri) - info in pvt.

  8. #8
    Originariamente inviato da blekm
    ho capito, grazie della spiegazione esaustiva.
    Prego

    Originariamente inviato da blekm
    Ora sto cercando una maniera per temporizzare quel mio codice di sopra con JS.. senza voler inserire dati nel db e cosi via.. puoi darmi una mano?
    Sei sicuro ?
    Supponiamo tu abbia 90 marker da piazzare; una richiesta ogni mezzo secondo significherebbe 45 secondi (!!!!) per vedere tutti i markers sulla mappa.
    Sempre che il geocoder te li restituisca tutti...
    Caldamente sconsigliata

    Originariamente inviato da blekm
    col codice di sopra, potrei anche crearmi un array in js con tutti i dati e poi mettere i marker caricandoli dall'array, no?
    Se tu hai già tutti i dati in DB si, puoi farlo ed ottieni il risultato migliore nel minor tempo possibile.

  9. #9
    Utente di HTML.it L'avatar di blekm
    Registrato dal
    Jun 2004
    Messaggi
    8,310
    Originariamente inviato da Bazzilla
    Sei sicuro ?
    Supponiamo tu abbia 90 marker da piazzare; una richiesta ogni mezzo secondo significherebbe 45 secondi (!!!!) per vedere tutti i markers sulla mappa.
    Sempre che il geocoder te li restituisca tutti...
    Caldamente sconsigliata
    45 secondi va benissimo, anche qualche minuto, se necessario.
    So che non è una soluzione bellissima, ma non voglio mettermi a scrivere nel db, etc etc, per una cosa che uso una volta, due al massimo e via..

    Mi serve questa mappa con tutti i marker, è una cosa personale e niente che vada su un qualche sito, quindi posso aspettare anche qualche minuto per il caricamento di tutti i marker.

    Chiaro, se dovrò fare una cosa per il pubblico, adotterei la tua soluzione con db
    Il portale sul turismo a Lucca

    Siti web Lucca

    Vendo Tex a colori di Repubblica (primi 100 numeri) - info in pvt.

  10. #10
    Originariamente inviato da blekm
    45 secondi va benissimo, anche qualche minuto, se necessario.
    So che non è una soluzione bellissima, ma non voglio mettermi a scrivere nel db, etc etc, per una cosa che uso una volta, due al massimo e via..

    Mi serve questa mappa con tutti i marker, è una cosa personale e niente che vada su un qualche sito, quindi posso aspettare anche qualche minuto per il caricamento di tutti i marker.

    Chiaro, se dovrò fare una cosa per il pubblico, adotterei la tua soluzione con db
    SetTimout con 500 millisecondi di delay sulla funzione che geolocalizza.
    Non ho mai impostato una serie di operazioni temporizzate ( :master: ):

    Codice PHP:

    var array_indirizzi = ['indirizzo_1','indirizzo_2','indirizzo_3','indirizzo_4',....,'indirizzo_n'];

    function 
    processaMarker(){
     var 
    indirizzo array_indirizzi.pop();
     
    geoCodificaMarker(indirizzo);
    }

    function 
    geoCodificaMarker(indirizzo){
     
    //codice per geocodare l'indirizzo in input e disegnare il marker
     /*
     ... 
    */

     
    if(array_indirizzi.length>0) {
      var 
    indirizzo array_indirizzi.pop(); 
      
    setTimout(function(){geoCodificaMarker(indirizzo)},500);
     }
    }

    document.body.onload=processaMarker

    Una roba del genere.
    Occhio che l'ho buttata giù al volo e potrebbe inlooparti il browser, comunque il concetto è questo.

    A tuo rischio e pericolo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.