lorenzo

Dec 122011
 

Fra le maggiorni novità di html5 c’è un diverso approcio alla grafica, da adesso in avanti flash avrà vita durissima, per esempio perché sarà possibile inserire della grafica vettoriale via svg, cioè xml, con totale controllo del codice, senza ricorrere a plug-in. Un primissimo esempio è dato da un abbozzo di grafico a barre realizzato con svg appunto.

Il rislutato finale sarà decisamente “acerbo” ma l’idea è vedere quanto sia banale inserire svg e utilizzare gli elementi più semplici.

E infatti per avere svg nelle pagine non c’è niente da fare asta inserirlo:


<body>
<h2>HTML5 SVG Un’idea di grafico</h2>
<svg id=”svgelem” height=”200″ xmlns=”http://www.w3.org/2000/svg”>
<rect id=”greenrect” width=”250″ height=”20″ fill=”green” x=”0″ y=”0″ />
<rect id=”blurect” width=”200″ height=”20″ fill=”blue” x=”0″ y=”30″ />
<rect id=”redrect” width=”300″ height=”20″ fill=”red” x=”0″ y=”60″ />
</svg>
</body>

si visualizzeranno 3 semplici rettangoli uno a finaco a l’altro, la posizione è determinata dalle coordinate x e y, width ed height sono le dimensioni fill lo colora.

Il supporto dei browser? Assicurato da tutti i borwser moderni, internet explorer nelle versioni precedenti alla 9 dovrebbe aver bisogno del plug-in svg viewer.

L’esempio

 Posted by at 12:52 pm  Tagged with:
Nov 302011
 

Una delle novità proposte da html5 è l’introduzione del local storage, ovvero di una serie di specifiche che permettono un netto avanzamento rispetto ai cookie troppo limitati per essere effettivamente utili.

Costruiamo quindi una semplice pagina html5 che ci permetta di settare e leggere una copia key:value

Per prima cosa l’html, un form dove inputare un nome e un bottone per chiamare la funzione che memorizzerà il valore:


<label>Nome:</label><br>
<input type=”text” id=”nome”>
<input type=”button” value=”Imposta nome” onclick=”setNome()”>

La funzione le gee il valore e lo setta nel nostro localStorage:


function setNome() {
var nome = document.getElementById(“nome”).value;
localStorage.setItem(“Nome”,nome);
}

Possima già verificare il corretto funzionamento usando google chrome e da strumenti–>strumenti per sviluppatori

sotto Resources e local storage ci sarà la nostra copia. analogoa verifica la si può fare con firefox e firebug dal pannelo dom possiamo verificare localStorage.

Passiamo ora alla lettura dell’informazione memorizzata con due funzioni js:


function showStorage() {
var nome = localStorage.getItem(“Nome”);
if (nome != null) { document.getElementById(“mostra_nome”).innerHTML = nome; }
showElem();
}

function showElem(){
var p = document.createElement(“p”);
for(var i = 0; i < localStorage.length; i++) {
p.innerHTML=localStorage.key(i)+”= “+localStorage.getItem(localStorage.key(i));
}
document.getElementById(“ctrl_storage”).appendChild(p);
}

La prima funzione verifica la presenza del valore, la seconda stampa tutti i valori contenuti in locale.

L’esempio completo

Nov 172011
 

Facciamo in modo che gli utenti non commettano errori nella compilazione dei nostri form. Dove possibile una strada da seguire è quella dell’autocomplete, ovvero forni resu ggerimenti “live” in  modo che l’utente possa scegliere l’opzione desiderarata. Per fare quersto useremo jQuery UI, e per la parte server php e mysql.

Il database: una semplice tabella contenente le province italiane, a noi serviranno i campi sigla e nome.

A questo punto abbiamo bisogno di due file, uno sarà quello visualizzato dall’utente, il secondo sarà un file php che pescherà dal database i dati filtrati e li restituirà in formato json.

Il file html: due campi di input, il primo da compilare da parte dell’utente dove noi assoveremo la chiamata al server (quando avrà digitato il secondo carattere) e un campo dove scriveremo la sigla:


<input type=”text” id=”tag” name=”tag” value=”" />
<input type=”text” id=”tagid” name=”tagid” value=”" />

Nel tag head andremo a inserire:

1. il collegamento a jquery (preso dalla CDN di google)


<script type=”text/javascript” src=”https://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.js”></script>

2. il collegamento a jquery ui dalla stessa fonte


<script type=”text/javascript” src=”https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.min.js”></script>

3. il tema css che applicheremo al nostro oggetto


<link rel=”stylesheet” type=”text/css” href=”http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/themes/cupertino/jquery-ui.css” />

A questo punto, al caricamento del DOM, associamo all’elemento che ha id tag la funzione autocomplete:


$().ready(function(){
$(‘#tag’).autocomplete();
})

e andiamo a personalizzarlo specificando:

minLength:2, ovvero almeno due caratteri prima di effettuare la chiamata

source: ‘autocomplete.php’ la nostra fonte di dati

la gestione dell’evento change


change:function(event,ui){
if(!ui.item){
$(this).val(”);
$(‘#tagid’).val(”);
return false;
}
},

e soprattuto la gestione dell’evento select


select:function(event,ui){
$(‘#tagid’).val(ui.item.id);
}

per scrivere il valore dell’id nel secondo campo.

Ultimo passaggio il file php:


error_reporting(0);
require(‘include/mysql.inc.php’);
$return_arr=array();
$nome=$_GET['term'];
$sql=’select nome, sigla from province where nome like “‘.mysql_real_escape_string($nome).’%” order by nome’;
$fetch=mysql_query($sql);
while($row=mysql_fetch_array($fetch, MYSQL_ASSOC)){
$row_array['value']=$row['nome'];
$row_array['id']=$row['sigla'];
array_push($return_arr,$row_array);
}
mysql_close($conn);
echo json_encode($return_arr);

l’include contiene la connessione al database, dichiariamo l’array che useremo per raccogliere i dati, leggiamo la variabile get passata dal form e la usaimo all’interno della clausola where come filtro.

Mettiamo i risultati in un array che stampiamo nel formato json per inviarli alla pagina che ne ha fatto richiesta.

Ecco l’esempio al lavoro.

Nov 112011
 

Per calcolare un itinerario e visualizzarlo sulla nostra Google Maps sarà necessario lavorare con i services messi a disposizione da Google. Dopo aver inserito la nostra mappa ed averla centrata possiamo procedere con le personalizzazioni necessarie: la prima di queste prevede l’inserimento nell’html della pagina di un secondo box, oltre a quello che ospita la mappa, dove inseriremo le “istruzioni di viaggio”:


<div id=”miamappa” style=” float:left; width:70%; height:650px;”></div>
<div id=”istruzioni” style=” float:left; width:30%; height:650px;”></div>

Nello scirpt innanzitutto modifichiamo il collegamento alla libreria specificando la lingua della risposta:


<script type=”text/javascript” src=”http://maps.googleapis.com/maps/api/js?sensor=false&language=it”></script>

Nella parte di script vera e propria definiamo due variabili:


var directionDisplay;
var directionsService = new google.maps.DirectionsService();

directionsService ci servirà per chiamare il servizio, mentre directionDisplay servirà per visualizzare le informazioni.

Ora la funazione che calcola il percorso:


function calcRoute() {
var start = ‘Milano’;
var end = ‘Varese, Italia’;
var request = {
origin:start,
destination:end,
travelMode: google.maps.DirectionsTravelMode.DRIVING
};
directionsService.route(request, function(response, status) {
if (status == google.maps.DirectionsStatus.OK) {
directionsDisplay.setDirections(response);
}
});
}

Le variabili start e end servono per stabilire i punti di partenza e arrivo, chiaramente possono esere recuperati da form, database, etc

Per il TravelMode possiamo scegliere fra driving e walking (in usa anche BICYCLING).

Le ultime istruzioni sono l’esecuzione della chiamata.

Per completare la pagina dobbiamo inizializzare la nostra mappa:


function inizializza() {
directionsDisplay = new google.maps.DirectionsRenderer();
var milano = new google.maps.LatLng(45.463681, 9.188171);
var mapOptions = {
zoom: 10,
center: milano,
mapTypeId: google.maps.MapTypeId.TERRAIN
};
map =  new google.maps.Map(

document.getElementById(“miamappa”),

mapOptions);
directionsDisplay.setMap(map);
directionsDisplay.setPanel(document.getElementById(“istruzioni”));
calcRoute();
}

dove si deve renderizzare il percorso e nelle ultime due istruzioni scrivere il percorso nel box di destra e disegnarlo sulla mappa.

Ecco l’esempio completo.

Nov 102011
 

Come creare delle aree circolari su una mappa, per esempio per mostrare dei cerchi in proporzione con la popolazione residente in una città?

A partire dalla Google Maps costruiremo un array contenente il centro del cerchio e un  valore che servirà a determinare il raggio, nel nostra esempio la popolazione, anche se i dati non sono reali.

Un elemento dell’array sarà dunque fatto in questo modo:


citymap['milano'] = {

center: new google.maps.LatLng(45.463681, 9.188171),

population: 1334077};

e così via per tutte le aree

La seconda parte è la creazione del cerchio dove all’interno di un ciclo che fa scorrere il nostro array:


for (var city in citymap) {
var populationOptions = {
strokeColor: “#FF0000″,
strokeOpacity: 0.8,
strokeWeight: 2,
fillColor: “#FF0000″,
fillOpacity: 0.35,
map: map,
center: citymap[city].center,
radius: citymap[city].population / 50
};
cityCircle = new google.maps.Circle(populationOptions);
}

definiamo colore, opacità e via via tutti i parametri che servono.

L’esempio completo

Nov 092011
 

Dove sono? E’ possibile visualizzare un marker che mi indica dove mitrovo su una mappa.

Dipende in realtà da quale browser sto usando e dalla modalità di accesso alla rete.

In questo momento (novembre 2011) la localizzazione che si base su html5 funzionerà su chrome, firefox, safari. Grande assente ie. E questo ovviamente allo stato attuale limita fortemente l’uso, se però la nostra applicazione è per un supporto mobile questo problema non si pone e oltretutto è ragionevole pensare di essere posizionati con la precisione del gps eliminando i margini di errori legati all’accesso a internet: chi proverà l’esempio si accorgerà che se accede con un normale accesso alla rete con ip dinamico ci sarà un margine di errore magari anche significativo, questo dipende da dove viene identificato l’ip.

Per il codice vedere la sorgente dell’esempio

Nov 072011
 

Proviamo ad aggiungere alla nostra solita Google Maps alcune coordina te e congiungerle fra di loro con una linea, come esempio immagineremo di disegnare sulla mappa di Milano un tratto della metropolitana gialle (linea 3).

Abbiamo due preprequisiti da soddisfare: avere a disposizione la Google Maps, e in secondo luogo avere le coordinate di tutti i punti dove vogliamo far passare la nostra linea.

Per tanto come prima cosa creeremo un array con tuttel le posizioni che ci interessano:


var lineagialla = [
new google.maps.LatLng(45.492405,9.192531), //zara
new google.maps.LatLng(45.489502,9.200706), //sondrio
new google.maps.LatLng(45.485124,9.203035), //centrale
new google.maps.LatLng(45.479031,9.197123), //repubblica
new google.maps.LatLng(45.475427,9.194232), //turati
new google.maps.LatLng(45.470202,9.192483), //montenapoleone
new google.maps.LatLng(45.464461,9.189221), //duomo
new google.maps.LatLng(45.460748,9.188079), //missori
new google.maps.LatLng(45.456428,9.194999), //crocetta
new google.maps.LatLng(45.451781,9.202863), //portaromana
new google.maps.LatLng(45.446809,9.210395), //lodi
new google.maps.LatLng(45.442406,9.218581)  //brenta
];

In secondo luogo andremo a congiungere questi punti con le seguenti istruzioni:


var metro3 = new google.maps.Polyline({
path: lineagialla,
strokeColor: “#FFFF00″,
strokeOpacity: 1.0,
strokeWeight: 4
});

metro3.setMap(map);

Dove path sarà il nostro array contenente le coordinate, strokeColor il colore della linea e poi definiamo l’opacità e lo spessore.

A questo punto non resta che aggiungere l’informazione alla mappa.

Ecco l’esempio

Nov 062011
 

Un problema molto frequente è che spesso vogliamo inserire un marker a partire da un indirizzo e non dalle sue coordinate che quindi dovranno essere calcolate in modo automatico.

L’oggetto che si occupa della traduzione in coordinate del nostro indirizzo si chiama geocoder e lo inizializziamo nella funzione che crea la mappa:


geocoder = new google.maps.Geocoder();

Successivamente, a partire da un indirizzo, chiameremo una funzione che si occuperà di tradurre l’indirizzo in coordinate e piazzare una marker nelle coordinate individuate:


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 non ha trovato la posizione per il seguente motivo: ” + status);}
 });
 }

La prima istruzione assegna alla variabile address l’indirizzo che in questo caso viene preso da un campo di input.

Successivamente richiediamo le coordinate; se l’operazione va a buon fine, cioè geocoderstatus è ok, le coordinate vengono restituite nell’array results (results[0].geometry.location)

in modo da centrare la mappa sulle nuove coordinate e aggiungere il marker. Se si verifica un errore comparirà un alert, volendo possiamo eliminare l’istruzione contenuta nell’else.

L’esempio completo

Nov 042011
 

Quando andiamo ad aggiungere più marker ad uan Google Maps potremmo avere l’esigenza di personalizzare l’iconcina segnaposto.

Dobbiamo quindi arricchire il codice di inserimento del marker con l’istruzione relativa all’icona da utilizzare:


var image=”icon/icona_01.png”

e in secondo luogo, alla definizione del marker andiamo ad aggiungere l’istruzione relativa all’icona:


var marker = new google.maps.Marker(
{position: x,title:”Primo Marker”,icon:image}
);

L’esempio propone una mappa con due marker diversi: vai

Nov 032011
 

Per aggiungere una descrizione ad un marker presente nella Google Maps dovremo decidere l’evento che permetterà la visualizzazione della descrizione, in genere è il click sul marker e ovviamente il testo da visualizzare. Quindi il codice javascript della nostra mappa dovrà essere personalizzato in questo modo:


var mieinfo = new google.maps.InfoWindow(
{content: “Mi trovo esttamente<br /><strong>qui</strong>”}
);

google.maps.event.addListener(
marker,
‘click’,
function() {mieinfo.open(map,marker);}
);

In pratica la variabile mieinfo serve per stabilire il testo che andremo a visualizzare;

mentre nella seconda riga aggiungiamo l’evento click al nostro marker.

L’esempio completo