Esercitazione: Eseguire la migrazione di un'app Web da Bing Maps
Le app Web che usano Bing Maps spesso usano Bing Maps V8 JavaScript SDK. Azure Maps Web SDK è l'SDK basato su Azure idoneo per la migrazione. Web SDK di Mappe di Azure consente di personalizzare le mappe interattive con contenuto e immagini personali per la visualizzazione in applicazioni Web o per dispositivi mobili. Questo controllo usa WebGL, consentendo di eseguire il rendering di set di dati di grandi dimensioni con prestazioni elevate. Sviluppare con questo SDK usando JavaScript o TypeScript. Questa esercitazione illustra come:
- Caricare una mappa
- Localizzare una mappa
- Aggiungere puntine, polilinee e poligoni.
- Visualizzare informazioni in un popup o in una casella informativa
- Caricare e visualizzare dati KML e GeoJSON
- Puntine cluster
- Sovrapporre un livello tessera
- Visualizzare i dati sul traffico
- Aggiungere un overlay sul terreno
Se si sviluppa con un framework JavaScript, può risultare utile uno dei progetti open source seguenti:
- ng-azure-maps: wrapper di Angular 10 intorno alle mappe di Azure.
- AzureMapsControl.Components: componente Blazor di Mappe di Azure.
- Componente React di Mappe di Azure: wrapper React per il controllo di Mappe di Azure.
- Mappe di Azure per Vue: componente di Mappe di Azure per l'applicazione Vue.
Prerequisiti
Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.
Supporto delle funzionalità principali
La tabella seguente elenca le principali funzionalità dell'API di Bing Maps V8 JavaScript SDK e il supporto di un'API simile in Azure Maps Web SDK.
Funzionalità di Bing Maps | Modulo di Bing Maps | Supporto di Azure Maps Web SDK |
---|---|---|
Puntine | ✓ | |
Raggruppamento di puntine | Microsoft.Maps.Clustering | ✓ Raggruppamento di puntine |
Polilinee e poligoni | ✓ | |
Overlay sul terreno | ✓ | |
Mappe termiche | Microsoft.Maps.HeatMap | ✓ Aggiungere una mappa termica |
Livelli tessera | ✓ | |
Livello KLM | Microsoft.Maps.GeoXml | ✓ Modulo di IO spaziale |
Livello contorno | Microsoft.Maps.Contour | ✓ Esempi di codice del livello di contorno |
Livello contenitori per dati | Microsoft.Maps.DataBinning | ✓ Incluso nel modulo Origine dati a griglia di Mappe di Azure open source |
Livello tessera animata | ✓ Incluso nel modulo di animazione open source di Mappe di Azure | |
Strumenti di disegno | Microsoft.Maps.DrawingTools | ✓ Aggiungere strumenti di disegno |
Servizio di geocodifica | Microsoft.Maps.Search | ✓ API Ricerca o REST SDK |
Servizio Indicazioni | Microsoft.Maps.Directions | ✓ API Route |
Servizio Matrice di distanze | ✓ API Matrice di route | |
Servizio di dati spaziali | Microsoft.Maps.SpatialDataService | N/D |
Immagini satellitari/aeree | ✓ Scegliere uno stile mappa | |
Immagini di viste aeree | N/D | |
Immagini di viste a livello strada | N/D | |
Supporto di GeoJSON | Microsoft.Maps.GeoJson | ✓ |
Supporto di GeoXML | Microsoft.Maps.GeoXml | ✓ Modulo di IO spaziale |
Supporto di Well-Known Text | Microsoft.Maps.WellKnownText | ✓ Modulo di IO spaziale |
Piante dell'interno | Microsoft.Maps.VenueMaps | ✓ Creator |
Flusso del traffico | Microsoft.Maps.Traffic | ✓ Controllo del traffico |
Matematica spaziale | Microsoft.Maps.SpatialMath | ✓ esempi atlas.math o turf js |
Stili di mappa personalizzati | Parziale, Scegliere uno stile mappa |
Mappe di Azure più moduli open source per Web SDK che ne estendono le funzionalità.
Differenze significative tra i Web SDK
Di seguito sono riportate alcune delle principali differenze tra Bing Maps SDK e Azure Maps Web SDK da tenere presenti:
- Oltre a fornire un endpoint ospitato per l'accesso ad Azure Maps Web SDK, è disponibile un pacchetto npm per incorporare Web SDK nelle app, se si preferisce. Per altre informazioni, vedere Usare il controllo mappa di Mappe di Azure. Questo pacchetto include anche le definizioni TypeScript.
- Bing Maps include due rami ospitati dell'SDK, Release e Experimental. Il ramo Experimental può ricevere più aggiornamenti al giorno quando viene implementato un nuovo sviluppo. Mappe di Azure ospita solo un ramo Release, mentre le funzionalità sperimentali vengono create come moduli personalizzati nel progetto di esempi di codice di Mappe di Azure open source. Bing Maps aveva anche un ramo bloccato che veniva aggiornato con una minore frequenza, riducendo in tal modo il rischio di modifiche di rilievo dovute a una versione. In Mappe di Azure è possibile usare il modulo npm e puntare a qualsiasi versione secondaria precedente.
Suggerimento
Mappe di Azure pubblica sia le versioni minimizzate che non minimizzate dell'SDK. È sufficiente rimuovere .min
dai nomi file. La versione non minimizzata è utile per il debug di problemi, ma assicurarsi di usare quella minimizzata in produzione per sfruttare le dimensioni ridotte dei file.
Dopo aver creato un'istanza della classe Map in Mappe di Azure, il codice deve attendere l'attivazione dell'evento
ready
oload
delle mappe prima di interagire con la mappa. Questi eventi assicurano che tutte le risorse delle mappe siano caricate e siano pronte per l'accesso.Entrambe le piattaforme usano un sistema di tessere simile per le mappe di base, tuttavia le tessere in Bing Maps sono 256 pixel e sono 512 pixel in Mappe di Azure. Per ottenere la stessa visualizzazione mappa in Mappe di Azure come Bing Maps, sottrarre un livello di zoom in Mappe di Azure.
Le coordinate in Bing Maps sono identificate da
latitude, longitude
, mentre Mappe di Azure usalongitude, latitude
. Questo formato è in linea con lo standard[x, y]
seguito dalla maggior parte delle piattaforme GIS.Le forme in Azure Maps Web SDK sono basate sullo schema GeoJSON. Le classi helper vengono esposte tramite lo spazio dei nomi atlas.data. È disponibile anche la classe atlas.Shape che è possibile usare per eseguire il wrapping di oggetti GeoJSON e semplificarne l'aggiornamento e la gestione grazie al binding dei dati.
Le coordinate in Mappe di Azure sono definite come oggetti Position che possono essere specificati come una semplice matrice di numeri nel formato
[longitude, latitude]
onew atlas.data.Position(longitude, latitude)
.
Suggerimento
La classe Position include una funzione helper statica per l'importazione di coordinate in formato latitude, longitude
. La funzione atlas.data.Position.fromLatLng può spesso sostituire la funzione new Microsoft.Maps.Location
nel codice di Bing Maps.
- Anziché specificare le informazioni di stile per ogni forma aggiunta alla mappa, Mappe di Azure separa gli stili dai dati. I dati vengono archiviati in origini dati e vengono connessi a livelli di rendering usati da Mappe di Azure per il rendering dei dati. Questo approccio offre un vantaggio significativo in termini di prestazioni. Molti livelli supportano gli stili basati sui dati, eseguiti aggiungendo logica di business alle opzioni di stile del livello che modificano la modalità di rendering delle singole forme all'interno di un livello a seconda delle relative proprietà.
- Mappe di Azure offre funzioni matematiche spaziali nello spazio dei nomi
atlas.math
differenti dalle funzioni matematiche spaziali di Bing Mappe. La differenza principale è che Mappe di Azure non fornisce funzioni predefinite per operazioni binarie comeunion
eintersection
. Mappe di Azure si basa tuttavia sullo standard GeoJSON aperto e sono disponibili librerie open source. Una delle opzioni più diffuse che funziona bene con Mappe di Azure e offre funzionalità matematiche spaziali è turf js.
Per altre informazioni sulla terminologia relativa a Mappe di Azure, vedere il glossario di Mappe di Azure.
Esempi affiancati di Web SDK
L'elenco seguente è una raccolta di esempi di codice per ogni piattaforma che illustra i casi d'uso comuni per facilitare la migrazione dell'applicazione Web da Bing Maps V8 JavaScript SDK ad Azure Maps Web SDK. Gli esempi di codice relativi alle applicazioni Web sono disponibili in JavaScript. Mappe di Azure fornisce anche le definizioni TypeScript in un modulo npm. Per altre informazioni sulle definizioni TypeScript, vedere Usare il controllo mappa di Mappe di Azure.
Argomenti
- Caricare una mappa
- Localizzare la mappa
- Impostare la visualizzazione mappa
- Aggiungere una puntina
- Aggiungere una puntina personalizzata
- Aggiungere una polilinea
- Aggiungere un poligono
- Visualizzare una casella informativa
- Raggruppamento di puntine
- Aggiungere una mappa termica
- Sovrapporre un livello tessera
- Visualizzare i dati sul traffico
- Aggiungere un overlay sul terreno
- Aggiungere dati KML alla mappa
- Aggiungere strumenti di disegno
Caricare una mappa
Il caricamento di una mappa in entrambi gli SDK implica la stessa serie di passaggi;
- Aggiungere un riferimento a Map SDK.
- Aggiungere un tag
div
al corpo della pagina che funge da segnaposto per la mappa. - Creare una funzione JavaScript che viene chiamata dopo il caricamento della pagina.
- Creare un'istanza della rispettiva classe Map.
Differenze principali
- Bing Maps richiede che venga specificata una chiave di account nel riferimento allo script dell'API o come opzione di mappa. Le credenziali di autenticazione per Mappe di Azure vengono specificate come opzioni della classe di mappa come autenticazione con chiave condivisa o ID Microsoft Entra.
- Bing Maps accetta una funzione di callback nel riferimento allo script dell'API, che viene usata per chiamare una funzione di inizializzazione per caricare la mappa. Con Mappe di Azure è necessario usare l'evento OnLoad della pagina.
- Quando si usa un ID per fare riferimento all'elemento
div
in cui è eseguito il rendering della mappa, Bing Maps usa un selettore HTML (#myMap
), mentre Mappe di Azure usa solo il valore ID (myMap
). - Le coordinate in Mappe di Azure sono definite come oggetti Position che possono essere specificati come una semplice matrice di numeri nel formato
[longitude, latitude]
. - Il livello di zoom in Mappe di Azure è inferiore di un livello rispetto all'esempio di Bing Maps, a causa della differenza tra le dimensioni del sistema di tessere tra le piattaforme.
- Per impostazione predefinita, Mappe di Azure non aggiunge alcun controllo di spostamento all'area della mappa, ad esempio pulsanti di zoom e pulsanti di stile della mappa. Esistono tuttavia controlli per l'aggiunta della selezione dello stile della mappa, pulsanti di zoom, bussola o controllo rotazione e un controllo dell'inclinazione.
- In Mappe di Azure viene aggiunto un gestore eventi per monitorare l'evento
ready
dell'istanza della mappa. Questo viene generato quando la mappa termina il caricamento del contesto WebGL e di tutte le risorse necessarie. Il codice post-caricamento può essere aggiunto in questo gestore eventi.
Gli esempi seguenti illustrano il caricamento di una mappa di base centrata su New York alle coordinate (longitudine: -73.985, latitudine: 40,747) e si trova al livello di zoom 12 in Bing Maps.
Prima: Bing Mappe
Il codice seguente è un esempio di come visualizzare una mappa di Bing Maps centrata e ingrandita su una posizione.
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8" />
<meta http-equiv="x-ua-compatible" content="IE=Edge" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<script type='text/javascript'>
var map;
function initMap() {
map = new Microsoft.Maps.Map('#myMap', {
credentials: '<Your Bing Maps Key>',
center: new Microsoft.Maps.Location(40.747, -73.985),
zoom: 12
});
}
</script>
<!-- Bing Maps Script Reference -->
<script src="https://www.bing.com/api/maps/mapcontrol?callback=initMap" async defer></script>
</head>
<body>
<div id='myMap' style='position:relative;width:600px;height:400px;'></div>
</body>
</html>
Se si esegue questo codice in un browser è visualizzata una mappa simile all'immagine seguente:
Dopo: Mappe di Azure
Il codice seguente illustra come caricare una mappa con la stessa visualizzazione in Mappe di Azure insieme a un controllo stile mappa e ai pulsanti di zoom.
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8" />
<meta http-equiv="x-ua-compatible" content="IE=Edge" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<!-- Add references to the Azure Maps Map control JavaScript and CSS files. -->
<link rel="stylesheet" href="https://atlas.microsoft.com/sdk/javascript/mapcontrol/3/atlas.min.css" type="text/css" />
<script src="https://atlas.microsoft.com/sdk/javascript/mapcontrol/3/atlas.min.js"></script>
<script type='text/javascript'>
var map;
function initMap() {
map = new atlas.Map('myMap', {
center: [-73.985, 40.747], //Format coordinates as longitude, latitude.
zoom: 11, //Subtract the zoom level by one.
//Add your Azure Maps key to the map SDK. Get an Azure Maps key at https://azure.com/maps. NOTE: The primary key should be used as the key.
authOptions: {
authType: 'subscriptionKey',
subscriptionKey: '<Your Azure Maps Key>'
}
});
//Wait until the map resources are ready.
map.events.add('ready', function () {
//Add zoom and map style controls to top right of map.
map.controls.add([
new atlas.control.StyleControl(),
new atlas.control.ZoomControl()
], {
position: 'top-right'
});
});
}
</script>
</head>
<body onload="initMap()">
<div id='myMap' style='position:relative;width:600px;height:400px;'></div>
</body>
</html>
Se si esegue questo codice in un browser è visualizzata una mappa simile all'immagine seguente:
Per altre informazioni su come configurare e usare il controllo mappa di Mappe di Azure in un'app Web, vedere Usare il controllo mappa di Mappe di Azure.
Suggerimento
Mappe di Azure pubblica sia le versioni minimizzate che non minimizzate dell'SDK. Rimuovere .min
dai nomi file. La versione non minimizzata è utile per il debug di problemi, ma assicurarsi di usare quella minimizzata in produzione per sfruttare le dimensioni ridotte dei file.
Altre risorse
- Per altre informazioni sui controlli di spostamento di Mappe di Azure per la rotazione e l'inclinazione di una mappa, vedere Aggiungere controlli a una mappa.
Localizzare la mappa
Se i destinatari sono distribuiti in più paesi/aree geografiche o parlano lingue diverse, la localizzazione è importante.
Prima: Bing Mappe
Per localizzare Bing Maps, la lingua e l'area geografica vengono specificate con i parametri setLang
e UR
aggiunte al riferimento del tag <script>
nell'API. Alcune funzionalità di Bing Maps sono disponibili solo in determinati mercati, di conseguenza il mercato dell'utente viene specificato con il parametro setMkt
.
<script type="text/javascript" src="https://www.bing.com/api/maps/mapcontrol?callback=initMap&setLang={language-code}&setMkt={market}&UR={region-code}" async defer></script>
Ecco un esempio di Bing Maps con la lingua impostata su fr-FR
.
Dopo: Mappe di Azure
Mappe di Azure offre solo le opzioni per impostare la lingua e la visualizzazione locale della mappa. Non viene usato un parametro relativo al mercato per limitare le funzionalità. È possibile impostare la lingua e la visualizzane locale della mappa in due modi diversi. La prima opzione consiste nell'aggiungere queste informazioni allo spazio dei nomi atlas
globale, per cui tutte le istanze dei controlli mappa dell'app usano queste impostazioni per impostazione predefinita. Il codice seguente imposta la lingua su francese (fr-FR
) e la visualizzazione locale su "Auto"
:
atlas.setLanguage('fr-FR');
atlas.setView('auto');
La seconda opzione consiste nel passare queste informazioni nelle opzioni della mappa durante il caricamento la mappa, ad esempio:
map = new atlas.Map('myMap', {
language: 'fr-FR',
view: 'auto',
authOptions: {
authType: 'subscriptionKey',
subscriptionKey: '<Your Azure Maps Key>'
}
});
Nota
Mappe di Azure è in grado di caricare più istanze della mappa nella stessa pagina con impostazioni differenti per lingua e area geografica. È anche possibile aggiornare queste impostazioni nella mappa dopo che è stata caricata. Per un elenco delle lingue supportate in Mappe di Azure, vedere Supporto per la localizzazione in Mappe di Azure.
Di seguito è riportato un esempio di Mappe di Azure con la lingua impostata su "fr" e l'area utente impostata su fr-FR
.
Impostare la visualizzazione mappa
Le mappe dinamiche in Mappe di Azure e Bing Maps possono essere spostate a livello di codice in nuove aree geografiche chiamando le funzioni appropriate in JavaScript. L'esempio seguente illustra una mappa che visualizza immagini aeree satellitari, centrate su una posizione con coordinate (longitudine: -111.0225, latitudine: 35.0272) e modificare il livello di zoom su 15 in Bing Maps.
Nota
Bing Maps usa tessere con dimensioni di 256 pixel, mentre Mappe di Azure usa tessere più grandi, da 512 pixel. In questo modo si riduce il numero di richieste di rete necessarie a Mappe di Azure per caricare la stessa area mappa di Bing Maps. Tuttavia, a causa del funzionamento delle piramidi di tessere nei controlli mappa, per ottenere la stessa area visualizzabile come mappa di Bing Maps con le tessere più grandi di Mappe di Azure è necessario sottrarre 1 dal livello di zoom di Bing Maps quando si usa Mappe di Azure.
Prima: Bing Mappe
Il controllo mappa di Bing Maps può essere spostato a livello di codice usando la funzione setView
, che consente di specificare il centro della mappa e un livello di zoom.
map.setView({
mapTypeId: Microsoft.Maps.MapTypeId.aerial,
center: new Microsoft.Maps.Location(35.0272, -111.0225),
zoom: 15
});
Dopo: Mappe di Azure
In Mappe di Azure la posizione della mappa può essere cambiata a livello di codice usando la funzione setCamera
della mappa e lo stile della mappa può essere cambiato usando la funzione setStyle
. Le coordinate in Mappe di Azure sono espresse nel formato "longitudine, latitudine" e il valore del livello di zoom è inferiore di 1.
map.setCamera({
center: [-111.0225, 35.0272],
zoom: 14
});
map.setStyle({
style: 'satellite_road_labels'
});
Altre risorse
Aggiungere una puntina
In Mappe di Azure è possibile eseguire il rendering dei dati dei punti sulla mappa in differenti modi;
- Indicatori HTML: il rendering dei punti viene eseguito usando elementi DOM tradizionali. Gli indicatori HTML supportano il trascinamento.
- Livello simbolo: il rendering dei punti viene eseguito con un'icona e/o un testo all'interno del contesto WebGL.
- Livello bolla: il rendering dei punti viene eseguito come cerchi sulla mappa. I raggi dei cerchi possono essere ridimensionati in base alle proprietà nei dati.
Il rendering dei livelli simbolo e bolla viene eseguito nel contesto WebGL. Questi livelli possono eseguire il rendering di set di punti grandi sulla mappa. e richiedono che i dati siano archiviati in un'origine dati. È necessario aggiungere le origini dati e i livelli di rendering alla mappa dopo che è stato attivato l'evento ready
. Il rendering dei marcatori HTML viene eseguito come elementi DOM all'interno della pagina, senza l'uso di un'origine dati. Maggiore è il numero di elementi DOM della pagina, più lenta sarà la pagina. Se si esegue il rendering di più di qualche centinaio di punti su una mappa, provare a usare uno dei livelli di rendering.
Gli esempi seguenti aggiungono un marcatore alla mappa in corrispondenza (longitudine: -0,2, latitudine: 51,5) con il numero 10 sovrapposto come etichetta.
Prima: Bing Mappe
Con Bing Maps, i marcatori vengono aggiunti alla mappa usando la classe Microsoft.Maps.Pushpin
*. Le puntine vengono quindi aggiunte alla mappa usando una di due funzioni.
La prima funzione consiste nel creare un livello, inserire la puntina e quindi aggiungere il livello alla proprietà layers
della mappa.
var pushpin = new Microsoft.Maps.Pushpin(new Microsoft.Maps.Location(51.5, -0.2), {
text: '10'
});
var layer = new Microsoft.Maps.Layer();
layer.add(pushpin);
map.layers.insert(layer);
La seconda consiste nell'aggiungere la puntina usando la proprietà entities
della mappa. Questa funzione è contrassegnata come deprecata nella documentazione di Bing Maps V8, ma rimane parzialmente funzionante per gli scenari di base.
var pushpin = new Microsoft.Maps.Pushpin(new Microsoft.Maps.Location(51.5, -0.2), {
text: '10'
});
map.entities.add(pushpin);
Dopo: Mappe di Azure con indicatori HTML
In Mappe di Azure i marcatori HTML possono essere usati per visualizzare facilmente un punto sulla mappa e sono consigliati per le app semplici che devono visualizzare solo alcuni punti. Per usare un marcatore HTML, creare un'istanza della classe atlas.HtmlMarker
, impostare le opzioni relative al testo e alla posizione, quindi aggiungere il marcatore alla mappa con la funzione map.markers.add
.
//Create a HTML marker and add it to the map.
map.markers.add(new atlas.HtmlMarker({
text: '10',
position: [-0.2, 51.5]
}));
Dopo: Mappe di Azure con un livello Simbolo
Quando si usa un livello simbolo, è necessario aggiungere i dati a un'origine dati e collegare l'origine dati al livello. È anche necessario aggiungere l'origine dati e il livello alla mappa dopo che è stato attivato l'evento ready
. Per eseguire il rendering di un valore di testo univoco sopra un simbolo, è necessario archiviare le informazioni di testo come proprietà del punto dati e fare riferimento a tale proprietà nell'opzione textField
del livello. Questa procedura è più complessa rispetto all'uso degli indicatori HTML, ma offre vantaggi in termini di prestazioni.
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8" />
<meta http-equiv="x-ua-compatible" content="IE=Edge" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<!-- Add references to the Azure Maps Map control JavaScript and CSS files. -->
<link rel="stylesheet" href="https://atlas.microsoft.com/sdk/javascript/mapcontrol/3/atlas.min.css" type="text/css" />
<script src="https://atlas.microsoft.com/sdk/javascript/mapcontrol/3/atlas.min.js"></script>
<script type='text/javascript'>
var map, datasource;
function initMap() {
map = new atlas.Map('myMap', {
center: [-0.2, 51.5],
zoom: 9,
authOptions: {
authType: 'subscriptionKey',
subscriptionKey: '<Your Azure Maps Key>'
}
});
//Wait until the map resources are ready.
map.events.add('ready', function () {
//Create a data source and add it to the map.
datasource = new atlas.source.DataSource();
map.sources.add(datasource);
//Create a point feature, add a property to store a label for it, and add it to the data source.
datasource.add(new atlas.data.Feature(new atlas.data.Point([-0.2, 51.5]), {
label: '10'
}));
//Add a layer for rendering point data as symbols.
map.layers.add(new atlas.layer.SymbolLayer(datasource, null, {
textOptions: {
//Use the label property to populate the text for the symbols.
textField: ['get', 'label'],
color: 'white',
offset: [0, -1]
}
}));
});
}
</script>
</head>
<body onload="initMap()">
<div id='myMap' style='position:relative;width:600px;height:400px;'></div>
</body>
</html>
Altre risorse
- Creare un'origine dati
- Aggiungere un livello simbolo
- Aggiungere un livello bolla
- Clustering dei dati dei punti
- Aggiungere gli indicatori HTML
- Usare espressioni di stile basate sui dati
- Opzioni icona del livello simbolo
- Opzioni testo del livello simbolo
- Classe indicatore HTML
- Opzioni indicatore HTML
Aggiungere una puntina personalizzata
È possibile usare immagini personalizzate per rappresentare i punti su una mappa. L'immagine seguente viene usata negli esempi seguenti e usa un'immagine personalizzata per visualizzare un punto sulla mappa a (latitudine: 51,5, longitudine: -0,2) e sfalsa la posizione del marcatore in modo che il punto dell'icona della puntina da disegno sia allineato alla posizione corretta sulla mappa.
yellow-pushpin.png |
Prima: Bing Mappe
In Bing Maps viene creato un marcatore personalizzato passando un URL a un'immagine nelle opzioni icon
di una puntina da disegno. L'opzione anchor
si usa per allineare il punto dell'immagine della puntina con la coordinata sulla mappa. Il valore di ancoraggio in Bing Maps è relativo all'angolo in alto a sinistra dell'immagine.
var pushpin = new Microsoft.Maps.Pushpin(new Microsoft.Maps.Location(51.5, -0.2), {
icon: 'ylw-pushpin.png',
anchor: new Microsoft.Maps.Point(5, 30)
});
var layer = new Microsoft.Maps.Layer();
layer.add(pushpin);
map.layers.insert(layer);
Dopo: Mappe di Azure con indicatori HTML
Per personalizzare un indicatore HTML in Mappe di Azure, è possibile passare un elemento HTML string
o HTMLElement
nell'opzione htmlContent
dell'indicatore. In Mappe di Azure viene usata un'opzione anchor
per specificare la posizione relativa dell'indicatore rispetto alla coordinata della posizione usando uno dei nove punti di riferimento definiti: "Al centro", "In alto", "In basso", "A sinistra", "A destra", "In alto a sinistra", "In alto a destra", "In basso a sinistra", "In basso a destra". Il contenuto è ancorato e centrato in corrispondenza del "fondo" per impostazione predefinita. Per semplificare la migrazione del codice da Bing Maps, impostare l'ancoraggio su "in alto a sinistra" e quindi usare l'opzione offset
con lo stesso offset usato in Bing Maps. Gli offset in Mappe di Azure sono spostati nella direzione opposta di Bing Maps ed è quindi necessario moltiplicare i valori per -1.
Suggerimento
Aggiungere pointer-events:none
come stile nel contenuto HTML per disabilitare il comportamento di trascinamento predefinito in Microsoft Edge che comporta la visualizzazione di un'icona indesiderata.
map.markers.add(new atlas.HtmlMarker({
htmlContent: '<img src="ylw-pushpin.png" style="pointer-events: none;" />',
anchor: 'top-left',
pixelOffset: [-5, -30],
position: [-0.2, 51.5]
}));
Dopo: Mappe di Azure con un livello Simbolo
I livelli simbolo in Mappe di Azure supportano anche le immagini personalizzate, ma è prima necessario caricare l'immagine nelle risorse della mappa e assegnarle un ID univoco. Il livello simbolo può quindi fare riferimento a questo ID. È possibile scostare il simbolo affinché sia allineato al punto corretto sull'immagine usando l'opzione offset
dell'icona. In Mappe di Azure viene usata un'opzione anchor
per specificare la posizione relativa del simbolo rispetto alla coordinata della posizione usando uno dei nove punti di riferimento definiti: "Al centro", "In alto", "In basso", "A sinistra", "A destra", "In alto a sinistra", "In alto a destra", "In basso a sinistra", "In basso a destra". Il contenuto viene ancorato e impostato su "in basso" per impostazione predefinita, che corrisponde alla parte centrale inferiore del contenuto HTML. Per semplificare la migrazione del codice da Bing Maps, impostare l'ancoraggio su "in alto a sinistra" e quindi usare l'opzione offset
con lo stesso offset usato in Bing Maps. Gli offset in Mappe di Azure sono spostati nella direzione opposta di Bing Maps ed è quindi necessario moltiplicare i valori per -1.
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8" />
<meta http-equiv="x-ua-compatible" content="IE=Edge" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<!-- Add references to the Azure Maps Map control JavaScript and CSS files. -->
<link rel="stylesheet" href="https://atlas.microsoft.com/sdk/javascript/mapcontrol/3/atlas.min.css" type="text/css" />
<script src="https://atlas.microsoft.com/sdk/javascript/mapcontrol/3/atlas.min.js"></script>
<script type='text/javascript'>
var map, datasource;
function initMap() {
map = new atlas.Map('myMap', {
center: [-0.2, 51.5],
zoom: 9,
authOptions: {
authType: 'subscriptionKey',
subscriptionKey: '<Your Azure Maps Key>'
}
});
//Wait until the map resources are ready.
map.events.add('ready', function () {
//Load the custom image icon into the map resources.
map.imageSprite.add('my-yellow-pin', 'ylw-pushpin.png').then(function () {
//Create a data source and add it to the map.
datasource = new atlas.source.DataSource();
map.sources.add(datasource);
//Create a point and add it to the data source.
datasource.add(new atlas.data.Point([-0.2, 51.5]));
//Add a layer for rendering point data as symbols.
map.layers.add(new atlas.layer.SymbolLayer(datasource, null, {
iconOptions: {
//Set the image option to the id of the custom icon that was loaded into the map resources.
image: 'my-yellow-pin',
anchor: 'top-left',
offset: [-5, -30]
}
}));
});
});
}
</script>
</head>
<body onload="initMap()">
<div id='myMap' style='position:relative;width:600px;height:400px;'></div>
</body>
</html>
Suggerimento
Per creare un rendering dei punti personalizzato e avanzato, usare più livelli di rendering contemporaneamente. Se ad esempio si desidera visualizzare più puntine da disegno con la stessa icona su cerchi colorati diversi, anziché creare più immagini per ogni colore è possibile sovrapporre un livello simbolo su un livello bolla e impostare i livelli affinché facciano riferimento alla stessa origine dati. Questa procedura risulta molto più efficiente rispetto a creare e gestire numerose immagini diverse.
Altre risorse
- Creare un'origine dati
- Aggiungere un livello simbolo
- Aggiungere gli indicatori HTML
- Usare espressioni di stile basate sui dati
- Opzioni icona del livello simbolo
- Opzioni testo del livello simbolo
- Classe indicatore HTML
- Opzioni indicatore HTML
Aggiungere una polilinea
Le polilinee vengono usate per rappresentare una linea o un percorso sulla mappa. Nell'esempio seguente viene illustrata la creazione di una polilinea tratteggiata sulla mappa.
Prima: Bing Mappe
In Bing Maps la classe Polyline accetta una matrice di posizioni e un set di opzioni.
//Get the center of the map.
var center = map.getCenter();
//Create the polyline.
var polyline = new Microsoft.Maps.Polyline([
center,
new Microsoft.Maps.Location(center.latitude - 0.5, center.longitude - 1),
new Microsoft.Maps.Location(center.latitude - 0.5, center.longitude + 1)
], {
strokeColor: 'red',
strokeThickness: 4,
strokeDashArray: [3, 3]
});
//Add the polyline to the map using a layer.
var layer = new Microsoft.Maps.Layer();
layer.add(polyline);
map.layers.insert(layer);
Dopo: Mappe di Azure
In Mappe di Azure le polilinee fanno riferimento agli oggetti LineString
o MultiLineString
dei termini geospaziali più comuni. È possibile aggiungere questi oggetti a un'origine dati ed eseguirne il rendering usando un livello linea. Le opzioni relative al colore del tratto, allo spessore e alla array di trattini sono quasi identiche tra le due piattaforme.
//Get the center of the map.
var center = map.getCamera().center;
//Create a data source and add it to the map.
var datasource = new atlas.source.DataSource();
map.sources.add(datasource);
//Create a line and add it to the data source.
datasource.add(new atlas.data.LineString([
center,
[center[0] - 1, center[1] - 0.5],
[center[0] + 1, center[1] - 0.5]
]));
//Add a layer for rendering line data.
map.layers.add(new atlas.layer.LineLayer(datasource, null, {
strokeColor: 'red',
strokeWidth: 4,
strokeDashArray: [3, 3]
}));
Altre risorse
Aggiunta di un poligono
I poligoni vengono usati per rappresentare un'area sulla mappa. Mappe di Azure e Bing Maps offrono un supporto simile per i poligoni. L'esempio seguente illustra come creare un poligono che formi un triangolo basato sulla coordinata centrale della mappa.
Prima: Bing Mappe
In Bing Maps la classe Polygon accetta una matrice di coordinate o anelli di coordinate e un set di opzioni.
//Get the center of the map.
var center = map.getCenter();
//Create the polygon.
var polygon = new Microsoft.Maps.Polygon([
center,
new Microsoft.Maps.Location(center.latitude - 0.5, center.longitude - 1),
new Microsoft.Maps.Location(center.latitude - 0.5, center.longitude + 1),
center
], {
fillColor: 'rgba(0, 255, 0, 0.5)',
strokeColor: 'red',
strokeThickness: 2
});
//Add the polygon to the map using a layer.
var layer = new Microsoft.Maps.Layer();
layer.add(polygon);
map.layers.insert(layer);
Dopo: Mappe di Azure
In Mappe di Azure è possibile aggiungere gli oggetti Polygon e MultiPolygon a un'origine dati ed eseguirne il rendering sulla mappa usando i livelli. È possibile eseguire il rendering dell'area di un poligono in un livello poligono. È possibile eseguire il rendering del contorno di un poligono in un livello linea.
//Get the center of the map.
var center = map.getCamera().center;
//Create a data source and add it to the map.
datasource = new atlas.source.DataSource();
map.sources.add(datasource);
//Create a polygon and add it to the data source.
datasource.add(new atlas.data.Polygon([
center,
[center[0] - 1, center[1] - 0.5],
[center[0] + 1, center[1] - 0.5],
center
]));
//Add a polygon layer for rendering the polygon area.
map.layers.add(new atlas.layer.PolygonLayer(datasource, null, {
fillColor: 'rgba(0, 255, 0, 0.5)'
}));
//Add a line layer for rendering the polygon outline.
map.layers.add(new atlas.layer.LineLayer(datasource, null, {
strokeColor: 'red',
strokeWidth: 2
}));
Altre risorse
- Aggiungere un poligono alla mappa
- Aggiungere un cerchio alla mappa
- Opzioni del livello poligono
- Opzioni del livello linea
- Usare espressioni di stile basate sui dati
Visualizzare una casella informativa
È possibile visualizzare altre informazioni per un'entità sulla mappa come classe Microsoft.Maps.Infobox
in Bing Maps e con la classe atlas.Popup
in Mappe di Azure. L'esempio seguente aggiunge una puntina/marcatore alla mappa che, se selezionata, visualizza un infobox/popup.
Prima: Bing Mappe
In Bing Maps la casella informativa viene creata usando il costruttore Microsoft.Maps.Infobox
.
//Add a pushpin where we want to display an infobox.
var pushpin = new Microsoft.Maps.Pushpin(new Microsoft.Maps.Location(47.6, -122.33));
//Add the pushpin to the map using a layer.
var layer = new Microsoft.Maps.Layer();
layer.add(pushpin);
map.layers.insert(layer);
//Create an infobox and bind it to the map.
var infobox = new Microsoft.Maps.Infobox(new Microsoft.Maps.Location(47.6, -122.33), {
description: '<div style="padding:5px"><b>Hello World!</b></div>',
visible: false
});
infobox.setMap(map);
//Add a click event to the pushpin to open the infobox.
Microsoft.Maps.Events.addHandler(pushpin, 'click', function () {
infobox.setOptions({ visible: true });
});
Dopo: Mappe di Azure
In Mappe di Azure è possibile usare un popup per visualizzare altre informazioni per una posizione. passando un oggetto string
o HTMLElement
HTML nell'opzione content
della finestra popup. Le finestre popup possono essere visualizzate indipendentemente da qualsiasi forma e richiedono quindi che venga specificato un valore position
. Per visualizzare un popup, chiamare la funzione open
e passarla nella mappa in cui il popup dovrà essere visualizzato.
//Add a marker to the map that to display a popup for.
var marker = new atlas.HtmlMarker({
position: [-122.33, 47.6]
});
//Add the marker to the map.
map.markers.add(marker);
//Create a popup.
var popup = new atlas.Popup({
content: '<div style="padding:10px"><b>Hello World!</b></div>',
position: [-122.33, 47.6],
pixelOffset: [0, -35]
});
//Add a click event to the marker to open the popup.
map.events.add('click', marker, function () {
//Open the popup
popup.open(map);
});
Nota
Per eseguire la stessa operazione con un livello di simboli, bolle, linee o poligoni, passare il livello nel codice dell'evento maps invece di un marcatore.
Altre risorse
- Aggiungere un popup
- Finestra popup con contenuto multimediale
- Finestre popup sulle forme
- Riutilizzo di finestre popup con più puntine da disegno
- Classe Popup
- Opzioni della finestra popup
Raggruppamento di puntine
Quando si visualizzano molti punti dati sulla mappa, i punti si sovrappongono, la mappa ha un aspetto disordinato e diventa difficile da visualizzare e usare. Il clustering dei dati dei punti consente di migliorare l'esperienza utente e ottimizzare le prestazioni. Il clustering dei dati dei punti è la combinazione di dati dei punti vicini tra loro e rappresentati sulla mappa come singolo punto dati in cluster. Quando l'utente ingrandisce la mappa, i cluster si scompongono nei singoli punti dati.
L'esempio seguente carica un feed GeoJSON dei dati sismici della settimana precedente e lo aggiungono alla mappa. I cluster vengono rappresentati come cerchi ridimensionati e colorati a seconda del numero di punti in essi contenuti.
Nota
Sono disponibili numerosi algoritmi diversi per il raggruppamento delle puntine. Bing Maps usa una semplice funzione basata su griglia, mentre Mappe di Azure usa un metodo di raggruppamento basato su punti, più avanzato e visivamente accattivante.
Prima: Bing Mappe
In Bing Maps i dati GeoJSON possono essere caricati usando il modulo GeoJSON. Le puntine sono raggruppate caricando l'apposito modulo e usando il livello che contiene.
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8" />
<meta http-equiv="x-ua-compatible" content="IE=Edge" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<script type='text/javascript'>
var map;
var earthquakeFeed = 'https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_week.geojson';
function initMap() {
map = new Microsoft.Maps.Map(document.getElementById('myMap'), {
credentials: '<Your Bing Maps Key>',
center: new Microsoft.Maps.Location(20, -160),
zoom: 2
});
//Load the GeoJSON and Clustering modules.
Microsoft.Maps.loadModule(['Microsoft.Maps.GeoJson', 'Microsoft.Maps.Clustering'], function () {
//Load the GeoJSON data from a URL.
Microsoft.Maps.GeoJson.readFromUrl(earthquakeFeed, function (pins) {
//Create a ClusterLayer with options and add it to the map.
clusterLayer = new Microsoft.Maps.ClusterLayer(pins, {
clusteredPinCallback: createCustomClusteredPin,
gridSize: 100
});
map.layers.insert(clusterLayer);
});
});
}
//A function that defines how clustered pins are rendered.
function createCustomClusteredPin(cluster) {
//Get the number of pushpins in the cluster
var clusterSize = cluster.containedPushpins.length;
var radius = 20; //Default radius to 20 pixels.
var fillColor = 'lime'; //Default to lime green.
if (clusterSize >= 750) {
radius = 40; //If point_count >= 750, radius is 40 pixels.
fillColor = 'red'; //If the point_count >= 750, color is red.
} else if (clusterSize >= 100) {
radius = 30; //If point_count >= 100, radius is 30 pixels.
fillColor = 'yellow'; //If the point_count >= 100, color is yellow.
}
//Create an SVG string of a circle with the specified radius and color.
var svg = ['<svg xmlns="http://www.w3.org/2000/svg" width="', (radius * 2), '" height="', (radius * 2), '">',
'<circle cx="', radius, '" cy="', radius, '" r="', radius, '" fill="', fillColor, '"/>',
'<text x="50%" y="50%" dominant-baseline="middle" text-anchor="middle" style="font-size:12px;font-family:arial;fill:black;" >{text}</text>',
'</svg>'];
//Customize the clustered pushpin using the generated SVG and anchor on its center.
cluster.setOptions({
icon: svg.join(''),
anchor: new Microsoft.Maps.Point(radius, radius),
textOffset: new Microsoft.Maps.Point(0, radius - 8) //Subtract 8 to compensate for height of text.
});
}
</script>
<!-- Bing Maps Script Reference -->
<script src="https://www.bing.com/api/maps/mapcontrol?callback=initMap" async defer></script>
</head>
<body>
<div id='myMap' style='position:relative;width:600px;height:400px;'></div>
</body>
</html>
Dopo: Mappe di Azure
In Mappe di Azure i dati vengono aggiunti e gestiti da un'origine dati. I livelli si connettono alle origini dati ed eseguono il rendering dei dati in essi contenuti. La classe DataSource
in Mappe di Azure fornisce numerose opzioni di clustering.
cluster
: indica all'origine dati di raggruppare i dati dei punti.clusterRadius
: raggio in pixel in base a cui raggruppare i punti.clusterMaxZoom
: livello massimo di zoom in cui si verifica il raggruppamento. Qualsiasi altro risultato dello zoom comporta il rendering di tutti i punti come simboli.clusterProperties
: definisce le proprietà personalizzate che vengono calcolate usando le espressioni in tutti i punti all'interno di ogni cluster e aggiunte alle proprietà di ogni punto del cluster.
Quando il clustering è abilitato, l'origine dati invia i punti dati in cluster e non in cluster ai livelli per il rendering. L'origine dati è in grado di raggruppare centinaia di migliaia di punti dati. Un punto dati in cluster presenta le proprietà seguenti:
Nome proprietà | Type | Descrizione |
---|---|---|
cluster |
boolean | Indica se la funzionalità rappresenta un cluster. |
cluster_id |
string | È possibile usare un ID unico per il raggruppamento con le classi DataSource getClusterExpansionZoom , getClusterChildren e le funzioni getClusterLeaves . |
point_count |
number | Numero di punti contenuti nel cluster. |
point_count_abbreviated |
string | Stringa che abbrevia il valore point_count se necessario. Ad esempio, 4.000 diventa 4K. |
La classe DataSource
dispone della funzione helper seguente per accedere a informazioni aggiuntive su un cluster tramite cluster_id
.
Funzione | Tipo restituito | Descrizione |
---|---|---|
getClusterChildren(clusterId: number) |
Promise<Feature<Geometry, any> | Shape> |
Recupera gli elementi figlio del cluster specificato al livello di zoom successivo. Questi elementi figlio possono essere costituiti da una combinazione di forme e sotto-raggruppamenti. I sottoraggruppamenti sono funzionalità con proprietà che corrispondono alle proprietà del raggruppamento. |
getClusterExpansionZoom(clusterId: number) |
Promise<number> |
Calcola un livello di zoom in corrispondenza del quale il raggruppamento inizia a espandersi o a scomporsi. |
getClusterLeaves(clusterId: number, limit: number, offset: number) |
Promise<Feature<Geometry, any> | Shape> |
Recupera tutti i punti in un cluster. Impostare limit per restituire un sottoinsieme di punti e usare offset per spostarsi attraverso i punti. |
Quando si esegue il rendering dei dati in cluster sulla mappa, è in genere più facile usare due o più livelli. L'esempio seguente usa tre livelli, un livello bolla per disegnare i cerchi colorati dimensionati in base alle dimensioni dei cluster, un livello simbolo per il rendering delle dimensioni del cluster come testo e un secondo livello simbolo per il rendering dei punti non in cluster. Per altre informazioni sul rendering dei dati in cluster in Mappe di Azure, vedere Clustering di punti dati in Web SDK.
I dati GeoJSON possono essere importati direttamente in Mappe di Azure usando la funzione importDataFromUrl
sulla classe DataSource
.
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8" />
<meta http-equiv="x-ua-compatible" content="IE=Edge" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<!-- Add references to the Azure Maps Map control JavaScript and CSS files. -->
<link rel="stylesheet" href="https://atlas.microsoft.com/sdk/javascript/mapcontrol/3/atlas.min.css" type="text/css" />
<script src="https://atlas.microsoft.com/sdk/javascript/mapcontrol/3/atlas.min.js"></script>
<script type='text/javascript'>
var map, datasource;
var earthquakeFeed = 'https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_week.geojson';
function initMap() {
//Initialize a map instance.
map = new atlas.Map('myMap', {
center: [-160, 20],
zoom: 1,
//Add your Azure Maps key to the map SDK. Get an Azure Maps key at https://azure.com/maps. NOTE: The primary key should be used as the key.
authOptions: {
authType: 'subscriptionKey',
subscriptionKey: '<Your Azure Maps Key>'
}
});
//Wait until the map resources are ready.
map.events.add('ready', function () {
//Create a data source and add it to the map.
datasource = new atlas.source.DataSource(null, {
//Tell the data source to cluster point data.
cluster: true
});
map.sources.add(datasource);
//Create layers for rendering clusters, their counts and unclustered points and add the layers to the map.
map.layers.add([
//Create a bubble layer for rendering clustered data points.
new atlas.layer.BubbleLayer(datasource, null, {
//Scale the size of the clustered bubble based on the number of points inthe cluster.
radius: [
'step',
['get', 'point_count'],
20, //Default of 20 pixel radius.
100, 30, //If point_count >= 100, radius is 30 pixels.
750, 40 //If point_count >= 750, radius is 40 pixels.
],
//Change the color of the cluster based on the value on the point_cluster property of the cluster.
color: [
'step',
['get', 'point_count'],
'lime', //Default to lime green.
100, 'yellow', //If the point_count >= 100, color is yellow.
750, 'red' //If the point_count >= 750, color is red.
],
strokeWidth: 0,
filter: ['has', 'point_count'] //Only rendered data points that have a point_count property, which clusters do.
}),
//Create a symbol layer to render the count of locations in a cluster.
new atlas.layer.SymbolLayer(datasource, null, {
iconOptions: {
image: 'none' //Hide the icon image.
},
textOptions: {
textField: ['get', 'point_count_abbreviated'],
offset: [0, 0.4]
}
}),
//Create a layer to render the individual locations.
new atlas.layer.SymbolLayer(datasource, null, {
filter: ['!', ['has', 'point_count']] //Filter out clustered points from this layer.
})
]);
//Retrieve a GeoJSON data set and add it to the data source.
datasource.importDataFromUrl(earthquakeFeed);
});
}
</script>
</head>
<body onload="initMap()">
<div id='myMap' style='position:relative;width:600px;height:400px;'></div>
</body>
</html>
Altre risorse
- Aggiungere un livello simbolo
- Aggiungere un livello bolla
- Clustering dei dati dei punti
- Usare espressioni di stile basate sui dati
Aggiungere una mappa termica
Le mappe termiche, note anche come mappe di densità dei punti, sono un tipo di visualizzazione dei dati utilizzate per rappresentare la densità dei dati tramite una gamma di colori. Vengono spesso usate per visualizzare le "aree sensibili" dei dati su una mappa e sono un ottimo modo per eseguire il rendering di set di dati di punti di grandi dimensioni.
Nell'esempio seguente viene caricato un feed GeoJSON di tutti i terremoti dell'ultimo mese dagli USGS, di cui è stato eseguito il rendering come mappa termica.
Prima: Bing Mappe
Per creare una mappa termica in Bing Maps, caricare l'apposito modulo. Allo stesso modo, viene caricato il modulo GeoJSON per aggiungere il supporto di dati GeoJSON.
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8" />
<meta http-equiv="x-ua-compatible" content="IE=Edge" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<script type='text/javascript'>
var map;
var earthquakeFeed = 'https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_month.geojson';
function initMap() {
map = new Microsoft.Maps.Map(document.getElementById('myMap'), {
credentials: '<Your Bing Maps Key>',
center: new Microsoft.Maps.Location(20, -160),
zoom: 2,
mapTypeId: Microsoft.Maps.MapTypeId.aerial
});
//Load the GeoJSON and HeatMap modules.
Microsoft.Maps.loadModule(['Microsoft.Maps.GeoJson', 'Microsoft.Maps.HeatMap'], function () {
//Load the GeoJSON data from a URL.
Microsoft.Maps.GeoJson.readFromUrl(earthquakeFeed, function (shapes) {
//Create a heat map and add it to the map.
var heatMap = new Microsoft.Maps.HeatMapLayer(shapes, {
opacity: 0.65,
radius: 10
});
map.layers.insert(heatMap);
});
});
}
</script>
<!-- Bing Maps Script Reference -->
<script src="https://www.bing.com/api/maps/mapcontrol?callback=initMap" async defer></script>
</head>
<body>
<div id='myMap' style='position:relative;width:600px;height:400px;'></div>
</body>
</html>
Dopo: Mappe di Azure
In Mappe di Azure caricare i dati GeoJSON in un'origine dati e connettere l'origine dati a un livello mappa termica. I dati GeoJSON possono essere importati direttamente in Mappe di Azure usando la funzione importDataFromUrl
sulla classe DataSource
.
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8" />
<meta http-equiv="x-ua-compatible" content="IE=Edge" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<!-- Add references to the Azure Maps Map control JavaScript and CSS files. -->
<link rel="stylesheet" href="https://atlas.microsoft.com/sdk/javascript/mapcontrol/3/atlas.min.css" type="text/css" />
<script src="https://atlas.microsoft.com/sdk/javascript/mapcontrol/3/atlas.min.js"></script>
<script type='text/javascript'>
var map;
var earthquakeFeed = 'https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_month.geojson';
function initMap() {
//Initialize a map instance.
map = new atlas.Map('myMap', {
center: [-160, 20],
zoom: 1,
style: 'satellite_road_labels',
//Add your Azure Maps key to the map SDK. Get an Azure Maps key at https://azure.com/maps. NOTE: The primary key should be used as the key.
authOptions: {
authType: 'subscriptionKey',
subscriptionKey: '<Your Azure Maps Key>'
}
});
//Wait until the map resources are ready.
map.events.add('ready', function () {
//Create a data source and add it to the map.
datasource = new atlas.source.DataSource();
map.sources.add(datasource);
//Load the earthquake data.
datasource.importDataFromUrl(earthquakeFeed);
//Create a layer to render the data points as a heat map.
map.layers.add(new atlas.layer.HeatMapLayer(datasource, null, {
opacity: 0.65,
radius: 10
}));
});
}
</script>
</head>
<body onload="initMap()">
<div id='myMap' style='position:relative;width:600px;height:400px;'></div>
</body>
</html>
Altre risorse
- Aggiungere un livello mappa termica
- Classe del livello mappa termica
- Opzioni del livello mappa termica
- Usare espressioni di stile basate sui dati
Sovrapporre un livello tessera
consentono di sovrapporre immagini di grandi dimensioni che sono state scomposte in immagini a tessere più piccole allineate al sistema a tessere delle mappe. Si tratta di una soluzione comune per sovrapporre immagini di grandi dimensioni o set di dati grandi.
L'esempio seguente mostra la sovrapposizione di un livello di tessere di radar meteo dall'Iowa Environmental Mesonet dell'Iowa State University, che usa lo schema di denominazione X, Y, Zoom.
Prima: Bing Mappe
In Bing Maps è possibile creare livelli di tessere usando la classe Microsoft.Maps.TileLayer
.
var weatherTileLayer = new Microsoft.Maps.TileLayer({
mercator: new Microsoft.Maps.TileSource({
uriConstructor: 'https://mesonet.agron.iastate.edu/cache/tile.py/1.0.0/nexrad-n0q-900913/{zoom}/{x}/{y}.png'
})
});
map.layers.insert(weatherTileLayer);
Dopo: Mappe di Azure
In Mappe di Azure è possibile aggiungere un livello tessera alla mappa con la stessa procedura usata per qualsiasi altro livello. Viene usato un URL formattato con i segnaposto x, y e zoom. {x}
, {y}
, {z}
indicano al livello dove accedere alle tessere. I livelli tessera di Mappe di Azure supportano anche i segnaposto {quadkey}
, {bbox-epsg-3857}
e {subdomain}
.
Suggerimento
In Mappe di Azure è possibile eseguire il rendering dei livelli sotto altri livelli, inclusi i livelli mappa di base. Spesso è consigliabile eseguire il rendering dei livelli tessera sotto le etichette della mappa in modo che siano facili da leggere. La funzione map.layers.add
accetta un secondo parametro che corrisponde all'ID del secondo livello sotto il quale inserire il nuovo livello. Per inserire un livello di tessere sotto le etichette della mappa, è possibile usare il codice seguente:
map.layers.add(myTileLayer, "labels");
//Create a tile layer and add it to the map below the label layer.
map.layers.add(new atlas.layer.TileLayer({
tileUrl: 'https://mesonet.agron.iastate.edu/cache/tile.py/1.0.0/nexrad-n0q-900913/{z}/{x}/{y}.png',
opacity: 0.8,
tileSize: 256
}), 'labels');
Suggerimento
È possibile acquisire le richieste delle tessere tramite l'opzione transformRequest
della mappa. Questo consentirà di modificare o aggiungere intestazioni alla richiesta, se necessario.
Altre risorse
Visualizzare i dati sul traffico
I dati sul traffico possono essere sovrapposti sia nelle mappe di Bing che in quelle di Azure.
Prima: Bing Mappe
In Bing Maps i dati sul traffico possono essere sovrapposti alla mappa usando il modulo corrispondente.
Microsoft.Maps.loadModule('Microsoft.Maps.Traffic', function () {
var manager = new Microsoft.Maps.Traffic.TrafficManager(map);
manager.show();
});
Dopo: Mappe di Azure
Mappe di Azure offre numerose opzioni per la visualizzazione del traffico. Gli eventi del traffico, come strade chiuse e incidenti stradali, possono essere visualizzati come icone sulla mappa. Il flusso del traffico e le strade con codifica a colori possono essere sovrapposti sulla mappa e i colori possono essere modificati in base al limite di velocità previsto, al normale ritardo previsto o al ritardo assoluto. In Mappe di Azure i dati sugli incidenti vengono aggiornati ogni minuti e i dati sul flusso ogni due minuti.
map.setTraffic({
incidents: true,
flow: 'relative'
});
Se si seleziona una delle icone del traffico in Mappe di Azure, vengono visualizzate altre informazioni in un popup.
Altre risorse
Aggiungere un overlay sul terreno
Sia Mappe di Azure che Bing Maps supportano la sovrapposizione di immagini con riferimenti geografici sulla mappa, per consentirne lo spostamento e il dimensionamento durante le operazioni di panoramica e zoom sulla mappa. In Bing Maps sono note come overlay sul terreno mentre in Mappe di Azure sono definite livelli immagine. I livelli Immagine sono un'ottima soluzione per la creazione di planimetrie, la sovrapposizione di vecchie mappe o delle immagini da un drone.
Prima: Bing Mappe
Per creare una sovrimpressione a terra in Bing Maps, è necessario specificare l'URL dell'immagine di sovrapposizione e un rettangolo di selezione che associa l'immagine alla mappa. Questo esempio mostra la sovrapposizione di un'immagine mappa di Newark New Jersey del 1922 sulla mappa.
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8" />
<meta http-equiv="x-ua-compatible" content="IE=Edge" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<script type='text/javascript'>
var map;
function initMap() {
map = new Microsoft.Maps.Map(document.getElementById('myMap'), {
credentials: '<Your Bing Maps Key>',
center: new Microsoft.Maps.Location(40.740, -74.18),
zoom: 12
});
var overlay = new Microsoft.Maps.GroundOverlay({
//Create a LocationRect from the edges of the bounding box; north, west, south, east.
bounds: Microsoft.Maps.LocationRect.fromEdges(40.773941, -74.22655, 40.712216, -74.12544),
imageUrl: 'newark_nj_1922.jpg'
});
map.layers.insert(overlay);
}
</script>
<!-- Bing Maps Script Reference -->
<script src="https://www.bing.com/api/maps/mapcontrol?callback=initMap" async defer></script>
</head>
<body>
<div id='myMap' style='position:relative;width:600px;height:400px;'></div>
</body>
</html>
Se si esegue questo codice in un browser è visualizzata una mappa simile all'immagine seguente:
Dopo: Mappe di Azure
In Mappe di Azure è possibile sovrapporre le immagini con riferimenti geografici usando la classe atlas.layer.ImageLayer
. Questa classe richiede l'URL di un'immagine e un set di coordinate per i quattro angoli dell'immagine. L'immagine deve essere ospitata nello stesso dominio oppure è necessario avere abilitato i criteri di condivisione tra le origini (CORS).
Suggerimento
Se per ogni angolo dell'immagine sono disponibili solo le informazioni relative a nord, sud, est, ovest e rotazione invece delle coordinate, è possibile usare la funzione statica atlas.layer.ImageLayer.getCoordinatesFromEdges.
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8" />
<meta http-equiv="x-ua-compatible" content="IE=Edge" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<!-- Add references to the Azure Maps Map control JavaScript and CSS files. -->
<link rel="stylesheet" href="https://atlas.microsoft.com/sdk/javascript/mapcontrol/3/atlas.min.css" type="text/css" />
<script src="https://atlas.microsoft.com/sdk/javascript/mapcontrol/3/atlas.min.js"></script>
<script type='text/javascript'>
var map;
function initMap() {
//Initialize a map instance.
map = new atlas.Map('myMap', {
center: [-74.18, 40.740],
zoom: 12,
//Add your Azure Maps key to the map SDK. Get an Azure Maps key at https://azure.com/maps. NOTE: The primary key should be used as the key.
authOptions: {
authType: 'subscriptionKey',
subscriptionKey: '<Your Azure Maps Key>'
}
});
//Wait until the map resources are ready.
map.events.add('ready', function () {
//Create an image layer and add it to the map.
map.layers.add(new atlas.layer.ImageLayer({
url: 'newark_nj_1922.jpg',
coordinates: [
[-74.22655, 40.773941], //Top Left Corner
[-74.12544, 40.773941], //Top Right Corner
[-74.12544, 40.712216], //Bottom Right Corner
[-74.22655, 40.712216] //Bottom Left Corner
]
}));
});
}
</script>
</head>
<body onload="initMap()">
<div id='myMap' style='position:relative;width:600px;height:400px;'></div>
</body>
</html>
Altre risorse
Aggiungere dati KML alla mappa
Sia Mappe di Azure che Bing Maps consentono di importare e visualizzare dati KML, KMZ, GeoRSS, GeoJSON e Well-Known Text (WKT) sulla mappa. Mappe di Azure supporta anche GPX, GML, file CSV spaziali, Web-Mapping Services (WMS), Web-Mapping Tile Services (WMTS) e Web Feature Services (WFS).
Prima: Bing Mappe
Se si esegue questo codice in un browser è visualizzata una mappa simile all'immagine seguente:
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8" />
<meta http-equiv="x-ua-compatible" content="IE=Edge" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<script type='text/javascript'>
var map;
function initMap() {
map = new Microsoft.Maps.Map('#myMap', {
credentials: '<Your Bing Maps Key>',
center: new Microsoft.Maps.Location(40.747, -73.985),
zoom: 12
});
Microsoft.Maps.loadModule('Microsoft.Maps.GeoXml', function () {
var callback = function (dataset) {
if (dataset.shapes) {
var l = new Microsoft.Maps.Layer();
l.add(dataset.shapes);
map.layers.insert(l);
}
if (dataset.layers) {
for (var i = 0, len = dataset.layers.length; i < len; i++) {
map.layers.insert(dataset.layers[i]);
}
}
};
Microsoft.Maps.GeoXml.readFromUrl('myKMLFile.kml', { error: function (msg) { alert(msg); } }, callback);
});
}
</script>
<!-- Bing Maps Script Reference -->
<script src="https://www.bing.com/api/maps/mapcontrol?callback=initMap" async defer></script>
</head>
<body>
<div id='myMap' style='position:relative;width:600px;height:400px;'></div>
</body>
</html>
Dopo: Mappe di Azure
In Mappe di Azure, GeoJSON è il formato dati principale usato nel Web SDK, altri formati di dati spaziali possono essere facilmente integrati usando il modulo di IO spaziale. Questo modulo include funzioni sia per la lettura che per la scrittura di dati spaziali, oltre a un semplice livello dati che consente di eseguire facilmente il rendering dei dati da uno di questi formati di dati spaziali. Per leggere i dati in un file di dati spaziali, passare un URL o dati non elaborati come stringa o BLOB nella funzione atlas.io.read
. Vengono restituiti tutti i dati analizzati dal file che è possibile aggiungere alla mappa. Il formato KML è un po' più complesso rispetto alla maggior parte dei dati spaziali, perché include molte più informazioni sullo stile. La classe SpatialDataLayer
supporta il rendering della maggior parte di questi stili, tuttavia le immagini delle icone devono essere caricate nella mappa prima di caricare i dati delle funzionalità e le sovrapposizioni di base devono essere aggiunte come livelli alla mappa separatamente. Quando si caricano i dati tramite un URL, questo deve essere ospitato in un endpoint abilitato per CORs o è necessario passare un servizio proxy come opzione nella funzione read.
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8" />
<meta http-equiv="x-ua-compatible" content="IE=Edge" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<!-- Add references to the Azure Maps Map control JavaScript and CSS files. -->
<link rel="stylesheet" href="https://atlas.microsoft.com/sdk/javascript/mapcontrol/3/atlas.min.css" type="text/css" />
<script src="https://atlas.microsoft.com/sdk/javascript/mapcontrol/3/atlas.min.js"></script>
<!-- Add reference to the Azure Maps Spatial IO module. -->
<script src="https://atlas.microsoft.com/sdk/javascript/spatial/0/atlas-spatial.js"></script>
<script type='text/javascript'>
var map, datasource, layer;
function initMap() {
//Initialize a map instance.
map = new atlas.Map('myMap', {
view: 'Auto',
//Add your Azure Maps key to the map SDK. Get an Azure Maps key at https://azure.com/maps. NOTE: The primary key should be used as the key.
authOptions: {
authType: 'subscriptionKey',
subscriptionKey: '<Your Azure Maps Key>'
}
});
//Wait until the map resources are ready.
map.events.add('ready', function () {
//Create a data source and add it to the map.
datasource = new atlas.source.DataSource();
map.sources.add(datasource);
//Add a simple data layer for rendering the data.
layer = new atlas.layer.SimpleDataLayer(datasource);
map.layers.add(layer);
//Read a KML file from a URL or pass in a raw KML string.
atlas.io.read('myKMLFile.kml').then(async r => {
if (r) {
//Check to see if there are any icons in the data set that need to be loaded into the map resources.
if (r.icons) {
//For each icon image, create a promise to add it to the map, then run the promises in parrallel.
var imagePromises = [];
//The keys are the names of each icon image.
var keys = Object.keys(r.icons);
if (keys.length !== 0) {
keys.forEach(function (key) {
imagePromises.push(map.imageSprite.add(key, r.icons[key]));
});
await Promise.all(imagePromises);
}
}
//Load all features.
if (r.features && r.features.length > 0) {
datasource.add(r.features);
}
//Load all ground overlays.
if (r.groundOverlays && r.groundOverlays.length > 0) {
map.layers.add(r.groundOverlays);
}
//If bounding box information is known for data, set the map view to it.
if (r.bbox) {
map.setCamera({ bounds: r.bbox, padding: 50 });
}
}
});
});
}
</script>
</head>
<body onload="initMap()">
<div id='myMap' style='position:relative;width:600px;height:400px;'></div>
</body>
</html>
Altre risorse
Aggiungere strumenti di disegno
Sia Bing Maps che Mappe di Azure includono un modulo che consente di disegnare e modificare forme sulla mappa tramite il mouse o un altri dispositivi di input. Entrambe le piattaforme supportano il disegno di puntine, linee e poligoni. Mappe di Azure offre anche opzioni per il disegno di cerchi e rettangoli.
Prima: Bing Mappe
In Bing Maps il modulo DrawingTools
viene caricato usando la funzione Microsoft.Maps.loadModule
. Una volta caricato, è possibile creare un'istanza della classe DrawingTools e chiamare la funzione showDrawingManager
per aggiungere una barra degli strumenti alla mappa.
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8" />
<meta http-equiv="x-ua-compatible" content="IE=Edge" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<script type='text/javascript'>
var map, drawingManager;
function initMap() {
map = new Microsoft.Maps.Map('#myMap', {
credentials: '<Your Bing Maps Key>'
});
//Load the DrawingTools module
Microsoft.Maps.loadModule('Microsoft.Maps.DrawingTools', function () {
//Create an instance of the DrawingTools class and bind it to the map.
var tools = new Microsoft.Maps.DrawingTools(map);
//Show the drawing toolbar and enable editting on the map.
tools.showDrawingManager(function (manager) {
//Store a reference to the drawing manager as it will be useful later.
drawingManager = manager;
});
});
}
</script>
<!-- Bing Maps Script Reference -->
<script src="https://www.bing.com/api/maps/mapcontrol?callback=initMap" async defer></script>
</head>
<body>
<div id='myMap' style='position:relative;width:600px;height:400px;'></div>
</body>
</html>
Dopo: Mappe di Azure
In Mappe di Azure il modulo di strumenti di disegno deve essere caricato caricando i file JavaScript e CSS a cui è necessario fare riferimento nell'app. Una volta caricata la mappa, è possibile creare un'istanza della classe DrawingManager
e un'istanza di DrawingToolbar
collegata.
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8" />
<meta http-equiv="x-ua-compatible" content="IE=Edge" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<!-- Add references to the Azure Maps Map control JavaScript and CSS files. -->
<link rel="stylesheet" href="https://atlas.microsoft.com/sdk/javascript/mapcontrol/3/atlas.min.css" type="text/css" />
<script src="https://atlas.microsoft.com/sdk/javascript/mapcontrol/3/atlas.min.js"></script>
<!-- Add references to the Azure Maps Map Drawing Tools JavaScript and CSS files. -->
<link rel="stylesheet" href="https://atlas.microsoft.com/sdk/javascript/drawing/0/atlas-drawing.min.css" type="text/css" />
<script src="https://atlas.microsoft.com/sdk/javascript/drawing/0/atlas-drawing.min.js"></script>
<script type='text/javascript'>
var map, drawingManager;
function initMap() {
//Initialize a map instance.
map = new atlas.Map('myMap', {
view: 'Auto',
//Add your Azure Maps key to the map SDK. Get an Azure Maps key at https://azure.com/maps. NOTE: The primary key should be used as the key.
authOptions: {
authType: 'subscriptionKey',
subscriptionKey: '<Your Azure Maps Key>'
}
});
//Wait until the map resources are ready.
map.events.add('ready', function () {
//Create an instance of the drawing manager and display the drawing toolbar.
drawingManager = new atlas.drawing.DrawingManager(map, {
toolbar: new atlas.control.DrawingToolbar({ position: 'top-left' })
});
});
}
</script>
</head>
<body onload="initMap()">
<div id="myMap" style="position:relative;width:600px;height:400px;"></div>
</body>
</html>
Suggerimento
Nei livelli di Mappe di Azure gli strumenti di disegno offrono molte possibilità per il disegno di forme. Ad esempio, quando si disegna un poligono, l'utente può fare clic per aggiungere ogni punto oppure tenere premuto il pulsante del mouse e trascinarlo per disegnare un tragitto. Questa funzionalità può essere modificata con l'opzione interactionType
di DrawingManager
.
Altre risorse
Risorse aggiuntive
Esaminare i moduli open source di Azure Maps Web SDK. Questi moduli offrono più funzionalità e sono completamente personalizzabili.
Esaminare gli esempi di codice correlati alla migrazione di altre funzionalità di Bing Maps:
Visualizzazioni di dati
Servizi
Altre informazioni su Azure Maps Web SDK.
Passaggi successivi
Altre informazioni sulla migrazione da Bing Maps a Mappe di Azure.