一切就绪!

着手开发前,请先阅读我们的开发者文档

激活 Google Maps Android API

为帮助您起步,我们将引导您在 Google Developers Console 中先完成几项任务:

  1. 创建或选择项目
  2. 激活 Google Maps Android API
  3. 创建相应密钥
继续

底面叠层

底面叠层是与纬度/经度坐标绑定的图像叠层,因此它们会在您拖动或缩放地图时移动。

代码示例

GitHub 上的 ApiDemos 存储区包含一个示例,展示如何使用底面叠层:

简介

底面叠层是固定在地图上的图像。 不同于[标记],底面叠层朝向地球表面而非屏幕的相反方向,因此旋转、倾斜或缩放地图将会改变图像的朝向。

如果您想将单个图像固定在地图上的某一区域,便可使用底面叠层。 如果您想添加大量图像来覆盖地图的一大部分,应考虑使用图块叠层

添加叠层

如需添加 GroundOverlay,请创建一个同时定义图像和位置的 GroundOverlayOptions 对象。

作为可选步骤,您可以指定影响图像在地图上定位的附加设置。 在定义了必要的选项后,将该对象传递给 GoogleMap.addGroundOverlay() 方法,以向地图添加图像。

addGroundOverlay() 方法返回 GroundOverlay 对象;如果您想稍后修改该对象,应该保留对其的引用。

注:向地图添加图像后,将被转换成边为 2 的次方的图像。 您可以通过使用尺寸为 2 的次方(例如 128x512 或 1024x1024)的原始图像来避免这种转换。

逐步操作:

  1. 实例化一个新的 GroundOverlayOptions 对象
  2. 将图像指定为 BitmapDescriptor
  3. 使用所提供的其中一种方法设置图像的位置:
    • position(LatLng location, float width, float height)
    • position(LatLng location, float width)
    • positionFromBounds(LatLngBounds bounds)
  4. 根据需要设置 transparency 等可选属性。
  5. 调用 GoogleMap.addGroundOverlay() 以向地图添加图像。

下例展示了如何向现有 GoogleMap 对象添加底面叠层。

LatLng NEWARK = new LatLng(40.714086, -74.228697);

GroundOverlayOptions newarkMap = new GroundOverlayOptions()
        .image(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922))
        .position(NEWARK, 8600f, 6500f);
map.addGroundOverlay(newarkMap);

如果您在向地图添加底面叠层后想要更改或删除它,请务必保留 GroundOverlay 对象。 稍后您可以通过更改该对象来修改叠层。

LatLng NEWARK = new LatLng(40.714086, -74.228697);

GroundOverlayOptions newarkMap = new GroundOverlayOptions()
        .image(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922))
        .position(NEWARK, 8600f, 6500f);

// Add an overlay to the map, retaining a handle to the GroundOverlay object.
GroundOverlay imageOverlay = map.addGroundOverlay(newarkMap);

删除叠层

您可以通过 GroundOverlay.remove() 方法删除底面叠层。

imageOverlay.remove();

更改叠层

向地图添加底面叠层图像后,您可以通过 GroundOverlay.setImage(BitmapDescriptor) 方法对其进行更改。

// Add an overlay, retaining a handle to the GroundOverlay object.
GroundOverlay imageOverlay = map.addGroundOverlay(newarkMap);

// Update the GroundOverlay with a new image of the same dimensions.
imageOverlay = map.setImage(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1975));

setImage() 方法将用另一幅相同尺寸的图像替换现有图像。

定位底面叠层

指定底面叠层位置的方法有两种:

  • 使用 LatLng 使叠层居中,并利用尺寸(单位:米)来指定图像的大小

  • 使用 LatLngBounds 指定图像的东北角和西南角

您必须在向地图添加底面叠层前指定它的位置。

使用位置定位图像

当您添加图像时,需要指定固定锚点的 LatLng 以及叠层的宽度(单位:米)。 anchor 默认值为图像的中心。

作为可选步骤,您可以提供叠层的高度(单位:米)。 如果您不提供叠层的高度,系统将自动进行计算以保持图像的比例。

以下代码用于在 40.714086, -74.228697 这个宽 8.6 公里、高 6.5 公里的位置放置一幅图像。 图像固定在左下角。

GroundOverlayOptions newarkMap = new GroundOverlayOptions()
        .image(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922))
        .anchor(0, 1)
        .position(new LatLng(40.714086, -74.228697), 8600f, 6500f);

使用 LatLngBounds 定位图像

您可以提供一个包含图像的 LatLngBoundsLatLngBounds 设置图像的东北角和西南角。 在地图上绘制图像时,图像将进行旋转以适合边界。 如果边界不符合原始纵横比,图像将发生歪斜。

以下代码可在地图上放置一幅图像,其西南角朝向40.712216,-74.22655,其东北角朝向 40.773941, -74.12544

LatLngBounds newarkBounds = new LatLngBounds(
        new LatLng(40.712216, -74.22655),       // South west corner
        new LatLng(40.773941, -74.12544));      // North east corner
GroundOverlayOptions newarkMap = new GroundOverlayOptions()
        .image(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922))
        .positionFromBounds(newarkBounds);

处理底面叠层事件

默认情况下,底面叠层无法点击。 您可以通过调用 GroundOverlay.setClickable(boolean) 启用和停用可点击性。

使用 OnGroundOverlayClickListener 侦听可点击的底面叠层上的点击事件。 如需在地图上设置该侦听器,请调用 GoogleMap.setOnGroundOverlayClickListener(OnGroundOverlayClickListener)

当用户点击某个底面叠层时,您将收到一个 onGroundOverlayClick(GroundOverlay) 回调。

发送以下问题的反馈:

此网页
Google Maps Android API
Google Maps Android API
需要帮助?请访问我们的支持页面