Класс ConsumerMapStyle
имеет методы установки и получения, которые обеспечивают динамическую настройку маркеров и полилиний. Этот класс предоставляется асинхронно с помощью метода ConsumerController.getConsumerMapStyle()
.
Настройка пользовательского интерфейса сохраняется при смене устройства и остается в силе до тех пор, пока ConsumerController
не будет отсоединен.
Пользовательские маркеры
Метод установки типа маркера и его свойств — ConsumerMapStyle.setMarkerStyleOptions()
. Параметры пользовательского маркера переопределяют значения по умолчанию, предоставленные Consumer SDK. Чтобы восстановить значения по умолчанию, вызовите setMarkerStyleOptions()
используя значение null для параметра MarkerOptions
. Получите активные MarkerOptions
с помощью getMarkerStyleOptions()
.
Типы маркеров
Для настройки доступны следующие маркеры:
-
TRIP_PICKUP_POINT
-
TRIP_DROPOFF_POINT
-
TRIP_INTERMEDIATE_DESTINATION
-
TRIP_VEHICLE
TRIP_PICKUP_POINT
и TRIP_DROPOFF_POINT
отображаются во время мониторинга поездки.
TRIP_VEHICLE
отображается во время мониторинга поездки. Значок маркера не меняется в зависимости от фактического типа транспортного средства для поездки. Consumer SDK обновляет вращение значка TRIP_VEHICLE
во время мониторинга поездки, чтобы имитировать поведение реального транспортного средства во время его движения по маршруту.
Параметры маркера
Настраиваемые свойства, доступные для каждого маркера, представляют собой набор свойств, предоставляемых Google Maps MarkerOptions
.
MarkerOptions
создается с использованием его конструктора, а настраиваемые свойства указываются с использованием методов стиля Setter. Для каждого свойства предусмотрены значения по умолчанию, поэтому вам нужно указать только собственные значения.
Вы можете отключить маркер, установив для visible
значение false
. Должно быть предоставлено достаточно данных, чтобы вы могли использовать вместо него собственный элемент пользовательского интерфейса.
Пример
Ява
// Initializing marker options.
consumerController
.getConsumerMapStyle()
.addOnSuccessListener(
consumerMapStyle -> {
consumerMapStyle.setMarkerStyleOptions(
MarkerType.TRIP_VEHICLE,
new MarkerOptions()
.visible(false));
});
// Reset marker options to default values.
consumerMapStyle.setMarkerStyleOptions(MarkerType.TRIP_VEHICLE, null);
Котлин
// Initializing marker options.
consumerController
.getConsumerMapStyle()
.addOnSuccessListener({ consumerMapStyle ->
consumerMapStyle.setMarkerStyleOptions(MarkerType.TRIP_VEHICLE, MarkerOptions().visible(false))
})
// Reset marker options to default values.
consumerMapStyle.setMarkerStyleOptions(MarkerType.TRIP_VEHICLE, null)
Пользовательские полилинии
Настройка полилинии задается с помощью метода ConsumerMapStyle.setPolylineStyleOptions
. Установка параметров пользовательской полилинии переопределяет значения по умолчанию, предоставленные Consumer SDK. Значения по умолчанию можно восстановить, вызвав setPolylineStyleOptions
с нулевым значением параметра PolylineOptions
. Активные PolylineOptions
можно получить с помощью метода getPolylineStyleOptions
.
Типы полилиний
Для настройки доступны следующие типы полилиний:
-
ACTIVE_ROUTE
-
REMAINING_ROUTE
ACTIVE_ROUTE
и REMAINING_ROUTE
отображаются во время мониторинга поездки и представляют маршрут транспортного средства .
Свойства полилинии
Настраиваемые свойства, доступные для каждой полилинии, предоставляются Google Maps PolylineOptions
. PolylineOptions
создается с использованием его конструктора, а настроенные свойства задаются с помощью методов стиля Setter. Для каждого свойства предусмотрены значения по умолчанию, поэтому вам нужно указать только собственные значения. Вы можете отключить полилинию, установив для параметра visible
значение false
.
Пример
Ява
// Initializing polyline style options.
consumerController
.getConsumerMapStyle()
.addOnSuccessListener(
consumerMapStyle -> {
consumerMapStyle.setPolylineStyleOptions(
PolylineType.ACTIVE_ROUTE,
new PolylineOptions()
.visible(false));
});
// Reset polyline options to default values.
consumerMapStyle.setPolylineStyleOptions(PolylineType.ACTIVE_ROUTE, null);
Котлин
// Initializing polyline options.
consumerController
.getConsumerMapStyle()
.addOnSuccessListener({ consumerMapStyle ->
consumerMapStyle.setPolylineStyleOptions(
PolylineType.ACTIVE_ROUTE,
PolylineOptions().visible(false)
)
})
// Reset polyline options to default values.
consumerMapStyle.setPolylineStyleOptions(PolylineType.ACTIVE_ROUTE, null)
Активный и оставшийся маршрут
Если включена функция «Прогресс поездки и заказа», ваше приложение может настроить взаимодействие с пользователем с помощью полилиний, показывающих активный и оставшийся маршрут ваших транспортных средств.
Активный маршрут — это путь, по которому в данный момент движется транспортное средство, чтобы достичь следующей путевой точки в активной поездке потребителя. Оставшийся маршрут — это путь, по которому транспортное средство проедет мимо активного маршрута. Если активная путевая точка маршрута является последней путевой точкой поездки, оставшийся маршрут не существует.
Активные и оставшиеся полилинии можно настроить, а видимость контролировать с помощью вашего приложения. По умолчанию активный маршрут виден, а оставшийся маршрут не виден.
Пример
Ява
// Initializing polyline options.
consumerController
.getConsumerMapStyle()
.addOnSuccessListener(
consumerMapStyle -> {
consumerMapStyle.setPolylineStyleOptions(
PolylineType.ACTIVE_ROUTE,
new PolylineOptions()
.color(Color.BLUE));
consumerMapStyle.setPolylineStyleOptions(
PolylineType.REMAINING_ROUTE,
new PolylineOptions()
.color(Color.BLACK)
.width(5)
.visible(true));
});
// Reset polyline options to default values.
consumerMapStyle.setPolylineStyleOptions(PolylineType.ACTIVE_ROUTE, null);
consumerMapStyle.setPolylineStyleOptions(PolylineType.REMAINING_ROUTE, null);
Котлин
// Initializing polyline options.
consumerController
.getConsumerMapStyle()
.addOnSuccessListener({ consumerMapStyle ->
{
consumerMapStyle.setPolylineStyleOptions(
PolylineType.ACTIVE_ROUTE,
PolylineOptions().color(Color.BLUE)
)
consumerMapStyle.setPolylineStyleOptions(
PolylineType.REMAINING_ROUTE,
PolylineOptions().color(Color.BLACK).width(5).visible(true)
)
}
})
// Reset polyline options to default values.
consumerMapStyle.setPolylineStyleOptions(PolylineType.ACTIVE_ROUTE, null)
consumerMapStyle.setPolylineStyleOptions(PolylineType.REMAINING_ROUTE, null)
Полилинии с учетом трафика
По умолчанию слой трафика полилинии отключен. Когда эта опция включена, сегменты, представляющие участки необычного трафика, рисуются над ломаной линией маршрута по z-индексу PolylineOptions.getZIndex() плюс смещение в зависимости от условий трафика.
Условия дорожного движения представлены в виде одного из четырех типов скорости . Вы можете настроить цвет для каждого типа скорости.
Чтобы включить «полилинии с учетом трафика», необходимо создать объект TrafficStyle
, который затем будет передан в ConsumerMapStyle
путем вызова setPolylineTrafficStyle()
.
Пример
Ява
// TrafficStyle is part of the Consumer SDK.
TrafficStyle trafficStyle = TrafficStyle.builder()
.setTrafficVisibility(true)
.setTrafficColor(SpeedType.NO_DATA, Color.GREY)
.setTrafficColor(SpeedType.NORMAL_VALUE, Color.BLUE)
.setTrafficColor(SpeedType.SLOW_VALUE, Color.ORANGE)
.setTrafficColor(SpeedType.TRAFFIC_JAM, Color.RED)
.build();
consumerMapStyle.setPolylineTrafficStyle(PolylineType.ACTIVE_ROUTE, trafficStyle);
Котлин
// TrafficStyle is part of the Consumer SDK.
val trafficStyle =
TrafficStyle.builder()
.setTrafficVisibility(true)
.setTrafficColor(SpeedType.NO_DATA, Color.GREY)
.setTrafficColor(SpeedType.NORMAL_VALUE, Color.BLUE)
.setTrafficColor(SpeedType.SLOW_VALUE, Color.ORANGE)
.setTrafficColor(SpeedType.TRAFFIC_JAM, Color.RED)
.build()
consumerMapStyle.setPolylineTrafficStyle(PolylineType.ACTIVE_ROUTE, trafficStyle)
Настройка масштаба камеры, чтобы сосредоточиться на путешествии
Кнопка «Мое местоположение» по умолчанию, встроенная в Maps SDK, центрирует камеру по местоположению устройства. Если есть активный сеанс «Поездка и прогресс заказа», возможно, вы захотите отцентрировать камеру, чтобы сфокусироваться на путешествии, а не на местоположении устройства.
Потребительский SDK для встроенного решения Android: AutoCamera
Чтобы вы могли сосредоточиться на путешествии, а не на местоположении устройства, Consumer SDK предоставляет функцию AutoCamera, которая включена по умолчанию. Камера масштабируется, чтобы сфокусироваться на маршруте «Поездка и ход выполнения заказа» и следующей путевой точке поездки.
Настройка поведения камеры
Если вам требуется больший контроль над поведением камеры, вы можете отключить или включить AutoCamera с помощью ConsumerController.setAutoCameraEnabled()
.
ConsumerController.getCameraUpdate()
возвращает рекомендуемые границы камеры на данный момент. Затем вы можете предоставить этот CameraUpdate
в качестве аргумента GoogleMap.moveCamera()
или GoogleMap.animateCamera()
.
Стилизация облачных карт
Классы ConsumerMapView
и ConsumerMapFragment
поддерживают стили облачных карт . Чтобы использовать стили облачных карт, убедитесь, что выбранный модуль визуализации карт — LATEST
. В следующих примерах показано, как использовать стили облачных карт в вашем проекте.
ConsumerMapView
Чтобы использовать стиль облачных карт в ConsumerMapView
, установите поле mapId
в GoogleMapOptions
и передайте GoogleMapOptions
в getConsumerGoogleMapAsync(ConsumerMapReadyCallback, Fragment, GoogleMapOptions) или getConsumerGoogleMapAsync(ConsumerMapReadyCallback, FragmentActivity, GoogleMapOptions).
Пример
Ява
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);
}
}
}
Котлин
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
Чтобы использовать стиль облачных карт с XML в ConsumerMapFragment
, добавьте XML-атрибут map:mapId
с указанным mapId
. См. следующий пример:
<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
Чтобы использовать стиль облачных карт с помощью newInstance
в ConsumerMapFragment
, установите поле mapId
в GoogleMapOptions
и передайте GoogleMapOptions
в newInstance
. См. следующий пример:
Ява
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;
}
}
Котлин
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
}
}