Mappe nel tuo sito con Virtual Earth

3 pagine in totale: <<Indietro 1 [2] 3 Avanti >>

Eseguire ricerche

Una delle funzionalità principali messe a disposizione da Virtual Earth è la possibilità di effettuare ricerche. Il controllo Map implementa questa funzione attraverso il metodo find.

Questo metodo ha diversi parametri, ma il modo più semplice per sfruttarlo è utilizzare solo i primi due che sono gli unici obbligatori. Il primo parametro effettua una ricerca per punto di interesse, noto anche come POI (un ristorante, un albergo, ecc. ecc.), mentre il secondo effettua una ricerca per indirizzo o per zona. In particolare, questo parametro può essere una stringa o una classe VEPlace che consente di effettuare ricerche anche per coordinate geografiche o ottenere risultati più restrittivi.

Per default, quando si cerca un punto di interesse questo viene ricercato solo all'interno della mappa visualizzata. Se si vuole espandere la ricerca, si deve inserire anche un indirizzo intorno al quale cercare. Quando il server restituisce i punti trovati, automaticamente viene visualizzato un pushpin sulla mappa e al passaggio del mouse viene visualizzato un popup che ne da una veloce descrizione.

Riprendendo l'esempio precedente, ecco come effettuare una ricerca di alberghi nella mappa visualizzata. Innanzitutto, si deve espandere il codice HTML inserendo un textbox per cercare un POI, un altro per ricercare un indirizzo ed un pulsante per lanciare la ricerca.

<div id="map" style="position:relative;width:800px; height:600px;"></div> 
<input id="txtWhat" type="text" name="txtWhat"/> 
<input id="txtWhere" type="text" name="txtWhere"/> 
<input id="find" type="button" value="Find" name="find"  
  onclick="Find();"/>

Successivamente, si crea la funzione javascript Find per chiamare l'API di find.

function Find(){ 
  try{ 
    map.Find(document.getElementById('txtWhat').value, 
      document.getElementById('txtWhere').value); 
  } 
  catch(e) 
  { 
    alert(e.message); 
  } 
}

A questo punto si può lanciare la pagina, scrivere "albergo" nel primo textbox ed il risultato sarà il seguente.

Supponendo di voler trovare alberghi in un'altra zona di Roma, ad esempio sulla Casilina, basta inserire l'indirizzo "via casilina, 00182, Roma RM" nel secondo textbox ed il risultato sarà il seguente.

La maggior parte delle volte, tuttavia, si ricerca un indirizzo e non un POI; in questo caso, si può lasciare il primo parametro del metodo find vuoto ed inserire solamente il secondo (in termini di interfaccia si valorizza solo il secondo textbox).

La ricerca degli indirizzi per le zone italiane non è ancora ottimizzata per cui molto spesso c'è bisogno di scrivere un indirizzo praticamente per intero includendo anche il CAP e la provincia (es. piazza dei re di roma, 00182, Roma RM, italia).

Quando si digita un indirizzo in modo non completo (ad esempio si omette il nome della città o parte della via), può capitare che Virtual Earth trovi più corrispondenze ed in questo caso non può essere sicuro di quale indirizzo si stia cercando. Per gestire questa occorrenza, il controllo Map mostra una schermata con le prime cinque somiglianze che trova con l'indirizzo immesso, dando la possibilità di selezionarne una e reindirizzarvi la mappa. Questa funzionalità è molto comoda, ma può essere customizzata sfruttando altri parametri del metodo find. Oltre ai due parametri già descritti, gli altri accettati sono:

  • FindType: un enum di tipo VEFindType che per ora ha solo il valore Business
  • ShapeLayer: un oggetto VEShapeLayer sul quale mettere i pushpin nel caso di ricerca dei POI
  • StartIndex e NumberOfResults: questi parametri servono per gestire la paginazione dei match derivanti da un indirizzo non univoco nel caso si voglia customizzare il modo in cui vengono visualizzati.
  • ShowResults: indica se visualizzare i pushpin
  • CreateResults: indica se creare i pushpin
  • UseDefaultDisambiguation: indica se utilizzare la finestra di default o una custom nella visualizzazione dei match multipli dell'indirizzo cercato
  • SetBestMapView: indica se la mappa deve muoversi automaticamente verso il primo elemento dei match trovati. Per default il valore è true.
  • Callback: metodo invocato quando la ricerca finisce.

Sfruttare il callback di ritorno permette di effettuare diverse operazioni sui risultati e non solo mostrare una finestra diversa per i match. Per esempio, quando l'utente seleziona un risultato univoco può inserire un pushpin oltre che centrare la mappa sul punto.

Nel prossimo esempio viene mostrato come effettuare entrambe le cose sfruttando il callback.

function Find(){ 
  try{ 
    map.Find( 
      document.getElementById('txtWhat').value, //ricerca per POI 
      document.getElementById('txtWhere').value, //ricerca per Indirizzo 
      VEFindType.Businesses, //enum con valore unico 
      null, //shape layer per la ricerca per POI 
      0, //indice iniziale dei risultati restituiti dal callback 
      10, //numero di risultati da restituire al callback 
      true, //visualizza il pushpin in caso di ricerca per POI 
      true, //crea i pushpin in caso di ricerca per POI 
      false, //crea i pushpin in caso di ricerca per POI 
      true, //Sposta la mappa sul primo risultato 
      callback //metodo invocato quando il server restituisce i risultati 
    ); 
  } 
  catch(e) 
  { 
    alert(e.message); 
  } 
} 
 
function callback (layer, resultsArray, places, hasMore, veErrorMessage){ 
  if (places != null && places.length > 1){ 
    var results = ""; 
    for (var i=0; i<places.length; i++){ 
      results += "<a href='javascript:Find(null, \"" + places[i].Name + 
        "\");'>" + places[i].Name + "</a> 
"; 
    } 
    document.getElementById("results").innerHTML = results; 
  } 
  else if (places != null && places.length == 1){ 
    var pushpin = new VEShape(VEShapeType.Pushpin, places[0].LatLong); 
    pushpin.SetDescription(places[0].Name); 
    map.AddShape(pushpin); 
    document.getElementById("results"").innerHTML = ""; 
  } 
}

Nel callback, se i risultati restituiti sono più di uno, viene mostrata una lista, altrimenti viene piazzato un pushpin sull'unico punto trovato. Il parametro che contiene i risultati dal server è places e contiene una lista di oggetti VEPlace che rappresentano i vari punti. Questo oggetto ha una proprietà di nome LatLong, che da longitudine e latitudine del punto, ed una di nome Name, che da il nome univoco di un indirizzo.

3 pagine in totale: <<Indietro 1 [2] 3 Avanti >>

Contenuti dell'articolo

Commenti
Dai un voto a questo articolo, ci aiuterà a migliorare il nostro sito (1 è il voto minimo, 5 il massimo).

Per procedere al rating dell'articolo devi essere autenticato.
ricardo78 scrive:
Mappe nel tuo sito con Virtual Earth

Ciao Stefano ho provato la mappa di cui l'esempio, è solo che nello script per impostare il luogo da visualizzare mi da un errore, in particolar modo ...
giovedì 2 ottobre 2008
MrOne scrive:
Mappe nel tuo sito con Virtual Earth

Complimenti per l'articolo volevo sapere se esiste con VE un metodo per ricavare latidudine e longitudine di una località ...Grazie
giovedì 10 luglio 2008
mauro.piccioli scrive:
Mappe nel tuo sito con Virtual Earth

Come si fa a calcolare la latitudine e longitudine di un punto ben presiso?
mercoledì 21 maggio 2008

Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.

TUTORIALS
TOP TEN ARTICOLI
NOTIFICHE

Iscriviti alla nostra newsletter nuoviarticoli per ricevere e-mail le notifiche!

Indirizzo e-mail:
PROVIDER ASP.NET 2.0

Seleziona il database per avere il web.config pronto per Membership, Roles e Profile API.



IN EVIDENZA
MISC