设置地图样式

请选择平台Android iOS JavaScript

本指南介绍了在 iOS 应用中跟踪行程时,您可以采用哪些方式来设置地图样式。

准备工作

在设置地图样式之前,您需要有一个已实现以下功能的消费者应用:

您还需要设置 Consumer SDK 所需的后端服务,并设置 Consumer SDK。如需了解详情,请参阅设置 Consumer SDK什么是 Fleet Engine?

地图自定义设置

可用的自定义设置如下:

  • 设置地图样式:您可以使用云端地图样式设置来设置地图颜色、折线和其他地图要素的样式。请参阅设置地图样式

  • 调整相机缩放:您可以使用内置功能或设置自己的相机选项,以便专注于历程。请参阅 调整相机缩放倍数以专注于行程

  • 自定义标记和折线:您可以向应用设计添加自定义标记和路线 折线。借助这些设计元素,您的消费者应用可以显示车辆路线的动态预览。请参阅 自定义标记自定义折线

    SDK 通过 consumerMapStyleCoordinator 属性提供这些选项。您可以通过 GMTCMapView 类使用此属性。

使用云端地图样式设置来设置地图样式

使用云端地图样式设置自定义地图组件的外观。您可以在 Google Cloud 控制台上为使用 Google 地图的所有应用创建和修改地图样式,无需更改任何代码。 如需了解详情,请在 云端地图样式设置中选择您的平台。

ConsumerMapViewConsumerMapFragment 类均支持云端地图样式设置。 如需使用云端地图样式设置,请确保所选的地图渲染器为 LATEST。以下部分展示了如何在项目中使用云端地图样式设置的示例。

ConsumerMapView

如需在 ConsumerMapView 中使用云端地图样式设置,请在 mapId 上设置 GoogleMapOptions 字段,并传递 GoogleMapOptions获取 getConsumerGoogleMapAsync(ConsumerMapReadyCallback, Fragment, GoogleMapOptions)getConsumerGoogleMapAsync(ConsumerMapReadyCallback, FragmentActivity, GoogleMapOptions)

示例

Java

public class SampleAppActivity extends AppCompatActivity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ConsumerMapView mapView = findViewById(R.id.consumer_map_view);

    if (mapView != null) {
      GoogleMapOptions optionsWithMapId = new GoogleMapOptions().mapId("map-id");
      mapView.getConsumerGoogleMapAsync(
          new ConsumerMapReadyCallback() {
            @Override
            public void onConsumerMapReady(@NonNull ConsumerGoogleMap consumerGoogleMap) {
              // ...
            }
          },
          /* fragmentActivity= */ this,
          /* googleMapOptions= */ optionsWithMapId);
    }
  }
}

Kotlin

class SampleAppActivity : AppCompatActivity() {
  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    val mapView = findViewById(R.id.consumer_map_view) as ConsumerMapView

    val optionsWithMapId = GoogleMapOptions().mapId("map-id")
    mapView.getConsumerGoogleMapAsync(
      object : ConsumerGoogleMap.ConsumerMapReadyCallback() {
        override fun onConsumerMapReady(consumerGoogleMap: ConsumerGoogleMap) {
          // ...
        }
      },
      /* fragmentActivity= */ this,
      /* googleMapOptions= */ optionsWithMapId)
  }
}

ConsumerMapFragment

您可以通过以下两种方式在 ConsumerMapFragments 中使用云端地图样式设置:

  • 使用 XML 静态设置。
  • 使用 newInstance 动态设置。

使用 XML 静态设置

如需在 ConsumerMapFragment中使用 XML 设置云端地图样式设置,请添加具有指定 mapIdmap:mapId XML 属性。请参阅以下示例:

<fragment
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:map="http://schemas.android.com/apk/res-auto"
    android:name="com.google.android.libraries.mapsplatform.transportation.consumer.view.ConsumerMapFragment"
    android:id="@+id/consumer_map_fragment"
    map:mapId="map-id"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

使用 newInstance 动态设置

如需在 ConsumerMapFragment 中使用 newInstance 设置云端地图样式设置,请在 GoogleMapOptions 上设置 mapId 字段,并传递 GoogleMapOptions 以获取 newInstance。请参阅以下示例:

Java

public class SampleFragmentJ extends Fragment {

  @Override
  public View onCreateView(
      @NonNull LayoutInflater inflater,
      @Nullable ViewGroup container,
      @Nullable Bundle savedInstanceState) {

    final View view = inflater.inflate(R.layout.consumer_map_fragment, container, false);

    GoogleMapOptions optionsWithMapId = new GoogleMapOptions().mapId("map-id");
    ConsumerMapFragment consumerMapFragment = ConsumerMapFragment.newInstance(optionsWithMapId);

    getParentFragmentManager()
        .beginTransaction()
        .add(R.id.consumer_map_fragment, consumerMapFragment)
        .commit();

    consumerMapFragment.getConsumerGoogleMapAsync(
        new ConsumerMapReadyCallback() {
          @Override
          public void onConsumerMapReady(@NonNull ConsumerGoogleMap consumerGoogleMap) {
            // ...
          }
        });

    return view;
  }
}

Kotlin

class SampleFragment : Fragment() {
  override fun onCreateView(
    inflater: LayoutInflater,
    container: ViewGroup?,
    savedInstanceState: Bundle?): View? {

    val view = inflater.inflate(R.layout.consumer_map_fragment, container, false)

    val optionsWithMapId = GoogleMapOptions().mapId("map-id")
    val consumerMapFragment = ConsumerMapFragment.newInstance(optionsWithMapId)

    parentFragmentManager
      .beginTransaction()
      .add(R.id.consumer_map_fragment, consumerMapFragment)
      .commit()

    consumerMapFragment.getConsumerGoogleMapAsync(
      object : ConsumerMapReadyCallback() {
        override fun onConsumerMapReady(consumerGoogleMap: ConsumerGoogleMap) {
          // ...
        }
      })

    return view
  }
}

调整镜头缩放倍数以专注于行程

在行程共享会话期间,用户最好能看到车辆在行程中的较大视图,而不是车辆在路线上的特写视角。为此,您可以使用内置的 AutoCamera 或自行自定义镜头行为来调整镜头缩放级别,如下所示:

  • AutoCamera:如果您想使用 AutoCamera,则无需执行任何操作。默认情况下,镜头会跟踪行程。

  • 自定义镜头行为:如需自定义镜头行为, 您必须停用 AutoCamera,然后进行自定义。

AutoCamera 默认将镜头居中

Consumer SDK 提供了一个 AutoCamera 功能,该功能默认在 Maps SDK 的内置我的位置 按钮上启用。镜头会缩放以专注于行程路线和下一个行程航点。

如果您想使用 AutoCamera,请确保已启用该功能。如需了解详情,请参阅 allowCameraAutoUpdate

`AutoCamera`

如需详细了解 Maps SDK 的 我的位置 按钮,请参阅 适用于 iOS 的 Maps SDK 文档中的“我的位置”按钮

自定义镜头行为

如需更好地控制镜头行为,您可以停用 AutoCamera 并自定义镜头行为。

使用 AllowCameraAutoUpdate 属性停用或启用AutoCamera

如需了解更多镜头自定义设置,请参阅适用于 iOS 的 Maps SDK 文档中的 移动镜头

后续步骤

在 iOS 中跟踪行程