Wednesday, August 8, 2007

Virtual Earth: Find Route con Latitudine e Longitudine

. Wednesday, August 8, 2007

Attraverso la funzione GetRoute Virtual Earth disegna sulla mappa un percorso data una location di partenza e una di arrivo.
Le due location possono essere indicate sia come stringa quindi un indirizzo, oppure attraverso l'oggetto VELatLong.
Ho pensato quindi di usare la funzione GetRoute per risalire all'indirizzo di una via conoscendo solo le coordinate di latitudine e longitudine.
Per prima cosa mi son costruito una semplice interfaccia web in cui ho inserito i seguenti controlli:
1)un controllo TextBox con id txtLatitudine in cui vado ad indicare le coordinate di latitudine;
2)un controllo TextBox con id txtLongitudine in cui vado ad indicare le coordinate di longitudine;
3)un Input Button con id btnSearch che richiama la funzione di ricerca della route;
4)un controllo Label con id lblResult che prenderà come risultato l'indirizzo della strada trovata.
Il codice dell'interfaccia è il seguente:

<body onload="GetMap();">
<form id="form1" runat="server">
<div>
<table cellpadding="0" cellspacing="0" border="0" width="100%">
<tr>
<td>
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td>
<asp:Label ID="lblLatitudine" runat="server" Text="Latitudine:"></asp:Label>
<asp:TextBox ID="txtLatitudine" runat="server"></asp:TextBox>
</td>
</tr>
<tr>
<td>
<asp:Label ID="lblLongitudine" runat="server" Text="Longitudine:"></asp:Label>
<asp:TextBox ID="txtLongitudine" runat="server"></asp:TextBox>
</td>
</tr>
<tr>
<td align="center">
<input id="btnSearch" type="button" value="Cerca" onclick='SearchRoute();' />
</td>
</tr>
<tr>
<td>
<asp:Label ID="lblRoute" runat="server" Text="Via:"></asp:Label>
<asp:Label ID="lblResult" runat="server"></asp:Label>
</td>
</tr>
</table>
</td>
<td valign="top" align="left" width="100%">
<div id="myMap" style="position: absolute; width: 800; height: 600">
</div>
</td>
</tr>
</table>
</div>
</form>
</body>
Dal punto di vista grafico:


La parte più interessante è sicuramente la sezione di script:
<head runat="server">
<title>GetRoute</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<script src="http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=5"></script>

<script>
var map = null;
function GetMap()
{
map
= new VEMap( 'myMap');
map.LoadMap();
}

function SearchRoute()
{
var latLong = null;
if( document.getElementById( 'txtLatitudine').value != '' && document.getElementById( 'txtLongitudine').value != '')
{
latLong
= new VELatLong( document.getElementById( 'txtLatitudine').value, document.getElementById( 'txtLongitudine').value);
map.GetRoute( latLong,
latLong,
VEDistanceUnit.Kilometers,
VERouteType.Shortest,
getDescriptionRoute);
}
}

function getDescriptionRoute( route)
{
var len = route.Itinerary.Segments.length;
if( len > 0)
document.getElementById(
'lblResult').innerText = route.Itinerary.Segments[1].Instruction;
map.DeleteRoute();
}
</script>

</head>
La funzione SearchRoute non fa altro che richiamare la funzione GetRoute.
I parametri che vengono passati alla funzione sono l'oggetto VELatLong, che nel caso specifico costituisce sia la location di partenza sia la location di arrivo, dato che l'intento è quello di conoscere l'indirizzo data la longitudine e la latitudine.
Il terzo parametro indica l'unità di misura del persorso attraverso l'enumeratore VEDistanceUnit i cui valori sono: Miles o Kilometers.
Il quarto parametro indica la tipologia di itinerario attraverso l'enumeratore VERouteType i cui valori sono: Shortest (itinerario breve) o Quickest (itinerario rapido).
Infine l'ultimo parametro è la funzione getDescriptionRoute che prenderà in input l'oggetto VERoute restituito.
L'oggetto VERoute contiene il dettaglio della strada disegnata sulla mappa, in particolare attraverso la property VERoute.Itinerary è possibile conoscere le informazioni sull'itinerario.
Parte di queste informazioni sono contenute nell'array Segments, ed attraverso la property Instruction posso risalire al nome della strada.
Nel caso specifico il segmento è composto da tre elementi, il primo e il terzo sono rispettivamente il punto di partenza e il punto di arrivo, anche se sinceramente mi sarei aspettato un unico punto dato che la latitudine e longitudine coincidono.
Il secondo elemento contiene proprio l'informazione che mi serve.
Per esempio se indichiamo come latitudine 45.471064 e come longitudine 9.187596 otteniamo Via Brera a Milano oppure indicando 45.480566 e 9.210663 otteniamo Corso Buenos Aires sempre a Milano.

0 commenti:

Post a Comment