3D 地图控件和探索

控件概览

通过 Maps JavaScript API 中的 Photorealistic 3D Maps 显示的地图包含界面元素,可支持用户与地图互动。这些元素称为“控件”,您可以选择在界面中添加这些控件,也可以不添加。如果您禁止显示界面控件,用户仍然可以使用键盘快捷键在地图中导航。

Maps JavaScript API 中的仿真 3D 地图还支持使用预设的摄像机路径引导用户浏览地图。您可以自定义和组合这些路径,以打造丰富的 3D 体验。

探索控件

下图显示了 Maps JavaScript API 中的逼真 3D 地图会默认显示的一组控件:

显示控件的地图图片

下面列出了 Maps JavaScript 中的仿真 3D 地图中的一整套控件:

  • 缩放控件:可显示“+”和“-”按钮,用于更改地图的缩放级别。
  • 借助倾斜度控制,您可以更改摄像头的倾斜度。
  • 借助旋转控件,您可以更改相机的方向。
  • 移动控件会显示“←”“→”“↑”和“↓”按钮,用于更改地图中心。

以下代码示例演示了如何切换探索控件:

JavaScript

const map = new Map3DElement({
  center: { lat: 37.819852, lng: -122.478549, altitude: 2000 },
  tilt: 75,
  heading: 330,
  mode: MapMode.SATELLITE,
  defaultUIDisabled: true,
});

HTML

<gmp-map-3d
  mode="hybrid"
  range="639.274301042242"
  tilt="64.92100184857551"
  center="34.0768990953219,-118.47450491266041,292.9794737933403"
  heading="-61.02026752077781"
  default-ui-disabled
></gmp-map-3d>

预设相机路径

Maps JavaScript 中的仿真 3D 地图提供了两个预设的摄像头路径。您可以通过更改动画时长(从而增加或减少速度)或组合使用动画来自定义摄像头路径,以打造更具电影质感的体验。

Maps JavaScript 中的仿真 3D 地图支持以下相机路径:

  • flyCameraTo 动画从地图中心飞到指定目的地。
  • flyCameraAround 动画围绕地图上的某个点旋转指定次数。

这两个可用路径可以组合使用,以飞行到某个地图注点、围绕该地图注点旋转,然后在指定时停止。

前往

以下代码示例演示了如何为相机添加动画效果,使其飞向某个位置:

const map = document.querySelector('gmp-map-3d');

async function init() {
  await google.maps.importLibrary('maps3d');

  map.flyCameraTo({
    endCamera: {
      center: { lat: 37.6191, lng: -122.3816 },
      tilt: 67.5,
      range: 1000
    },
    durationMillis: 5000
  });
}

四处飞行

以下代码示例演示了如何为相机添加动画效果,使其围绕某个位置飞行:

const map = document.querySelector('gmp-map-3d');

async function init() {
  await google.maps.importLibrary('maps3d');

  map.flyCameraAround({
    camera,
    durationMillis: 60000,
    rounds: 1
  });
}

组合动画

以下代码示例演示了如何组合动画以将相机飞到某个位置,然后在第一个动画结束时围绕该位置旋转:

const map = document.querySelector('gmp-map-3d');

async function init() {
  await google.maps.importLibrary('maps3d');

  map.flyCameraTo({
    endCamera: flyToCamera,
    durationMillis: 5000,
  });

  map.addEventListener('gmp-animation-end', () => {
    map.flyCameraAround({
      camera: flyToCamera,
      durationMillis: 60000,
      rounds: 1
    });
  }, {once: true});
}

后续步骤