Joomla.it Forum

Non solo Joomla... => Sviluppo => : aston82 16 Jun 2011, 14:59:00

: Centrare mappa su ip utente
: aston82 16 Jun 2011, 14:59:00
Ciao a tutti,
utilizzo un modulo di Joomla 1.5 per visualizzare una mappa di google.. Vorrei centrarla sulla località del utente che si logga.. sto provando questo script, qualcuno mi può dare una mano?? o darmi un consiglio?
Grazie!!

:
<script type="text/javascript">
       window.onDomReady = DomReady;
       function DomReady(func) { if(document.addEventListener) { document.addEventListener("DOMContentLoaded", func, false); } else { document.onreadystatechange = function() { readyState(func) } } }
       function readyState(func) { if(document.readyState == "complete") { func(); } }
    </script>
   
   <script src=\"{$baseAddresse}/maps?file=api&amp;v={$map_api_version}&amp;key={$config->googleMapsApiKey}\" type=\"text/javascript\">
   </script>
   
    <script type="text/javascript">
      google.load("search", "1.x", {callback: initialize});

      function initialize() {
        if (google.loader.ClientLocation) {
           var lat = google.loader.ClientLocation.latitude;
           var long = google.loader.ClientLocation.longitude;
           alert ("lat: " + lat + "\nlong: " + long);
         }
         else { alert ("not available"); }
       }
   </script>
   
   <?php
   
//if ($mapControl == 3) {
    //   echo "<script src=\"{$config->liveSite}/modules/{$module_path}extlargemapcontrol.js\" type=\"text/javascript\"></script>";
    //}
    
echo "\n\t <script type=\"text/javascript\">";
    echo 
"\n\t ";
    echo 
"//<![CDATA[ ";
    echo 
"\n\t\t ";
    echo 
"function loadSobiCatOverMap() {";
    echo 
"\n\t\t\t ";
    echo 
"if ( GBrowserIsCompatible() ) {";
    echo 
"\n\t\t\t\t ";
    echo 
"var SobiCatOverMap = new GMap2( document.getElementById(\"sobi2GcatOver\") );";
    echo 
"\n\t\t\t\t ";
    echo 
"SobiCatOverMap.setCenter( new GLatLng( {$centerPointLat}{$centerPointLong} ), {$mapsZoom} );";
: Re:Centrare mappa su ip utente
: mau_develop 16 Jun 2011, 15:51:47
Vorrei centrarla sulla località del utente che si logga
-----------------------------------------------------------------------
quindi ti serve questo dato... dov'è?

M.
: Re:Centrare mappa su ip utente
: aston82 16 Jun 2011, 16:15:54
ciao grazie della risposta,

bè, uso il login di un componente per community che estende quello standard di Joomla aggiungendo "FIELD_ADDRESS" , "FIELD_CITY" , "FIELD_COUNTRY" ( nella tabella jos_community_fields  del mio Db).
: Re:Centrare mappa su ip utente
: aston82 16 Jun 2011, 19:35:23
Ok ho fatto questo codice che preleva i campi che mi interessano per lo user  ::)

:
<?php function JomSocial_field($fieldcode) {
  global 
$database;
  
$user =& JFactory::getUser();
  
$userId $user->get'id' );
  
$sql "SELECT (id) FROM #__community_fields WHERE fieldcode= '$fieldcode'";
  
$database->setQuery$sql );
  
$fieldID $database->loadResult();
  
$sql "SELECT (value) FROM #__community_fields_values WHERE field_id= {$fieldID} && user_id= {$userId}";
  
$database->setQuery$sql );
  echo 
$database->loadResult();
}
?>


<?php JomSocial_field("FIELD_COUNTRY"); ?>
<?php JomSocial_field("FIELD_CITY"); ?>
<?php JomSocial_field("FIELD_ADDRESS"); ?>

(penso sia giusto).. ora come faccio a usarli per centrare la mappa?  :o
Help please!!
: Re:Centrare mappa su ip utente
: mau_develop 16 Jun 2011, 19:42:56
..no ma aspetta funziona o non funziona... perchè lo dovrebbe fare già di suo

google.loader.ClientLocation.latitude;
var long = google.loader.ClientLocation.longitude;

ma non ho capito cosa stai facendo... usi un modulo che lo permette? lo vuoi modificare?
che è quella serie di "echo"?  Dove lo stai mettendo quello script?

M.
: Re:Centrare mappa su ip utente
: aston82 16 Jun 2011, 20:15:01
scusami, non mi sono spiegato benissimo, parlo sempre in inglese ultimamente.
allora: utilizzo un modulo per Sobi2 ( componente di archiviazione in categorie ) che visualizza una in una mappa di google dei marker in corrispondenza delle entry ( tipo gli articoli ).
La mappa che visualizzo ora si centra automaticamente visualizzando tutte le entry inserite..risultato se ho due inserimenti, uno a roma e uno a londra, mi visualizza sempre la mappa dell'europa..e cosi via peggiorando con zoom out sempre più estesi più sono diffuse le entry nel globo.
Per fornire ai miei users una mappa utile vorrei prendere quei dati sulla loro location che mi passano attraverso la registrazione al sito e usarli per centrare la prima visualizzazione della mappa di questo modulo.

la funzione che ho riportato dovrebbe estrapolare i field necessari per l'utente loggato.. almeno credo.
poi andrebbe inserita in qualche modo nel file che ti allego del modulo.. ti posto quello originale, senza i miei pasticci.

(rigo 215 e rigo 408 )
: Re:Centrare mappa su ip utente
: mau_develop 16 Jun 2011, 20:38:47
se cerchi in qs sezione o sul mio sito c'è un tutorial per un componente googlemaps, che è poi + o - la stessa storia del tuo, cambia solo il js.
Tra componente e modulo diciamo che non c'è molta differenza... usa solo ciò che ti interessa.


M.
: Re:Centrare mappa su ip utente
: zeus 17 Jun 2011, 09:05:56
cmq per centrare una mappa devi dare questo comando
:
map.setCenter(new GLatLng(42.93230, 12.71118), 5);ovviamente latitudine e longitudine le devi ricavare con apposite funzioni di geodecoding....
basta googlare un pò....
http://code.google.com/intl/it-IT/apis/maps/documentation/javascript/services.html#Geocoding (http://code.google.com/intl/it-IT/apis/maps/documentation/javascript/services.html#Geocoding)
: Re:Centrare mappa su ip utente
: aston82 17 Jun 2011, 09:41:40
Grazie ad entrambi, oggi faccio un po' di prove e vi faccio sapere se funziona!

ok, ho provato a inserire:
:
        google.loader.ClientLocation.latitude;
$centerPointLat = google.loader.ClientLocation.latitude;
google.loader.ClientLocation.longitude;
$centerPointLong = google.loader.ClientLocation.longitude;
echo "SobiCatOverMap.setCenter( new GLatLng( {$centerPointLat}, {$centerPointLong} ), {$mapsZoom} );";
mi da lo spazio della mappa grigio con il logo di Google.. se metto il codice dove dichiara i parametri del modulo mi ritorna la mappa come se non avessi modificato nulla. (@Zeus: nel modulo c'è già quel comando per centrare la mappa, devo capire come passargli gli indirizzi)

ho anche letto il link e visto la funzione per il geocoding dell'indirizzo suggerita da Zeus:
:
function codeAddress() {
    var address = document.getElementById("address").value;
    geocoder.geocode( { 'address': address}, function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {
        map.setCenter(results[0].geometry.location);
        var marker = new google.maps.Marker({
            map: map,
            position: results[0].geometry.location
        });
      } else {
        alert("Geocode was not successful for the following reason: " + status);
      }
    });
  }


ma questo modulo è strutturato in maniera diversa e non riesco a venirne a capo.. scusate ma le storie sulle mappe non mi sono congeniali..  :(   
: Re:Centrare mappa su ip utente
: mau_develop 17 Jun 2011, 11:38:56
non conosco l'api in questione ma secondo me qs

google.loader.ClientLocation.latitude;

client->location->latitude è già una localizzazione

M.
: Re:Centrare mappa su ip utente
: zeus 17 Jun 2011, 11:54:17
ma magari è vuota e giustamente non sa cosa centrare....

che api di google maps stai usando??
: Re:Centrare mappa su ip utente
: aston82 17 Jun 2011, 12:18:23
ok allora, lasciamo perdere il discorso del centramento sull'indirizzo dell'utente che mi pare troppo per le mie corde per il momento, vediamo di venirne fuori con sto benedetto client:

come ho detto ho provato :
google.loader.ClientLocation.latitude;
   $centerPointLat = google.loader.ClientLocation.latitude;
   google.loader.ClientLocation.longitude;
   $centerPointLong = google.loader.ClientLocation.longitude;
   $mapsZoom = "5";
   echo "SobiCatOverMap.setCenter( new GLatLng( {$centerPointLat}, {$centerPointLong} ), {$mapsZoom} );";
e mi restituisce la mappa tutta grigia..
ho provato a metterci valori fissi con $centerPointLat = "45.56";   e poi la mappa viene visualizzata bene per quelle cordinate.

quindi credo manchi qualcosa per far andare il google.loader.clientLocation.. mi puoi aiutare su questo? grazie ancora.


@zeus:
dovrebbe essere la 2
: Re:Centrare mappa su ip utente
: zeus 17 Jun 2011, 12:40:48
ho trovato un pò di link che possono aiutarti.
http://www.petefreitag.com/item/683.cfm (http://www.petefreitag.com/item/683.cfm)
http://free-script.it/post/Script_ajax_Trovare_la_posizione_di_un_IP_su_google_maps-106.htm (http://free-script.it/post/Script_ajax_Trovare_la_posizione_di_un_IP_su_google_maps-106.htm)
http://snipplr.com/view/7985/googleloaderclientlocation-to-get-a-persons-latlong-using-their-ip-address/ (http://snipplr.com/view/7985/googleloaderclientlocation-to-get-a-persons-latlong-using-their-ip-address/)
http://almaer.com/blog/where-are-you-using-the-new-ajax-clientlocation-api (http://almaer.com/blog/where-are-you-using-the-new-ajax-clientlocation-api)
: Re:Centrare mappa su ip utente
: aston82 17 Jun 2011, 14:39:10
@zeus:

ho inserito questa funzione di test nel mio modulo, non da errori,ma restituisce il caso null:
:
<script src="http://www.google.com/jsapi" language="javascript"></script>
<script language="javascript">
if (google.loader.ClientLocation != null) {
document.write("Your Location Is: " + google.loader.ClientLocation.address.city + ", " + google.loader.ClientLocation.address.region);
} else {
document.write("Your Location Was Not Detected By Google Loader");
}
</script>
If a location cannot be determined from the visitors IP address, the google.loader.ClientLocation variable will be null.
vuol dire che io ho qualche blocco che nega la lettura del mio IP??
: Re:Centrare mappa su ip utente
: zeus 17 Jun 2011, 15:22:40
non so che dirti, leggi bene la documentazione google...
non l'ho mai usato e non saprei come aiutarti...

mi viene un dubbio... non è che devi attivare il servizio Latitude (non riordo bene come si chiama)???
: Re:Centrare mappa su ip utente
: aston82 17 Jun 2011, 16:23:51
..si sto leggendo da giorni in tutto il web, solo mi dice sempre che il client non è leggibile o simili.. boh!
non riesco a trovare da nessuna parte qualcuno che abbia già fatto una cosa simile.. pazzesco.. :(

: Re:Centrare mappa su ip utente
: mau_develop 17 Jun 2011, 17:04:09
ma la chiave l'hai messa?

M.
: Re:Centrare mappa su ip utente
: aston82 17 Jun 2011, 17:22:37
:
echo "<script src=\"{$baseAddresse}/maps?file=api&amp;v={$map_api_version}&amp;key={$config->googleMapsApiKey}\" type=\"text/javascript\"></script>";
nel modulo c'è già questo richiamo alla chiave, giusto no?

o ne serve una diversa per ogni script?
: Re:Centrare mappa su ip utente
: mau_develop 17 Jun 2011, 17:30:43
 al massimo uno per api a cui ti colleghi, ... ma non saprei rispondere a questo

...leggevo sulla pagina dell'api e ho visto il warning
http://code.google.com/intl/it-IT/apis/loader/

M.
: Re:Centrare mappa su ip utente
: zeus 17 Jun 2011, 19:29:35
questi li hai già letti?
http://lab.abhinayrathore.com/ipmapper/ (http://lab.abhinayrathore.com/ipmapper/) (questo sembra perfetto - anche se non funziona con la chiavetta tim - ovviamente)
http://www.doogal.co.uk/WhereAmI.php (http://www.doogal.co.uk/WhereAmI.php) questo funziona ed èabbastanza preciso (sembra che devi copiarti il codice sorgente dall'html)

altre fonti:
http://stackoverflow.com/questions/1365722/center-google-map-based-on-geocoded-ip (http://stackoverflow.com/questions/1365722/center-google-map-based-on-geocoded-ip)
http://web3o.blogspot.com/2011/06/ip-address-geocoding-api-for-google.html (http://web3o.blogspot.com/2011/06/ip-address-geocoding-api-for-google.html)

di più nin sò  ;)
: Re:Centrare mappa su ip utente
: aston82 20 Jun 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
: Re:Centrare mappa su ip utente
: aston82 21 Jun 2011, 11:50:01
questo è lo script per intero.. mi potete aiutare ad integralo? grazie!

: Re:Centrare mappa su ip utente
: zeus 21 Jun 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
: Re:Centrare mappa su ip utente
: aston82 21 Jun 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.


: Re:Centrare mappa su ip utente
: zeus 21 Jun 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 (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:
:
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
: Re:Centrare mappa su ip utente
: aston82 21 Jun 2011, 20:49:22

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.  (?)


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 (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

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

: Re:Centrare mappa su ip utente
: zeus 22 Jun 2011, 09:30:06
prova il file allegato....
non ho avuto modo di testarlo.... ma tanto devi sbatterci tu la testa, no??  ;)

Ciao
: Re:Centrare mappa su ip utente
: zeus 22 Jun 2011, 09:33:17
mi raccomando, poi voglio vedere il risultato finale...
: Re:Centrare mappa su ip utente
: aston82 22 Jun 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)


: Re:Centrare mappa su ip utente
: aston82 22 Jun 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??? 
: Re:Centrare mappa su ip utente
: zeus 23 Jun 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
:
alert(coordinate); e vediamo se ti restituisce qualcosa (mettilo alla riga 513 - appena sopra alla chiamata
:
echo "var SobiCatOverMap = new GMap2( document.getElementById(\"sobi2GcatOver\") );";)


cmq avrei bisogno di vedere il rendering... hai un link per farmi vedere il problema?
: Re:Centrare mappa su ip utente
: aston82 23 Jun 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!
: Re:Centrare mappa su ip utente
: zeus 23 Jun 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ì:
:
$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.....
: Re:Centrare mappa su ip utente
: aston82 23 Jun 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
: Re:Centrare mappa su ip utente
: aston82 25 Jun 2011, 12:13:31
qualche idea??

----------

e se girassimo il problema al contrario? ciòè usare la mappa dello script e pubblicarci su i markers??
: Re:Centrare mappa su ip utente
: zeus 27 Jun 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?
: Re:Centrare mappa su ip utente
: aston82 27 Jun 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)


: Re:Centrare mappa su ip utente
: zeus 27 Jun 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
: Re:Centrare mappa su ip utente
: aston82 27 Jun 2011, 16:25:00
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)

:
$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?
: Re:Centrare mappa su ip utente
: zeus 27 Jun 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.
: Re:Centrare mappa su ip utente
: aston82 27 Jun 2011, 17:20:58
ok adesso ci provo.. e ti farò sapere, ciao!
      
:
// Change this depending on the name of your PHP file
      downloadUrl("phpsqlajax_genxml.php", function(data) {
        var xml = data.responseXML;
        var markers = xml.documentElement.getElementsByTagNam e("marker");


ma quindi questo non mi serve, però come hai fatto
tu a fargli caricare il ciclo con le tue tabelle se non usi un xml come markers?


 
:
      for (var i = 0; i < markers.length; i++) {
          var name = markers[i].getAttribute("name");
          var address = markers[i].getAttribute("address");
          var type = markers[i].getAttribute("type");
          var point = new google.maps.LatLng(
              parseFloat(markers[i].getAttribute("lat")),
              parseFloat(markers[i].getAttribute("lng")));
          var html = "" + name + " [br /]" + address;
          var icon = customIcons[type] || {};
          var marker = new google.maps.Marker({
            map: map,
            position: point,
            icon: icon.icon,
            shadow: icon.shadow
: Re:Centrare mappa su ip utente
: aston82 29 Jun 2011, 11:02:24
riguardo alla soluzione precedente su un altro forum mi hanno suggerito di cambiare la funzione showmap con una che usasse lo stesso api v2 della mappa del modulo. Inoltre ho aggiunto un div con id location, che mi dicono mancasse al codice..qualcosina pare essere cambiato.ti allego il file..
la mappa come al solito la vedi nel sito.

cosa ne pensi?


: Re:Centrare mappa su ip utente
: zeus 29 Jun 2011, 11:11:43
Ma io showmap l'avevo eliminato, spostando il codice nella funzione SOBI... altrimenti ti avrebbe caricato 2 mappe.
Domani dovrei riuscire a trovare un pò di tempo per provare le cose...
: Re:Centrare mappa su ip utente
: zeus 29 Jun 2011, 11:14:50
Qusto ti serve eccome...
:
// Change this depending on the name of your PHP file
      downloadUrl("phpsqlajax_genxml.php", function(data) {
        var xml = data.responseXML;
        var markers = xml.documentElement.getElementsByTagNam e("marker");

ma quindi questo non mi serve, però come hai fatto
tu a fargli caricare il ciclo con le tue tabelle se non usi un xml come markers?


 
:
      for (var i = 0; i < markers.length; i++) {
          var name = markers[i].getAttribute("name");
          var address = markers[i].getAttribute("address");
          var type = markers[i].getAttribute("type");
          var point = new google.maps.LatLng(
              parseFloat(markers[i].getAttribute("lat")),
              parseFloat(markers[i].getAttribute("lng")));
          var html = "" + name + " [br /]" + address;
          var icon = customIcons[type] || {};
          var marker = new google.maps.Marker({
            map: map,
            position: point,
            icon: icon.icon,
            shadow: icon.shadow

mi hai frainteso.... intendevo la tabella mysql... ovviamente un file xml (prodotto da php) lo devi sempre produrre, altrimenti come fai a fare il loop e a caricare i markers????
: Re:Centrare mappa su ip utente
: aston82 29 Jun 2011, 11:31:34
Ma io showmap l'avevo eliminato, spostando il codice nella funzione SOBI... altrimenti ti avrebbe caricato 2 mappe.
Domani dovrei riuscire a trovare un pò di tempo per provare le cose...

ok grazie!  -- se ho ulteriori sviluppi ti faccio sapere.. magari su l'altro forum hanno in mente un altro modo per farlo.
: Re:Centrare mappa su ip utente
: aston82 30 Jun 2011, 14:53:17
NOVITA':  ho fatto delle modifiche e ora funziona su firefox 5 con windows!

però ho ancora 2 problemi:
-se guardo nel codice sorgente mi duplica una parte di codice.. e mi da alcuni errori..   cosa ne pensi?
(visata la mappa qui: http://www.urbanclaim.com/index.php?option=com_content&view=article&id=8&Itemid=26 (http://www.urbanclaim.com/index.php?option=com_content&view=article&id=8&Itemid=26))

- sul MAC:  sia con Firefox 5 e Safari carica la mappa globale e viene fuori il popup, ma se lo clicco non carica nulla, la mappa rimane globale.....??
-su IE 9:  non carica nessuna mappa, neanche quella globale, e rimane la pagina con lo spazio bianco...??

-CROME : carica subito senza chiedere nulla la mappa centrata..!?

cosa ne pensi?  sono problemi che dipendono da come i browser interpretano il mio script? come potrei risolverli?
: Re:Centrare mappa su ip utente
: zeus 09 Aug 2011, 13:24:36
Ma alla fine hai risolto?

sono appena tornato dalle ferie, sigh....