Back to top

Autore Topic: Centrare mappa su ip utente  (Letto 12641 volte)

Offline aston82

  • Esploratore
  • **
  • Post: 94
    • Mostra profilo
Re:Centrare mappa su ip utente
« Risposta #20 il: 20 Giu 2011, 15:12:41 »
ok sono riuscito a trovare uno script molto preciso che mi porduce una mappa centrata sulla mia posizione. Adesso devo caricarci su i markers che ho nella mappa del mio modulo.. come faccio?


nel modulo ho:

echo "SobiCatOverMap.setCenter( new GLatLng( {$centerPointLat}, {$centerPointLong} ), {$mapsZoom} );";

mentre nello script ho :

    function showMap(latLong, zoom){
      var options = {
        zoom: zoom,
        center: latLong,
        mapTypeId: google.maps.MapTypeId.ROADMAP
      };
      var map = new google.maps.Map(document.getElementById("map"), options);
      var marker = new google.maps.Marker({
          position: latLong,
          map: map,
          title:"Your location"
      });
    }

come faccio ad esempio ad assegnare a $centerPointLat il valore della latitudine presente in latLong??

grazie
« Ultima modifica: 20 Giu 2011, 15:31:36 da aston82 »

Offline aston82

  • Esploratore
  • **
  • Post: 94
    • Mostra profilo
Re:Centrare mappa su ip utente
« Risposta #21 il: 21 Giu 2011, 11:50:01 »
questo è lo script per intero.. mi potete aiutare ad integralo? grazie!


Offline zeus

  • Esploratore
  • **
  • Post: 71
  • Sesso: Maschio
  • Silly rabbit, trix are not for kids
    • Mostra profilo
Re:Centrare mappa su ip utente
« Risposta #22 il: 21 Giu 2011, 12:57:17 »
Ti confermo che lo script funziona bene... (stai usando la v3 della API di google maps)...

ora non capisco il problema dell'integrazione... puoi spiegarti meglio???
tieni conto che non conosco SOBI

Offline aston82

  • Esploratore
  • **
  • Post: 94
    • Mostra profilo
Re:Centrare mappa su ip utente
« Risposta #23 il: 21 Giu 2011, 15:18:01 »
si funziona bene.. adesso ho una mappa che mi mostra la mia posizione. e poi l'altra del modulo di sobi2 che mostra i marker di quel componente, che però non è centrata sulla mia posizione.

vorrei prendere questo script e metterlo in quel modulo per centrare allo stesso modo la mappa.. oppure prendere i marker del modulo e pubblicarli sulla mappa centrata.. insomma integrare le 2 cose..

ti allego il file del modulo di sobi2 , usa $centerPointLat e $centerPointLong per centrare la sua mappa.. Vorrei far caricare il mio script prima che si carichi la mappa del modulo e passagli il valore di latLong alle due variabili che ti ho scritto sopra. 

Grazie comunque, ho veramente bisogno di completare questo progetto.



Offline zeus

  • Esploratore
  • **
  • Post: 71
  • Sesso: Maschio
  • Silly rabbit, trix are not for kids
    • Mostra profilo
Re:Centrare mappa su ip utente
« Risposta #24 il: 21 Giu 2011, 17:37:15 »
Ma non basta che alla riga 424 sostituisci {$centerPointLat}, {$centerPointLong} con le coordinate che prendi dal tuo script? ovviamente devi aggiungere al modulo un tuo javascript per rilevare la currentlocation (praticamente come hai fatto nel file new.php).

magari fai prima una prova scrivendo direttamente le coordinate... e poi se funziona preoccupati del come integrare il tutto.



altrimenti, se sai dove sono salvate le coordinate di SOBI potresti adottare la stessa soluzione che ho usato io nel mio sito http://www.campiscout.com (sempre che non mi censurino anche questo link).

in pratica ti generi dinamicamente un file xml (xml.php) che recupera le coordinate dal db e lo dai in pasto ad un loop e per ogni record esegui la funzione create marker per visualizzare il marker....
in questo modo il codice sarà più pulito e non avrai tutte le coordinate schiantate nel html.

qualcosa del tipo:
Codice: [Seleziona]
GDownloadUrl("xml.php?", function(data) {
 var xml = GXml.parse(data);
 var markers = xml.documentElement.getElementsByTagName("marker");
 for (var i = 0; i < markers.length; i++) {
      var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
                                                                      parseFloat(markers[i].getAttribute("lng")));
   var marker = createMarker(point);
    map.addOverlay(marker);
   }
});
ovviamente nel file xml devi restituire in output un elemento chiamato marker con gli attributi lat e lng, più eventuali altri campi che ti possono servire per il fumetto associato al marker.


Scegli tu cosa è meglio dal tuo punto di vista.
Ciao

Offline aston82

  • Esploratore
  • **
  • Post: 94
    • Mostra profilo
Re:Centrare mappa su ip utente
« Risposta #25 il: 21 Giu 2011, 20:49:22 »

Citazione
Ma non basta che alla riga 424 sostituisci {$centerPointLat}, {$centerPointLong} con le coordinate che prendi dal tuo script? ovviamente devi aggiungere al modulo un tuo javascript per rilevare la currentlocation (praticamente come hai fatto nel file new.php).

magari fai prima una prova scrivendo direttamente le coordinate... e poi se funziona preoccupati del come integrare il tutto.
   
si se a quella riga metto due valori numerici la mappa centra li correttamente.
Ma come faccio a richiamare in quel passo il mio script new.php??

Mi sa che il modulo usa una Api V2 mentre lo script usa la V3.. non vorrei che non possano interagire tra loro.  (?)


Citazione
altrimenti, se sai dove sono salvate le coordinate di SOBI potresti adottare la stessa soluzione che ho usato io nel mio sito http://www.campiscout.com (sempre che non mi censurino anche questo link).

ho visto, bell'idea e anche tutte quelle options.. io ho fatto lo scout per 10anni!  :D

Citazione
in pratica ti generi dinamicamente un file xml (xml.php) che recupera le coordinate dal db e lo dai in pasto ad un loop e per ogni record esegui la funzione create marker per visualizzare il marker....

ok, ma ho già 500 righe di codice scritte dallo sviluppatore del modulo.. dovrei riportare un sacco di informazioni per fumetto e modalità di visualizzazione dei marker e cosi via.. vediamo se funziona la prima soluzione per ora.

ciao


Offline zeus

  • Esploratore
  • **
  • Post: 71
  • Sesso: Maschio
  • Silly rabbit, trix are not for kids
    • Mostra profilo
Re:Centrare mappa su ip utente
« Risposta #26 il: 22 Giu 2011, 09:30:06 »
prova il file allegato....
non ho avuto modo di testarlo.... ma tanto devi sbatterci tu la testa, no??  ;)

Ciao

Offline zeus

  • Esploratore
  • **
  • Post: 71
  • Sesso: Maschio
  • Silly rabbit, trix are not for kids
    • Mostra profilo
Re:Centrare mappa su ip utente
« Risposta #27 il: 22 Giu 2011, 09:33:17 »
mi raccomando, poi voglio vedere il risultato finale...

Offline aston82

  • Esploratore
  • **
  • Post: 94
    • Mostra profilo
Re:Centrare mappa su ip utente
« Risposta #28 il: 22 Giu 2011, 11:55:20 »
ciao!
Grazie per l'aiuto inanzitutto; (senz'altro quando ho finito ti faccio vedere il mio portale)  ;)

ho provato proprio ora il tuo file, ho 2 casi:
1- se nei parametri del modulo metto "centratura automatica" --> carica la mappa del modulo centrata su tutti maker degli articoli (quindi a zoom globale)e poi, quando ha caricato tutta la pagina, parte il javascript e esce il popup del geocoding, ..lo clicco ma non cambia nulla poichè ovviamente la mappa è già stata caricata.
Se non ho capito male dipende dal fatto che Javascript è un linguaggio lato client che viene eseguito solo dopo che tutta la pagina è stata caricata, mentre php è lato server e si carica con la pagina..  ?

2- viceversa, se uso una coppia fissa di coordinate mi esce una mappa grigia ( con testo : non disponiamo di mappe a questo livello di zoom..) con su i markers degli articoli..e poi si carica il popup, che come sopra, non modifica la mappa.  (il caso 2 mi pare sia ininfluente)



Offline aston82

  • Esploratore
  • **
  • Post: 94
    • Mostra profilo
Re:Centrare mappa su ip utente
« Risposta #29 il: 22 Giu 2011, 18:08:25 »
ho letto un po' di cose e pensavo:  perchè non mettere un'istruzione per il refresh automatica dopo che clicco su condividi coordinate.. in modo tale che ricarica la mappa con le coordinate locali.. ho provato con location.reload(true);   ma ricarica tutta la pagina e perdo i dati di lat e long locali.

cosi facendo se un utente non condivide non refresha e vede comunque la mappa generale.. se invece condivide dovrei cercare di fargli ricaricare solo la mappa con le coord. locali calcolate dal javascript.. senza perderle con il refresh! 

idee?

ho provato a stampare quella var coordinate che hai inserito per fare un controllo..ma non riesco a farla apparire a video.  sembra che dopo aver cliccato il popup il codice javascript non venga messo in funzione;
non è che gli manca un load per qualche funzione??? 
« Ultima modifica: 22 Giu 2011, 21:46:47 da aston82 »

Offline zeus

  • Esploratore
  • **
  • Post: 71
  • Sesso: Maschio
  • Silly rabbit, trix are not for kids
    • Mostra profilo
Re:Centrare mappa su ip utente
« Risposta #30 il: 23 Giu 2011, 10:20:26 »
uhmmmmm che dirti...
magari prova a spostare il blocco che va dalla riga 405 alla riga 475  sopra la riga 399...

considera che al domready viene chiamata la funzione  loadSobiCatOverMap , e dentro questa funzione, prima del caricamento della mappa ho messo la chiamata  al check location del browser...

ecco perchè mi sembra strano che non funzioni.... magari la colpa è proprio della variabile coordinate che non  viene correttamente valorizzata...
usi firebug? non puoi fare il debugging del javascript???
o almeno metti un
Codice: [Seleziona]
alert(coordinate); e vediamo se ti restituisce qualcosa (mettilo alla riga 513 - appena sopra alla chiamata
Codice: [Seleziona]
echo "var SobiCatOverMap = new GMap2( document.getElementById(\"sobi2GcatOver\") );";)


cmq avrei bisogno di vedere il rendering... hai un link per farmi vedere il problema?

Offline aston82

  • Esploratore
  • **
  • Post: 94
    • Mostra profilo
Re:Centrare mappa su ip utente
« Risposta #31 il: 23 Giu 2011, 11:07:48 »
si ho già provato a spostare ovunque quel blocco di istruzioni ma non cambia nulla. facendo l'alert mi ritorna null.. quindi non gli passa la var coordinate.

cmq avrei bisogno di vedere il rendering... hai un link per farmi vedere il problema?

hai ragione, ti mando un messaggio privato con il link e i dati di accesso, visto che il sito non è ancora pubblico. grazie ciao!

Offline zeus

  • Esploratore
  • **
  • Post: 71
  • Sesso: Maschio
  • Silly rabbit, trix are not for kids
    • Mostra profilo
Re:Centrare mappa su ip utente
« Risposta #32 il: 23 Giu 2011, 11:28:43 »
e ha ragione..... al dom ready ha già eseguito la header...

togli il codice  che abbiamo messo e spostiamolo nella header, così:
Codice: [Seleziona]
$documento =& JFactory::getDocument();

$documento->addScript('http://code.google.com/apis/gears/gears_init.js');

$javascript ="
var coordinate = null;
    function getLocale(){
      if ( navigator ) {
        if ( navigator.userLanguage ) {
            return navigator.userLanguage.toLowerCase();
        }
        else if ( navigator.language ) {
            return navigator.language.toLowerCase();
        }
        else if ( navigator.browserLanguage ) {
            return navigator.browserLanguage.toLowerCase();
        }
        else if ( navigator.systemLanguage ) {
            return navigator.systemLanguage.toLowerCase();
        }
      }
      return \"unknown\";
    }

    var locales = new Object();
    locales[\"en-gb\"] = {lat:54.559322587438636, lng:-4.1748046875, location:\"United Kingdom\"};
    locales[\"en-us\"] = {lat:38.41055825094609, lng:-100.37109375, location:\"USA\"};
    // TODO - more locales

    function TryGoogleLoader(){
      if (google.loader.ClientLocation != null) {
        var address = google.loader.ClientLocation.address;
        var yourLocation = address.city + \", \" + address.region + \", \" + address.country;

        document.getElementById(\"location\").innerHTML = \"Your location (using Google loader) is \" + yourLocation;
        var latLong = new google.maps.LatLng(google.loader.ClientLocation.latitude,
          google.loader.ClientLocation.longitude);
        //showMap(latLong, 12);
        coordinate = latLong;
        }
        else {
        // map locale to location
        var locale = getLocale();
        if (locales[locale] != null) {
          var latLong = new google.maps.LatLng(locales[locale].lat, locales[locale].lng);
          document.getElementById(\"location\").innerHTML =
            \"Guessing your location based on your locale - \" + locales[locale].location;
          //showMap(latLong, 5);
          coordinate = latLong;
        }
        else {
          document.getElementById(\"location\").innerHTML = \"Your location can not be found - locale is \" + locale;
        }
      }
    }

    function TryGoogleGears(){
      if (google.gears) {
        // Try Google Gears Geolocation
        var geo = google.gears.factory.create('beta.geolocation');
        geo.getCurrentPosition(function(position) {
          var latLong = new google.maps.LatLng(position.latitude, position.longitude);
          document.getElementById(\"location\").innerHTML = \"Found location via Google Gears\";
          //showMap(latLong, 15);
          coordinate = latLong;
        }, function() {
          TryGoogleLoader();
        });
      }
      else
        TryGoogleLoader();
    }   
";
$documento->addScriptDeclaration($javascript);

ovviamente in una zona php (ovunque nel file).... dovrebbe funzionare anche per i moduli.... per plugin e componenti funziona, speriamo.....

Offline aston82

  • Esploratore
  • **
  • Post: 94
    • Mostra profilo
Re:Centrare mappa su ip utente
« Risposta #33 il: 23 Giu 2011, 12:11:23 »
l'ho messo in cima a tutto (scritto tra <?php e ?>), ho provato anche dove dichiara i parametri ecc..ma da ancora "null" l'alert   ..?   ho provato anche lanciandolo senza l'alert, ma non cambia nulla, carica sempre prima che gli passi la var coordinate, oppure non gliela passa
forse..
si dovrebbe inserire un if che fa partire il caricamento della mappa solo dopo che var coordinate non è più null  (?)


------------------------

da quel che ho letto in rete è giusto che il popup si carichi dopo la mappa.. almeno se un utente non condivide vede cmq la mappa di default globale. quindi dove sta il codice ora va bene.

E' da modificare il passaggio del var coordinate tra una api e l'altra, che mi pare inverta lat e long.. ci leggo un po' su ancora!   ciao
« Ultima modifica: 24 Giu 2011, 11:57:02 da aston82 »

Offline aston82

  • Esploratore
  • **
  • Post: 94
    • Mostra profilo
Re:Centrare mappa su ip utente
« Risposta #34 il: 25 Giu 2011, 12:13:31 »
qualche idea??

----------

e se girassimo il problema al contrario? ciòè usare la mappa dello script e pubblicarci su i markers??
« Ultima modifica: 25 Giu 2011, 12:20:03 da aston82 »

Offline zeus

  • Esploratore
  • **
  • Post: 71
  • Sesso: Maschio
  • Silly rabbit, trix are not for kids
    • Mostra profilo
Re:Centrare mappa su ip utente
« Risposta #35 il: 27 Giu 2011, 09:34:32 »
AL MOMENTO NO....
IN QUESTI GIORNI STO MOLTO PRESO SU ALCUNI PROGETTI...

PERCHè NON PROVI A FARTI UN DEBUG DEL JAVASCRIPT (AD ES. CON FIREBUG) IN MODO DA CAPIRE LA PROGRESSIONE DEGLI EVENTI?

Offline aston82

  • Esploratore
  • **
  • Post: 94
    • Mostra profilo
Re:Centrare mappa su ip utente
« Risposta #36 il: 27 Giu 2011, 14:23:26 »
ciao, scusa Zeus, ci mancherebbe..se hai da fare il tuo lavoro! Quando puoi.. ;)

intanto mi hanno detto in un altro forum che per estrarre dalla variabile latLong la latitudine e la longitudine si deve usare la sintassi:

lat = latLong.lat();
long = latLong.long();

sostituendola alla tua "coordinate" però la mappa scompare..

(cmq uso firebug per il css ma non ci capisco molto di debugging del Javascript)



Offline zeus

  • Esploratore
  • **
  • Post: 71
  • Sesso: Maschio
  • Silly rabbit, trix are not for kids
    • Mostra profilo
Re:Centrare mappa su ip utente
« Risposta #37 il: 27 Giu 2011, 14:51:29 »
cmq, come dicevi tu, mi sa tanto che devi provare a usare la mappa dello script e a pubblicarci su i markers...
in pratica come ti dicevo che ho ho fatto per il sito dei campi scout.

Temo infatti che nonostante il modulo separato, probabilmente SOBI istanzia prima la mappa (in qualche maniera che non ho ben capito...

A questo punto fai il contrario.... devi solo capire dove sono salvate le coordinate dei marker, e poi decidere quali informazioni vuoi vedere per singolo marker. in fin dei conti, almeno a livello tecnico, il tuo sito non è molto distante dal mio sui campi scout.

io se non ricordo male sono partito da questo codice: http://code.google.com/intl/it-IT/apis/maps/articles/phpsqlajax_v3.html

oppure guarda qui http://googlemapsapi.blogspot.com/2007/02/gdownloadurl-update-better-error.html


ovviamente poi occorrerà integrarlo nel framework...

fammi sapere

Offline aston82

  • Esploratore
  • **
  • Post: 94
    • Mostra profilo
Re:Centrare mappa su ip utente
« Risposta #38 il: 27 Giu 2011, 16:25:00 »
Citazione
cmq, come dicevi tu, mi sa tanto che devi provare a usare la mappa dello script e a pubblicarci su i markers...

si quel modulo non sembra essere nato per tale sviluppo..ne sono sempre più convinto, ho letto il link per creare una interazione con MySQL;
ho guardato con phpmyadmin e il modulo prende i dati con 2 query da 2 tabelle così:
(ti impasto queste per riassumere)

Codice: [Seleziona]
$query = "SELECT `data_txt`, `itemid`, `fieldid` FROM `#__sobi2_fields_data` WHERE (`fieldid` = 1 OR `fieldid` = '{$config->googleMapsLatField}' OR `fieldid` = '{$config->googleMapsLongField}') AND `itemid` IN ($sItems)";

$query = "SELECT `title`, `icon`, `itemid` FROM `#__sobi2_item` WHERE (`itemid` IN ($sItems) AND `published` = 1 AND (`publish_down` > '{$now}' OR `publish_down` = '{$config->nullDate}') )";

quindi non ho bisogno di creare la tabella "markers" come nell'esempio che mi hai postato, mi basta richiamare questi dati, o tu ne hai creata una nuova con dentro tutto?

Offline zeus

  • Esploratore
  • **
  • Post: 71
  • Sesso: Maschio
  • Silly rabbit, trix are not for kids
    • Mostra profilo
Re:Centrare mappa su ip utente
« Risposta #39 il: 27 Giu 2011, 16:35:47 »
ASSOLUTAMENTE.... non serve creare la tabella markers... quello è solo un esempio, poi lo adatti alle tue esigenze

secondo me è fondamentale usare direttamente le sue query... ma solo se continuerai ad usare Sobi per gli inserimenti delle coordinate delle nuove posizioni geografiche.

 



Web Design Bolzano Kreatif