Criptare latitudine e longitudine di una Google Map

8 contenuti / 0 new
Ultimo contenuto
Criptare latitudine e longitudine di una Google Map

Ciao a tutti.

Con D6, GMap e Location ho sviluppato un sito per visualizzare su mappa dei nodi geolocalizzati.
La consultazione di questi dati da parte degli utenti non registrati deve essere approssimativa, nel senso che solo nel momento in cui si registrano possono accedere ai dati nella loro completezza. Al momento ho risolto via javascript limitando lo zoom nella Google Map, in modo che, oltre un tot di zoom, la mappa si blocca non permettendo ulteriori ingrandimenti. L'utente deve sapere insomma che in quella zona c'è un POI, ma non dove si trova esattamente. E fin qui ci siamo.
Il problema è che chiunque, senza troppo sforzo, aprendo il sorgente della pagina può bellamente trovare latitudine e longitudine di ciascun POI nello stringone del codice javascript che genera la mappa, perché c'è scritto proprio inequivocabilmente:

... "markers": [
{ "latitude": 46.138436, "longitude": 9.420455, "markername": "small red", "offset": 0, "text": "\x3cdiv class="gmap-popup"\x3e  \r\n  \x3cdiv class="views-field-title"\x3e\r\n                \x3cspan class="field-content"\x3e\x3ca href="/?q=content/poi1"\x3epoi1\x3c/a\x3e\x3c/span\x3e\r\n  \x3c/div\x3e\r\n\x3c/div\x3e", "opts": { "title": "", "highlight": 0, "highlightcolor": "#FF0000" } },
{ "latitude": 46.138434, "longitude": 9.420499, "markername": "small red", "offset": 1, "text": "\x3cdiv class="gmap-popup"\x3e  \r\n  \x3cdiv class="views-field-title"\x3e\r\n                \x3cspan class="field-content"\x3e\x3ca href="/?q=content/poi2"\x3epoi2\x3c/a\x3e\x3c/span\x3e\r\n  \x3c/div\x3e\r\n\x3c/div\x3e", "opts": { "title": "", "highlight": 0, "highlightcolor": "#FF0000" } },
{ "latitude": 46.138346, "longitude": 9.420899, "markername": "small red", "offset": 2, "text": "\x3cdiv class="gmap-popup"\x3e  \r\n  \x3cdiv class="views-field-title"\x3e\r\n                \x3cspan class="field-content"\x3e\x3ca href="/?q=content/poi3"\x3epoi3\x3c/a\x3e\x3c/span\x3e\r\n  \x3c/div\x3e\r\n\x3c/div\x3e", "opts": { "title": "", "highlight": 0, "highlightcolor": "#FF0000" }
}...

Devo trovare un modo o sviluppare un modulo che mi permetta di criptare quelle coordinate o perlomeno di mascherarle o nasconderle da qualche parte evitando che siano così facilmente reperibili.
Any idea?

Grazie in anticipo a chi mi vorrà dare una mano

Ciao,
una soluzione potrebbe essere cambiare il posto in cui vengono inserite le coordinate... potrebbe essere il semplice caricamente di un json con la lista delle coordinate... ho realizzato una cosa simile (non per via della visibilità ma per via dei possibili pesi della pagina) con views_datasource. In questo modo ti carichi il file che ti serve via ajax e poi recuperi tutti i marker sulla mappa...
;)

Molto interessante, grazie.
Non ho mai usato JSon, ma a naso può funzionare.
Dimmi se ho capito giusto. Grazie al modulo views_datasource creo la view con style JSon che estrapola le coordinate dei miei nodi e poi modifico il codice del modulo GMap affinchè carichi le coordinate dall'indirizzo della view senza inserire il Javascript nella pagina.
Devo spulciare la Google Map API per capire come "convincere" GMap a visualizzare i dati in quel formato.
Ma aspetta un momento, il codice che ho scritto sopra è già JSON, vero?

Thanx

---------------
Più ne sai, più ne puoi, più scopri di non saperne.

Ciao,
si, il codice che hai riportato sopra è json... la diferrenza con il mio metodo è che i dati non vengono caricati nel momento che la pagina viene caricata ma via AJAX quando la pagina è gia visualizzata. Essendo una chiamata ajax un utente normale non vede cosa succede, a meno che non usi firebug o simile. Il vantaggio è che allegerisci il caricamente della pagina (a me serviva per questo scopo, dato che c'era un'altra probabilità che mi ritrovassi centinaia di marker).
Per quanto riguarda la mappa, io ho risolto realizzando un modulo custom apposito che prende i dati dai json e li trasforma.
Se vuoi ti giro il modulo... l'unica cosa è che dovrai adattarlo alle tue esigenze!
;)

Ciao gioppy

Ho fatto qualche tentativo, ma senza successo. (Nel frattempo mi si è anche fuso il computer, ma spero che non dipenda dal codice che ho scritto nelle mie prove... :-) )
Se non è troppo disturbo, potresti per favore girarmi il tuo modulo in modo che lo possa usare come traccia?
Oppure girarmi il link di qualche tutorial per fare una cosa simile...

Thanx

---------------
Più ne sai, più ne puoi, più scopri di non saperne.

Cheope wrote:
Ciao gioppy

Ho fatto qualche tentativo, ma senza successo. (Nel frattempo mi si è anche fuso il computer, ma spero che non dipenda dal codice che ho scritto nelle mie prove... :-) )
Se non è troppo disturbo, potresti per favore girarmi il tuo modulo in modo che lo possa usare come traccia?
Oppure girarmi il link di qualche tutorial per fare una cosa simile...

Thanx


Certo!
Eccoli!

D6: http://www.giovannibuffa.it/drupal-modules/shake_map-6.x-x.x.zip
D7: http://www.giovannibuffa.it/drupal-modules/shake_map-7.x-x.x.zip

La versione 7 ha bisogno ancora di qualche piccola aggiustatina, ma in generale funziona. All'interno, troverai principalmente le api per poter funzionare (diciamo che con il modulo da solo non fai le mappe, ma devi implementarle successivamente).
Via php puoi richiamare una mappa con la funzione:

<?php
 shake_map_add_js
($jsonUrl, $id = '')
?>

dove basta che gli dai l'url del json e l'id su cui applicare la mappa (occhio che via css devi impostarle l'altezza del div della mappa, altrimenti non vedrai nulla).
Se vuoi farlo via javascript, ti basta questo codice:
$(document).ready(function () {
    $.getJSON('/my/location.json', function(data, success){
      if(success){
var icons = {'Category':'/sites/all/modules/shake_map/images/marker/pins_03.png', 'default':'/sites/all/modules/shake_map/images/marker/pins_default.png'};
        $('#my-map-id').shakeMap({data:data, category_icon_options:icons});
      }
});
  })

Devi specificare anche le categorie dei marker alle quali puoi associare delle diverse icone (file png trasparenti). Ricordati di specificare anche il default, che altro non è che un png della stessa grandezza dei tuoi marker ma totalmente trasparente (ho visto che google maps faceva un pò di confusione con alcune cose, per cui il png trasparente fa si che non spariscano i marker se aggiorni la mappa via ajax).
Il json dovrebbe essere formattato in questa maniera (puoi anche cambiarlo come ti serve, basta che agisci sul file jquery.shakeMap.js):
{"points":[{"point":{"categoria":"Category","lat":"45.681458","lng":"13.377292","informazioni":"Prova"}}]}
Più point metti più marker ti ritroverai nella mappa! Il json, l'ho creato sempre con il modulo views datasource.

Se hai dubbi chiedi pure!
;)

GRAZIE 1000!!!
Me lo studio per bene, perchè mi sa che ho fatto un gran casino..
Anche con Gmap+Location avevo dei marker diversi in base alla tassonomia, ma che nel tempo non cambiano, quindi li posso scrivere direttamente a livello modulo.
Domanda fagiana. Creando il json con la view associando dei permessi particolari, potrei fare in modo che venga visualizzato se e solo se è la mappa a chiederlo e non se uno digita l'URL direttamente?...
Mi sa di no, eh?
Magari posso passargli un parametro da validare come contextual filter... Meglio fare un passo alla volta, che sto sbarellando...

Thanx

---------------
Più ne sai, più ne puoi, più scopri di non saperne.

Ciao,
purtroppo no, se uno conosce l'url del json può tranquillamente accederci, a meno che, dato che è una vista (se decidi di utilizzare views_datasource) non la blocchi ad un gruppo di utenti.
Comunque sia, dal mio punto di vista, a meno che l'utente che sta visitando il tuo sito non sia un devoleper o uno smanettone, non andrà mai a vedere come carichi i dati delle mappe (cosa che io faccio molto spesso... apro firebug e vedo come funzionano le cose... ma la mia è deformazione professionale!)... dubito che "l'utente medio" se ne freghi qualcosa di come avvengono le cose: per lui basta che funzioni!
;)