2011-12-11 10 views
5

Sto tentando di inviare lat e lon insieme a un'immagine della webcam e altri dati usando PHP e javascript- non chiedere, è solo un piccolo progetto che ho iniziato, sperando di imparare qualcosa. Affinché il lat e lon siano disponibili devo chiamare la funzione webcam dopo che lat e lon sono stati recuperati. Ecco il javascript con cui sto lavorando (la porzione di geolocalizzazione è di Lynda.com. L'ho combinata con JpegCam). Ho aggiunto lat e long div per contenere i valori. Quindi chiamo la funzione webcam now_go() che ottiene lat e long usando getElementById(). Funziona benissimo fintanto che l'utente condivide la loro posizione. Se non lo fanno, la funzione now_go() non viene chiamata. Ma se lo chiamo prima, lat e lon non sono disponibili anche se l'utente ha deciso di condividere la loro posizione. Quindi in quale fase del gioco posso dire se l'utente ha scelto di non condividere?A che punto posso dire se un utente ha scelto di non condividere la sua posizione?

<script type="text/javascript"> 
    var t = new bwTable(); 
    var geo; 

    function getGeoLocation() { 
     try { 
      if(!! navigator.geolocation) return navigator.geolocation; 
      else return undefined; 
     } catch(e) { 
      return undefined; 
     } 
    } 

    function show_coords(position) { 
     var lat = position.coords.latitude; 
     var lon = position.coords.longitude; 
     element('lat').innerHTML = lat; 
     element('lon').innerHTML = lon; 
     t.updateRow(0, [ lat.toString(), lon.toString() ]); 
     dispResults(); 
     now_go(); 
    } 

    function dispResults() { 
     element('results').innerHTML = t.getTableHTML(); 

    } 

    function init() { 
     if((geo = getGeoLocation())) { 
      statusMessage('Using HTML5 Geolocation') 
      t.setHeader([ 'Latitude', 'Longitude' ]); 
      t.addRow([ '&nbsp;', '&nbsp;' ]); 
     } else { 
      statusMessage('HTML5 Geolocation is not supported.') 
     } 
     geo.getCurrentPosition(show_coords); 
    } 

    window.onload = function() { 
     init(); 
    } 
</script> 

Questa è la parte dello script webcam che ho trasformato in una funzione così ho potuto chiamarla dopo lat e lon sono stati recuperati:

<script language="JavaScript"> 
     function now_go(){ 
      var lat = null; 
      var lon = null; 
    if ($("#lat").length > 0){   
     var lat = document.getElementById('lat').innerHTML; 
     } 

      if ($("#lon").length > 0){   
     var lon = document.getElementById('lon').innerHTML; 
      } 
      webcam.set_api_url('webcam/test/' + lat + '/' + lon); 
    webcam.set_quality(90); // JPEG quality (1 - 100) 
    webcam.set_shutter_sound(true, '/mark/js/webcam/shutter.mp3'); 

     }  

</script> 

Sono sicuro che questo codice ha altre questioni , ma questo è quello che sembra in questo momento. E a cinque anni credo che rimarrà così per un po '.

Qualsiasi consiglio o suggerimento sarebbe fantastico.

Grazie, Mark

+0

io non sono sicuro perché si sta utilizzando un doppio non '!! navigator.geolocation' per testare questa condizione. Se stai verificando la sua esistenza un singolo non 'if (! Navigator.geolocation) {alert ('Il tuo browser non supporta la geolocalizzazione.')}' –

+0

Non direttamente utile per la tua domanda, ma non dovrebbe essere usato il geo variabile si trova all'interno del bit if ((geo = getGeoLocation()))? Usandolo dopo il blocco else fallirà se il compito fallisce. – Thor84no

+0

Vedi qui: http://stackoverflow.com/questions/7463367/how-to-call-function-when-user-allows-or-denies-access-to-physical-location –

risposta

8

Vedi this link. C'è un secondo argomento al metodo navigator.geolocation.getCurrentPosition() che consente di passare a un'altra funzione:

navigator.geolocation.getCurrentPosition(show_coords, function(error) { 
    switch(error.code) 
    { 
     case error.PERMISSION_DENIED: alert("user did not share geolocation data"); 
     break; 

     case error.POSITION_UNAVAILABLE: alert("could not detect current position"); 
     break; 

     case error.TIMEOUT: alert("retrieving position timedout"); 
     break; 

     default: alert("unknown error"); 
     break; 
    } 
}); 
+0

Grazie, è esattamente quello che stavo cercando! – Mark

Problemi correlati