Aggiungere un livello immagine a una mappa (Android SDK)
Nota
Ritiro di Android SDK di Mappe di Azure
Azure Maps Native SDK per Android è ora deprecato e verrà ritirato il 3/31/25. Per evitare interruzioni del servizio, eseguire la migrazione al Web SDK di Mappe di Azure entro il 31/3/25. Per altre informazioni, vedere La guida alla migrazione di Android SDK di Mappe di Azure.
Questo articolo illustra come sovrapporre un'immagine a un set di coordinate fisso. Di seguito sono riportati alcuni esempi di tipi di immagini diverse che possono essere sovrapposti alle mappe:
- Immagini acquisite dai droni
- Planimetrie di compilazione
- Immagini di mappe cronologiche o specializzate di altro tipo
- Progetti di siti di processo
Suggerimento
Un livello immagine costituisce un modo semplice per sovrapporre un'immagine a una mappa. Si noti che le immagini di grandi dimensioni possono consumare molta memoria e causare potenzialmente problemi di prestazioni. In questo caso, si può prendere in considerazione la possibilità di suddividere l'immagine in riquadri e caricarli nella mappa come livello di riquadro.
Aggiungere un livello per le immagini
Il codice seguente sovrappone alla mappa l'immagine di una cartina di Newark, New Jersey, del 1922. Questa immagine viene aggiunta alla cartella drawable
del progetto. Un livello immagine viene creato impostando l'immagine e le coordinate dei quattro angoli nel formato [Top Left Corner, Top Right Corner, Bottom Right Corner, Bottom Left Corner]
. L'aggiunta di livelli di immagine al di sotto del livello label
è spesso auspicabile.
//Create an image layer.
ImageLayer layer = new ImageLayer(
imageCoordinates(
new Position[] {
new Position(-74.22655, 40.773941), //Top Left Corner
new Position(-74.12544, 40.773941), //Top Right Corner
new Position(-74.12544, 40.712216), //Bottom Right Corner
new Position(-74.22655, 40.712216) //Bottom Left Corner
}
),
setImage(R.drawable.newark_nj_1922)
);
//Add the image layer to the map, below the label layer.
map.layers.add(layer, "labels");
//Create an image layer.
val layer = ImageLayer(
imageCoordinates(
arrayOf<Position>(
Position(-74.22655, 40.773941), //Top Left Corner
Position(-74.12544, 40.773941), //Top Right Corner
Position(-74.12544, 40.712216), //Bottom Right Corner
Position(-74.22655, 40.712216) //Bottom Left Corner
)
),
setImage(R.drawable.newark_nj_1922)
)
//Add the image layer to the map, below the label layer.
map.layers.add(layer, "labels")
In alternativa, è possibile specificare un URL di un'immagine ospitata online. Tuttavia, se lo scenario lo consente, è consigliabile aggiungere l'immagine alla cartella dei progetti drawable
. In tal modo, si carica più velocemente, considerato che è disponibile localmente e non deve essere scaricata.
//Create an image layer.
ImageLayer layer = new ImageLayer(
imageCoordinates(
new Position[] {
new Position(-74.22655, 40.773941), //Top Left Corner
new Position(-74.12544, 40.773941), //Top Right Corner
new Position(-74.12544, 40.712216), //Bottom Right Corner
new Position(-74.22655, 40.712216) //Bottom Left Corner
}
),
setUrl("https://www.lib.utexas.edu/maps/historical/newark_nj_1922.jpg")
);
//Add the image layer to the map, below the label layer.
map.layers.add(layer, "labels");
//Create an image layer.
val layer = ImageLayer(
imageCoordinates(
arrayOf<Position>(
Position(-74.22655, 40.773941), //Top Left Corner
Position(-74.12544, 40.773941), //Top Right Corner
Position(-74.12544, 40.712216), //Bottom Right Corner
Position(-74.22655, 40.712216) //Bottom Left Corner
)
),
setUrl("https://www.lib.utexas.edu/maps/historical/newark_nj_1922.jpg")
)
//Add the image layer to the map, below the label layer.
map.layers.add(layer, "labels")
Lo screenshot seguente mostra una mappa di Newark, New Jersey, del 1922 sovrapposta a un livello immagine.
Importare un file KML come sovrimpressione di terra
Questo campione mostra come aggiungere informazioni KML sulla sovrimpressione di terra come livello immagine nella mappa. Le sovrimpressioni di terra KML forniscono le coordinate nord, sud, est e ovest e una rotazione in senso antiorario. Tuttavia, il livello immagine prevede coordinate per ogni angolo dell'immagine. La sovrimpressione di terra KML in questo campione è per la cattedrale di Chartres e deriva da Wikimedia.
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
<GroundOverlay>
<name>Map of Chartres cathedral</name>
<Icon>
<href>https://upload.wikimedia.org/wikipedia/commons/thumb/e/e3/Chartres.svg/1600px-Chartres.svg.png</href>
<viewBoundScale>0.75</viewBoundScale>
</Icon>
<LatLonBox>
<north>48.44820923628113</north>
<south>48.44737203258976</south>
<east>1.488833825534365</east>
<west>1.486788581643038</west>
<rotation>46.44067597839695</rotation>
</LatLonBox>
</GroundOverlay>
</kml>
Il codice usa il metodo getCoordinatesFromEdges
statico della classe ImageLayer
. Tale metodo calcola i quattro angoli dell'immagine basandosi sulle informazioni relative a nord, sud, est, ovest e alla rotazione della sovrimpressione di terra KML.
//Calculate the corner coordinates of the ground overlay.
Position[] corners = ImageLayer.getCoordinatesFromEdges(
//North, south, east, west
48.44820923628113, 48.44737203258976, 1.488833825534365, 1.486788581643038,
//KML rotations are counter-clockwise, subtract from 360 to make them clockwise.
360 - 46.44067597839695
);
//Create an image layer.
ImageLayer layer = new ImageLayer(
imageCoordinates(corners),
setUrl("https://upload.wikimedia.org/wikipedia/commons/thumb/e/e3/Chartres.svg/1600px-Chartres.svg.png")
);
//Add the image layer to the map, below the label layer.
map.layers.add(layer, "labels");
//Calculate the corner coordinates of the ground overlay.
val corners: Array<Position> =
ImageLayer.getCoordinatesFromEdges( //North, south, east, west
48.44820923628113,
48.44737203258976,
1.488833825534365,
1.486788581643038, //KML rotations are counter-clockwise, subtract from 360 to make them clockwise.
360 - 46.44067597839695
)
//Create an image layer.
val layer = ImageLayer(
imageCoordinates(corners),
setUrl("https://upload.wikimedia.org/wikipedia/commons/thumb/e/e3/Chartres.svg/1600px-Chartres.svg.png")
)
//Add the image layer to the map, below the label layer.
map.layers.add(layer, "labels")
Lo screenshot seguente mostra una mappa con una sovrimpressione di terra KML sovrapposta tramite un livello immagine.
Suggerimento
Usare i metodi getPixels
e getPositions
della classe del livello immagine per eseguire la conversione tra le coordinate geografiche del livello immagine posizionato e le coordinate dei pixel dell'immagine locale.
Passaggi successivi
Per altre informazioni sui modi per sovrapporre le immagini a una mappa, vedere l'articolo seguente.