Showing posts with label Virtual Earth. Show all posts
Showing posts with label Virtual Earth. Show all posts

Saturday, August 23, 2008

Nuovo controllo Virtual Earth per Asp.Net

. Saturday, August 23, 2008
0 commenti

" Today we’re refreshing the Windows Live Tools for Microsoft Visual Studio (CTP). Over the past few months we’ve fixed lots of bugs and made sure the controls are up to date… but what I’m super excited about is the addition of the Microsoft Virtual Earth ASP.NET Control. "


Per maggiori dettagli qui in cui tra l'altro è possibile visionare un video della durata di circa 10 minuti in cui Mark Brown mostra una demo sull'utilizzo del controllo.

Read More »»

Tuesday, February 26, 2008

JavaScript Intellisense per Virtual Earth

. Tuesday, February 26, 2008
0 commenti

Marc Schweigert ha creato un nuovo progetto su codeplex (non ancora completo) che consente di avere l'intellisense javascript per il controllo Virtual Earth Map Control 6.0 in Visual Studio 2008.
Per avere un'idea di come diventi estremamente semplice utilizzare le API di Virtual Earth con il supporto dell'intellisense, vi rimando allo screencast di 8 minuti in cui Marc mostra le potenzialità del progetto.

Read More »»

Tuesday, October 23, 2007

Virtual Earth e 3DVIA

. Tuesday, October 23, 2007
0 commenti

Dopo il servizio offerto da Google con Sketchup, anche Microsoft in collaborabione con la francese Dassault presenta un servizio simile: 3DVIA, un software per creare modelli tridimensionali da inserire in Virtual Earth.

Read More »»

Wednesday, October 17, 2007

Versione 6 per Virtual Earth

. Wednesday, October 17, 2007
0 commenti

E' disponibile la versione 6 delle API di Virtual Earth.
Alcune delle nuove feature:

  • Supporto per Safari
  • Multipoint routing
  • Modificato l'engine del Geocoding

Per passare dalla versione 5 alla versione 6 è molto semplice, basta modificare il link .ashx da:
http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=5 a
http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.
Fonte: Virtual Earth, a developer blog

Read More »»

Tuesday, October 16, 2007

Virtual Earth: MapCruncher beta

. Tuesday, October 16, 2007
0 commenti

E' stato rilasciato in beta MapCruncher che permette di unire le mappe di Virtual Earth con le proprie mappe creando dei Mapping Mashup.
Accetta una serie di formati vettoriali: PDF, WMF, EMF e formati rasterizzati come: JPG, PNG, TIFF, GIF, BMP.

Read More »»

Thursday, September 27, 2007

FedEx e Virtual Earth

. Thursday, September 27, 2007
0 commenti

Federal Express ha lanciato un nuovo servizio basato su Virtual Earth, per rintracciare la posizione dei vari drop box. 
Per maggiori dettagli: blog.

Read More »»

Friday, August 10, 2007

Le Tappe del Beagle

. Friday, August 10, 2007
0 commenti

Sulle orme del naturalista Darwin, spinto dalle prime due puntate della trasmissione Evoluti per caso, ho deciso di fare un semplice esperimento con Virtual Earth indicando sulla mappa le tappe del  brigantino inglese, il Beagle.
Nella V5 delle Virtual Earth API esiste il supporto per GeoRSS, si tratta di un formato basato su XML avente lo scopo di georeferire RSS.
Se esiste il supporto allora si può dare in pasto a Virtual Earth :D.
Nel caso specifico l'XML è costituito da una serie di item ognuno composto da un titolo, una descrizione e un georss point contenente le coordinate di latitudine longitudine.

<item>
<title>Cape de Verd Islands</title>
<description>Tappa 1: Cape de Verd Islands</description>
<georss:point>14.916667 -23.516667</georss:point>
</item>

Per dare in pasto l'XML con le tappe del Beagle:

<script>
var map = null;
function GetMap()
{
map
= new VEMap( 'myMap');
map.LoadMap();
var geoRss = new VEShapeLayer();
var geoRss = new VEShapeSourceSpecification( VEDataType.GeoRSS, "Tappe.xml", geoRss);
map.ImportShapeLayerData( geoRss, LoadShape,
true);
}
function LoadShape( layer)
{
var numShapes = layer.GetShapeCount();
for(var i=0; i < numShapes; ++i)
{
var s = layer.GetShapeByIndex(i);
s.SetCustomIcon(
"images/beagle.gif");
}
}
</script>

L'oggetto VEShapeSourceSpecification definisce le specifiche di importazione dell'oggetto VEShapeLayer.
Il costruttore accetta tre parametri il dataType attraverso l'enumeratore VEDataType: GeoRSS o VECollection, quest'ultimo per importazione da Live Search Maps.
Il secondo parametro è il dataSource, che nel caso di GeoRSS Feed è rappresentato da un URL, infine l'ultimo parametro è il referimento all'oggetto VEShapeLayer.
Il metodo ImportShapeLayerData è autoesplicativo, l'unica nota da evidenziare è il booleano con valore true passato come terzo parametro, che consente di "centrare" la visuale della mappa sugli shape importati.
Con la funzione LoadShape andiamo a personalizzare gli shape importati, nel caso specifico l'immagine del pushpin.
Alcune immagini a lavoro finito:

Read More »»

Wednesday, August 8, 2007

Virtual Earth: Find Route con Latitudine e Longitudine

. Wednesday, August 8, 2007
0 commenti

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.

Read More »»

Tuesday, August 7, 2007

Virtual Earth, Google Maps e Yahoo Maps messi a confronto

. Tuesday, August 7, 2007
0 commenti

Un interessante articolo sul blog di Niall Kennedy, in cui mostra i risultati delle performance delle Map API.
Buona lettura!!!

Read More »»

Sunday, August 5, 2007

Virtual Earth. Primi passi

. Sunday, August 5, 2007
0 commenti

Per caricare la mappa di default di Virtual Earth nella nostra pagina .aspx bastano pochissime righe di codice:

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Pagina di test Virtual Earth</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( 'myMapDefault');
map.LoadMap();
}
</script>
</head>
<body onload="GetMap();">
<form id="form1" runat="server">
<div id="myMapDefault" style="position:absolute; width: 100%; height: 100%">
</div>
</form>
</body>
</html>

La mappa di default centrata sugli Stati Uniti viene caricata nel nostro div con id myMapDefault.
Ma partiamo con ordine, come prima cosa è fondamentale inserire un tag meta con attributo charset impostato su UTF-8, questo perchè avremo il giusto supporto di tutti i caratteri.
In seguito è necessario inserire una sezione di script in cui indicare l'url del map control.
Infine sempre nella sezione di script si crea un nuovo oggetto VEMap su cui richiamare il metodo LoadMap il quale si occupa di caricare la mappa di default questo perchè non abbiamo specificato alcun parametro.
Questo è il risultato:


Per rendere il tutto più interessante ho aggiunto tre controlli:
<table border="1" cellspacing="0" cellpadding="0" width="100%">
<tr>
<td align="center"><b>Lista città :</b> <asp:DropDownList ID="ddlCity" runat="server" Width="200px">
<asp:ListItem Value="1.2903767630848437,103.85227918624878">Singapore</asp:ListItem>
<asp:ListItem Value="38.72535854643843,-9.15037751197815">Lisbona</asp:ListItem>
</asp:DropDownList><b>Zoom:</b>
<asp:DropDownList ID="ddlZoom" runat="server">
<asp:ListItem>1</asp:ListItem>
<asp:ListItem>2</asp:ListItem>
<asp:ListItem>3</asp:ListItem>
<asp:ListItem>4</asp:ListItem>
<asp:ListItem>5</asp:ListItem>
<asp:ListItem>6</asp:ListItem>
<asp:ListItem>7</asp:ListItem>
<asp:ListItem Selected="True">8</asp:ListItem>
<asp:ListItem>9</asp:ListItem>
<asp:ListItem>10</asp:ListItem>
<asp:ListItem>11</asp:ListItem>
<asp:ListItem>12</asp:ListItem>
<asp:ListItem>13</asp:ListItem>
<asp:ListItem>14</asp:ListItem>
<asp:ListItem>15</asp:ListItem>
<asp:ListItem>16</asp:ListItem>
<asp:ListItem>17</asp:ListItem>
<asp:ListItem>18</asp:ListItem>
<asp:ListItem>19</asp:ListItem>
</asp:DropDownList>
<asp:Button ID="btnView" runat="server" Text="Carica mappa" /></td>
</tr>
</table>

1)DropDownList con id ddlCity che contiene la città di Lisbona e Singapore con i dati riguardanti le coordinate di latitudine/longitudine,
2)DropDownList con id ddlZoom per effettuare lo zoom sulla mappa. Il range di valori validi vanno da 1 a 19. Il valore di default è 4.
3)Un button con id btnView per caricare la mappa.
Lo scopo è appunto quello di caricare una mappa diversa da quella di default selezionando la città da una lista.
L'unica sezione da modificare è quella script:
<script>
var map = null;
function GetMap()
{
var latitudine = null;
var longitudine = null;
var itemCity = document.getElementById( 'ddlCity').value;
latitudine
= itemCity.split(',')[0];
longitudine
= itemCity.split(',')[1];
map
= new VEMap( 'myMapDefault');
map.LoadMap(
new VELatLong( latitudine, longitudine), document.getElementById('ddlZoom').value, 'r', false, VEMapMode.Mode2D);
}
</script>
Da sottolineare i parametri passati al metodo LoadMap.
Il primo parametro è un nuovo oggetto di tipo VELatLong che rappresenta il centro della mappa da visualizzare tramite le coordinate di latitudine/longitudine che recupero dal controllo ddlCity.
Secondo parametro il livello di zoom.
Terzo parametro è una lettera che può essere:

1)r per mappe stradali
2)a per mappe satellitari
3)h ibrida

Quarto parametro un booleano per indicare il lock o meno della mappa(significa che la mappa non sarà interattiva con valore true), ed infine il quinto parametro la modalità di visualizzazione; tramite l'enumeratore VEMapMode possiamo indicare una modalità di visualizzazione 2D o 3D.

Read More »»