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
- La gestione dello stato da ASP.NET 1.x ad ASP.NET 3.5
- Routing e dynamic data control di ASP.NET 3.5 SP1
- I nuovi controlli di ASP.NET 3.5: LinqDataSource, ListView e DataPager
- Galleria fotografica dinamica con ASP.NET AJAX
- Usare Search come un servizio nei tuoi siti e nei tuoi client
- Integrare Windows Live ID, Contacts e Presence API nelle tue applicazioni
- Introduzione ai cloud based service con Windows Live Services
- Realizzare un custom extender AJAX con ASP.NET 3.5
- Tracciare le modifiche ai dati e allineare i datawarehouse con il Change Data Capture in SQL Server 2008
Complimenti per l'articolo volevo sapere se esiste con VE un metodo per ricavare latidudine e longitudine di una località ...Grazie
Come si fa a calcolare la latitudine e longitudine di un punto ben presiso?
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.




Difficoltà
Stampa
Download 


10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!
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 ...
Continua »»» | Rispondi »»»