共用方式為


在地圖中新增影像圖層 (Android SDK)

注意

Azure 地圖服務 Android SDK 淘汰

適用於 Android 的 Azure 地圖服務原生 SDK 現已被取代,將於 3/31/25 淘汰。 若要避免服務中斷,請在 3/31/25 之前遷移至 Azure 地圖服務 Web SDK。 如需詳細資訊,請參閱 Azure 地圖服務 Android SDK 移轉指南 (部分機器翻譯)。

本文說明如何在一組固定座標上覆蓋影像。 以下是可覆蓋在地圖上不同影像類型的一些範例:

  • 無人機所擷取的影像
  • 建物平面圖
  • 歷史性或其他特製化地圖影像
  • 施工現場的藍圖

提示

影像圖層可讓您輕鬆快速地在地圖上覆蓋影像。 請注意,大型影像可能會耗用大量記憶體,而且可能會導致效能問題。 在此情況下,請考慮將影像分拆成圖格,再將圖格載入地圖作為圖格圖層。

新增映像圖層

下列程式碼在地圖上覆蓋 1922 年紐澤西紐瓦克地圖的影像。 此影像會新增至專案的 drawable 資料夾。 建立影像圖層的方式是以格式 [Top Left Corner, Top Right Corner, Bottom Right Corner, Bottom Left Corner] 設定四個角落的影像和座標。 通常會在圖層下方 label 新增影像圖層。

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

或者,也可以指定線上裝載的影像 URL。 不過,如果您的案例允許,請將影像新增至您的專案 drawable 資料夾中,這樣載入速度會更快,因為影像可在本機使用且無需下載。

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

下列螢幕擷取畫面顯示了使用影像圖層重疊的 1922 年紐澤西州紐瓦克地圖。

使用 1922 年影像圖層來重疊的紐澤西州紐瓦克的地圖

將 KML 檔案匯入為地面重疊

此範例說明如何在地圖上覆蓋 KML 地面重疊資訊來作為影像圖層。 KML 地面重疊會提供東西南北座標,以及逆時鐘旋轉資訊。 但是,影像圖層預期影像的每個角落都有座標。 此範例中的 KML 地面重疊是沙特爾主教座堂,其資料來源是 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>

程式碼會使用 ImageLayer 類別中的靜態 getCoordinatesFromEdges 方法。 此方法會使用 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")

下列螢幕擷取畫面顯示使用影像圖層來重疊 KML 地面重疊的地圖。

使用影像圖層來重疊 KML 地面重疊的地圖

提示

使用影像圖層類別的 getPixelsgetPositions 方法,在定位影像圖層的地理座標與區域影像像素座標之間轉換。

下一步

請參閱下列文章,以深入了解在地圖上重疊影像的方法。