[Javascript] [RISOLTO] Problema con Google Maps e "Zero_Results"

turifasola

Nuovo Utente
14 Gen 2014
8
0
0
Salve! Probabilmente avevo postato nel Blog sbagliato la mia richiesta, per cui la riprongo qui. Sto cercando di rappresentare graficamente tutti i marker di segnalazioni inserite in un database access, non sono un esperto di Javascript ed ho cercato di modificare questo script per le mie esigenze ma ho un problema con gli indirizzi caricati nel database che Google map non trova o che non sono riportati correttamente. Ho provato diverse soluzioni ma non riesco a "saltare" l'errore "ZERO_RESULTS", con un codice del tipo "ON ERROR RESUME NEXT", cioè, "se trova l'errore di Zero_Results passa al record successivo...". Potete aiutarmi a risolvere il mio problema, dimodoché ogni volta che trova un record con una via non raggiungibile, salti l'errore e passi avanti?
Di seguito il mio script
HTML:
<%

 dbfile=Server.MapPath("xxx.mdb") 
 Set OBJdbConnection=Server.CreateObject("ADODB.Connect ion")
 OBJdbConnection.Open "driver={Microsoft Access Driver (*.mdb)};dbq="&dbfile

 Set rs = Server.CreateObject("ADODB.Recordset")
 sql = "SELECT xxx.*, Tab_strade.* FROM Tab_strade INNER JOIN xxx ON Tab_strade.id_via = xxx.id_via"

 rs.Open sql, OBJdbConnection, 3, 3

 totale=rs.recordcount-1 
 do while not rs.eof

 via = via & rs.fields(8) &" milano" & "##" 
 titolo=titolo & rs.fields(10) & "##" 
 rs.movenext
 loop
 set rs = Nothing
 OBJdbConnection.Close
 set OBJdbConnection=Nothing 

 %>

 <html>
 <head>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
 <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
 <script type="text/javascript" src="Fluster2.packed.js"></script>


 <script type="text/javascript">

 var geocoder;
 var map;

 descrizioni = new Array(); 
 indirizzi = new Array();

 <%
 for wa= 0 to totale
 viax=split(via,"##")
 titolox=split(titolo,"##")
 vias=viax(wa)
 titolos=titolox(wa)
 %>1

 indirizzi[<%=wa%>]="<%=vias%>";
 descrizioni[<%=wa%>]="<%=titolos%>";

 <%
 next
 %>

 lunghciclo = descrizioni.length; //variabile di appoggio contenente il numero di elementi del vettore

 function visualizzamappa() {
 geocoder = new google.maps.Geocoder();
 var opzioni = {zoom: 13, mapTypeId: google.maps.MapTypeId.ROADMAP}

 map = new google.maps.Map(document.getElementById("map_canva s"), opzioni);

 // ciclo FOR che attiva la funzione di geocoding per ogni elemento del vettore indirizzi[x]


 for (var x=0; x<lunghciclo; x++)

 //window.setTimeout( function() { codifica_indirizzi(indirizzi[x], descrizioni[x]); }, 500 );}

 { codifica_indirizzi(indirizzi[x], descrizioni[x]); }

 }

 // funzione che effettua il geocoding dell'indirizzo stradale e crea il relativo marker completo di descrizione

 function codifica_indirizzi(indirizzi, titolo)

 { 
 geocoder.geocode({ 'address': indirizzi}, function(results, status)
 {
 map.setCenter(results[0].geometry.location);

 var marker = new google.maps.Marker
 ({ map: map, 
 position: results[0].geometry.location,
 title: titolo });


 });

 }

 </script>
 </head>

 <body style="margin:5px; padding:5px;" onload="visualizzamappa()">

 <div id="map_canvas" style="width:100%; height:100%"></div>

 </body>
 </html>
Grazie!
 
Ultima modifica di un moderatore:

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ciao, prova a vedere cosa ti restituisce il parametro "status"
Codice:
alert(status);
in base a quello potresti poi saltare le istruzione sucessive
Codice:
if(status == esitopositvo)  {

// codice

}
 

turifasola

Nuovo Utente
14 Gen 2014
8
0
0
Ciao, prova a vedere cosa ti restituisce il parametro "status"
Codice:
alert(status);
in base a quello potresti poi saltare le istruzione sucessive
Codice:
if(status == esitopositvo)  {

// codice

}

Salve! Ti ringrazio per la tempestiva risposta. Aggiungo altre informazioni a quanto detto sopra. Se inserisco nel DB 11 record con vie che Google Map riconosce, funziona tutto perfettamente, appena trova una via (non coordinate) che non è identificata, si blocca facendomi vedere solo una finestra grigia. Diciamo che il codice che ho inserito sopra funziona bene facendomi vedere i marker nelle vie giuste e dandomi anche la descrizione, fino a quando non trova un campo con una via non identificata (da li Zero_Results) oppure se inserisco più record per "OVER_QUERY_LIMIT" (per questo ho fatto delle prove lasciando solo 11 record e funziona).
Purtroppo sono quasi negato in Javascript e spero di non sbagliare quando mi chiedi cosa restituisce "status" tu intenda dire quello che ti ho detto sopra. Nel caso di ASP scrivendo Response.Write avrei la risposta, ma nel caso di Javascript cosa dovrei inserire?
Ti dispiace farmi un esempio sul mio script così mi rendo conto visivamente delle correzioni. Scusami non voglio la pappa pronta ma ho dei limiti e c'ho provato e riprovato.
Grazie
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
ma nel caso di Javascript cosa dovrei inserire?
Codice:
alert(status);
ti si aprira un alert per ogni indirizzo, per quelli errati dovresti vedere un messaggio diverso
Codice:
function codifica_indirizzi(indirizzi, titolo)

    {
        geocoder.geocode({'address': indirizzi}, function(results, status)
        {
            alert(status);

            map.setCenter(results[0].geometry.location);

            var marker = new google.maps.Marker
                    ({map: map,
                        position: results[0].geometry.location,
                        title: titolo});

    }
    );
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
In teoria potresti provare cosi
Codice:
function codifica_indirizzi(indirizzi, titolo)

    {
        geocoder.geocode({'address': indirizzi}, function(results, status)
        {
            if (status == "OK") {

                map.setCenter(results[0].geometry.location);

                var marker = new google.maps.Marker
                        ({map: map,
                            position: results[0].geometry.location,
                            title: titolo});
            }

    }
    );
in alternativa posta un esempio di indirizzo errato che ci faccio qualche prova
 

turifasola

Nuovo Utente
14 Gen 2014
8
0
0
In teoria potresti provare cosi
Codice:
function codifica_indirizzi(indirizzi, titolo)

    {
        geocoder.geocode({'address': indirizzi}, function(results, status)
        {
            if (status == "OK") {

                map.setCenter(results[0].geometry.location);

                var marker = new google.maps.Marker
                        ({map: map,
                            position: results[0].geometry.location,
                            title: titolo});
            }

    }
    );
in alternativa posta un esempio di indirizzo errato che ci faccio qualche prova


Scusami se non ti ho risposto subito ma ero in pausa pranzo.
Allora! Ho fatto come mi hai detto tu:
Come prima prova ho inserito l'Alert status e come risposta ho avuto 11 ok a conferma credo di aver capito che gli indirizzi sono corretti.Giusto?
Ho successivamente aggiunto un altro record al db con un nuovo indirizzo corretto (12simo record) e come risposta ho avuto un "OVER_QUERY_LIMIT" all'inizio e successivamente 11 ok.
Ho poi modificato tutta la funzione come mi hai suggerito e il risultato è stato l'apertura della finestra con i markers di tutti i record corretti ma fino all'11 non evidenziandomi neanche "OVER_QUERY_LIMIT". Mentre il 12simo Marker non lo visualizza. A questo punto per visualizzare tutti gli altri record dal 12 in poi ad esclusione di quelli errati cosa suggerisci? Mi sembra di essere ritornati al punto di partenza.
Comunque ti ringrazio infinitamente per la tua cortesia e disponibilità.
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
ma non son sicuro di aver capito perfettamente il problema ma se devi saltare quelli che ti restituiscono "ZERO_RESULTS"
modifica
Codice:
if (status == "OK") {
con
Codice:
if (status != "ZERO_RESULTS") {
 

turifasola

Nuovo Utente
14 Gen 2014
8
0
0
ma non son sicuro di aver capito perfettamente il problema ma se devi saltare quelli che ti restituiscono "ZERO_RESULTS"
modifica
Codice:
if (status == "OK") {
con
Codice:
if (status != "ZERO_RESULTS") {

Grazieeee!! OK! PER QUANTO RIGUARDA "ZERO_RESULTS" mi ha saltato il record con l'indirizzo errato che ho messo apposta in mezzo agli 11 record, però mi rimane il problema del superamento dell' OVER_QUERY_LIMIT. Cioè visualizzare tutti gli altri record oltre il dodicesimo. Ho fatto qualche ricerca sui vari blog e qualcuno suggerisce di inserire un "setTimeout" ma come avrai potuto capire per me diventa quasi arabo. toglierei anche il "quasi"
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
per usare il setTimeout devi togliere il ciclo for
puoi provare modificando le due funzioni in questo modo
Codice:
// inizializziamo il contatore
    var x = 0;
    function visualizzamappa() {
        geocoder = new google.maps.Geocoder();
        var opzioni = {zoom: 13, mapTypeId: google.maps.MapTypeId.ROADMAP}

        map = new google.maps.Map(document.getElementById("map_canvas"), opzioni);
        // ciclo FOR che attiva la funzione di geocoding per ogni elemento del vettore indirizzi[x]
        codifica_indirizzi(indirizzi[x], descrizioni[x]);

    }
    // funzione che effettua il geocoding dell'indirizzo stradale e crea il relativo marker completo di descrizione
    function codifica_indirizzi(indirizzo, titolo) {
        geocoder.geocode({'address': indirizzo}, function(results, status) {

            if (status != "ZERO_RESULTS") {
                map.setCenter(results[0].geometry.location);
                var marker = new google.maps.Marker
                        ({map: map,
                            position: results[0].geometry.location,
                            title: titolo});
            }

            if (x < (indirizzi.length - 1)) {
                setTimeout(function() {
                    x++;
                    codifica_indirizzi(indirizzi[x], descrizioni[x]);
                }, 2000);
            }

        }
        );
    }
non ho modo di testare,inoltre non conosco i limiti di google quindi potresti non risolvere
nota:
ho cambiato anche il nome del parametro da indirizzi (uguale all'array) a indirizzo
Codice:
function codifica_indirizzi(indirizzo, titolo) {
 
Ultima modifica:

turifasola

Nuovo Utente
14 Gen 2014
8
0
0
SEI UN GENIOOOOO!!!! Non sai quanto bene mi hai fatto! :tifoso: sei il mio idolo!
Non so come posso ringraziarti!
Posto lo script completo per chiuque volesse utilizzarlo.

HTML:
<%

 dbfile=Server.MapPath("xxx.mdb") 
Set OBJdbConnection=Server.CreateObject("ADODB.Connection")
OBJdbConnection.Open "driver={Microsoft Access Driver (*.mdb)};dbq="&dbfile



Set rs = Server.CreateObject("ADODB.Recordset")


sql= "SELECT * FROM tabellax"  
rs.Open sql, OBJdbConnection, 3, 3
'on error resume next
totale=rs.recordcount-1	
do while not rs.eof



via = via & rs.fields(1) &" Milano" & "##" 
civico=civico & rs.fields(1) & "##" 
titolo=titolo & rs.fields(1) & "##" 

rs.movenext
loop


set rs = Nothing
OBJdbConnection.Close
set OBJdbConnection=Nothing  

  
  %>
  
<html>
<head>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
 <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript" src="Fluster2.packed.js"></script>

 
 <script type="text/javascript">



function Geocode(address) {
    geocoder.geocode({
        'address': address
    }, function(results, status) {
        if (status === google.maps.GeocoderStatus.OK) {
            var result = results[0].geometry.location;
            var marker = new google.maps.Marker({
                position: result,
                map: map
            });
        } else if (status === google.maps.GeocoderStatus.OVER_QUERY_LIMIT) {    
            setTimeout(function() {
                Geocode(address);
            }, 200);
        } else {
            alert("Geocode was not successful for the following reason:" 
                  + status);
        }
    });
}




	var geocoder;
	var map;
	
	descrizioni = new Array();   
	civici = new Array();           
	indirizzi = new Array();
	
	
    
    <%
    for wa= 0 to totale
    viax=split(via,"##")
    civicox=split(civico,"##")
    titolox=split(titolo,"##")
    vias=viax(wa)
    civicos=civicox(wa)
    titolos=titolox(wa)
    %>1
	
	
	indirizzi[<%=wa%>]="<%=vias%>";
	civici[<%=wa%>]="<%=civicos%>";
	descrizioni[<%=wa%>]="<%=titolos%>";
	
	
	<%
    next
    %>




 	             
       // inizializziamo il contatore
    var x = 0;
    function visualizzamappa() {
        geocoder = new google.maps.Geocoder();
        var opzioni = {zoom: 13, mapTypeId: google.maps.MapTypeId.ROADMAP}

        map = new google.maps.Map(document.getElementById("map_canvas"), opzioni);
        // ciclo FOR che attiva la funzione di geocoding per ogni elemento del vettore indirizzi[x]
        codifica_indirizzi(indirizzi[x], descrizioni[x]);

    }
    // funzione che effettua il geocoding dell'indirizzo stradale e crea il relativo marker completo di descrizione
    function codifica_indirizzi(indirizzo, titolo) {
        geocoder.geocode({'address': indirizzo}, function(results, status) {

            if (status != "ZERO_RESULTS") {
                map.setCenter(results[0].geometry.location);
                var marker = new google.maps.Marker
                        ({map: map,
                            position: results[0].geometry.location,
                            title: titolo});
            }

            if (x < (indirizzi.length - 1)) {
                setTimeout(function() {
                    x++;
                    codifica_indirizzi(indirizzi[x], descrizioni[x]);
                }, 2000);
            }

        }
        );
}

</script>



</head>

<body style="margin:5px; padding:5px;" onload="visualizzamappa()">

<div id="map_canvas" style="width:100%; height:100%"></div>

</body>
</html>


Di nuovo grazie e alla prox!
Ciao
 
Ultima modifica di un moderatore:

fabryd7

Nuovo Utente
8 Mag 2017
2
0
1
44
Ciao a tutti, sono nuovo del forum ho letto questo articolo perchè ho la stessa problematica in questione ovvero il messaggio over query limit, premesso che non sono molto efferato con javascript, volevo sapere dove bisogna intervenire con il codice di cui sopra per ovviare al problema. Sto lavorando su un sito in joomla e sono giorni che mi sbatto per risolvere il problema. Non posso far altro che appellarmi a chi ne capisce molto piu di me. Grazie anticipatamente per la risposta...
 
Discussioni simili
Autore Titolo Forum Risposte Data
F [risolto] Problema javascript Internet Explorer Javascript 1
elpirata [RISOLTO][Javascript] Datapicker e autocompletamento campo input Javascript 2
A [Javascript] [RISOLTO] Doppio "submit", in uno stesso "Form" , che puntino ad "action" diversi Javascript 1
A [Javascript] [HTML] RISOLTO...Allungare un box all'apertura della pagina No Mouse over Javascript 9
ken_korn [Javascript][Risolto] browser.tab.Tabs.favIconUrl non funziona Javascript 5
G [RISOLTO][Javascript] aggiungere elemento ad array definito nella finestra madre da popup Javascript 4
G [risolto] Errori php/javascript Javascript 2
T [risolto] Conversione comandi da javascript a jquery. Chi può aiutarmi? Javascript 4
G [risolto] Checkbox e javascript Javascript 3
I Creare un banner temporaneo JavaScript Javascript 0
S Impossibile scorrere un oggetto in JavaScript Javascript 0
N Passare array da php a javascript PHP 5
L Quiz javascript funzionante da migliorare Javascript 0
P errore 404 con javascript Javascript 2
D aiuto funzioni javascript Javascript 1
M Upload immagine con javascript problemi con FormData() Javascript 1
L countdown multiplo javascript Javascript 1
S Problemi Javascript + Aruba Javascript 2
M Inviare un file su un server remoto con JavaScript Javascript 0
T a href="javascript:;" Javascript 1
F Creare elementi html con javascript Javascript 3
A pulsante di update campo mysql con javascript Javascript 2
8 Javascript - PDF Form Javascript 0
B javascript per problemi con pdf e Safari Javascript 0
N informazione javascript Programmazione 0
I Eecuzione di javascript in ciclo foreach php. PHP 7
P javascript:document.forms Javascript 7
S Consiglio esercizio Javascript Javascript 2
MarcoGrazia Aggiungere o rimuovere classi in javascript Javascript 1
P Passaggio id php a javascript PHP 6
R Confrontare il dominio di una mail con una stringa contenente un dominio personalizzato, tutto ciò in php o javascript PHP 0
E lettura da un Database con Javascript jQuery 2
V TRIS in javascript Javascript 1
IClaude Funzione Javascript Javascript 8
Alex_70 Javascript date color Javascript 3
F Convertire JavaScript per la compatibilità nei browser obsoleti Javascript 0
I Passare dei parametri in javascript PHP 0
Shyson Meglio Javascript o HTML? Javascript 4
G Problema verifica palindromo e verifica pari e dispari javascript Javascript 0
M Chiamare pagina php da javascript Javascript 8
M Errore JavaScript per php [objeto HTMLParagraphElement] PHP 0
D Javascript per il download dei dati Javascript 0
grgfede Problema javascript con aruba Javascript 1
R Cerco supporto in programmazione javascript Offerte e Richieste di Lavoro e/o Collaborazione 0
webmachine [PHP] [JAVASCRIPT] Form strano in HTML PHP PHP 1
W Modificare il Type di un Input box in javascript ovunque si trovi Javascript 0
I javascript come caricare una pagina sopra quella corrente in automatico Javascript 2
L [Javascript] Problema salvataggio dati in db Javascript 1
max1974 [Javascript] Grafico chartjs con dati da J.ajax Javascript 3
G Quiz Javascript Javascript 4

Discussioni simili