Přidání vrstvy obrázku do mapy (Android SDK)

Poznámka:

Vyřazení sady Azure Mapy Android SDK

Sada Azure Mapy Native SDK pro Android je teď zastaralá a bude vyřazena 31. 31. 25. Pokud se chcete vyhnout přerušení služeb, proveďte migraci do sady Azure Mapy Web SDK do 31. 31. 25. Další informace najdete v průvodci migrací sady Azure Mapy Android SDK.

V tomto článku se dozvíte, jak překrýt obrázek pevným souborem souřadnic. Tady je několik příkladů různých typů obrázků, které se dají překryty na mapách:

  • Obrázky zachycené z dronů
  • Stavební podlahové plány
  • Historické nebo jiné specializované obrázky map
  • Podrobné plány webů úloh

Tip

Vrstva obrázku je snadný způsob, jak překrýt obrázek na mapě. Všimněte si, že velké image můžou spotřebovávat velké množství paměti a potenciálně způsobit problémy s výkonem. V takovém případě zvažte rozdělení obrázku na dlaždice a jejich načtení do mapy jako vrstvy dlaždic.

Přidání vrstvy obrázků

Následující kód překryje obrázek mapy Newark, New Jersey z roku 1922 na mapě. Tento obrázek se přidá do drawable složky projektu. Vrstva obrázku je vytvořena nastavením obrázku a souřadnic pro čtyři rohy ve formátu [Top Left Corner, Top Right Corner, Bottom Right Corner, Bottom Left Corner]. Přidání vrstev obrázků pod vrstvu label je často žádoucí.

//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")

Alternativně je možné zadat adresu URL obrázku hostovaného v online režimu. Pokud ale váš scénář umožňuje, přidejte image do složky projektů drawable , načte se rychleji, protože image je místně dostupná a není potřeba ji stáhnout.

//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")

Následující snímek obrazovky ukazuje mapu Newarku, New Jersey z roku 1922 překryvnou pomocí vrstvy obrázku.

Mapa Newarku, New Jersey z roku 1922 překrytí pomocí vrstvy obrázku

Import souboru KML jako překrytí země

Tato ukázka ukazuje, jak přidat základní informace KML jako vrstvu obrázku na mapě. Překryvy země KML poskytují severní, jižní, východní a západní souřadnice a proti směru hodinových ručiček. Vrstva obrázku ale očekává souřadnice pro každý roh obrázku. Základní překryv KML v této ukázce je určen pro katedrálu Chartres a pochází z 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>

Kód používá statickou getCoordinatesFromEdges metodu ImageLayer z třídy. Tato metoda vypočítá čtyři rohy obrázku pomocí informací o severní, jižní, východní, západní a rotaci překrytí země 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")

Následující snímek obrazovky ukazuje mapu s překrytím země KML pomocí vrstvy obrázku.

Mapa s překrytím země KML pomocí vrstvy obrázku

Tip

getPixels Pomocí a getPositions metod třídy vrstvy obrázku můžete převést mezi geografickými souřadnicemi umístěné vrstvy obrázku a souřadnicemi obrazových bodů místního obrázku.

Další kroky

Další informace o možnostech překrytí obrázků na mapě najdete v následujícím článku.