Sobes.tech
Back to tasks
Junior — Middle+
135

Функция для анимированного отображения автомобилей на карте

Companies where asked:

ЯндексЯндекс
Get help with live coding in real time with Sobes Copilot
Task condition

Требуется реализовать метод displayCars, который отвечает за визуализацию машин на карте. Метод получает массив объектов Car. Каждый объект Car содержит уникальный идентификатор, координаты и угол поворота. Необходимо:

  • добавить новые автомобили, которых ещё нет на карте;
  • переместить уже отображённые машины к их новым координатам с плавной анимацией (для этого используется вызов updatePlacemark);
  • удалить с карты те автомобили, которые присутствуют в текущем наборе маркеров, но отсутствуют в полученном списке.

Никакой «грубой» реализации без анимации не допускается – нельзя просто удалить все маркеры и заново их добавить.

class MapController {
  // можно дописать fields если необходимо
  final MapPlugin plugin;

  MapController(this.plugin);

  void displayCars(List<Car> cars) {
    /// Необходимо написать функцию анимированного движения машинок по карте.
    /// Анимированное перемещение осуществляется вызовом updatePlacemark
    /// Наивное решение без анимации — удалить все ранее добавленные машинки и отобразить новые.
  }

  // считаем, что функция реализована
  Geometry _createGeometry(Car car) {/*...*/}
}

typedef MapPlacemarkId = int;

abstract class MapPlugin {
  // считаем, что функция реализована
  MapPlacemarkId addPlacemark(Geometry geometry);

  // считаем, что функция реализована
  void removePlacemark(MapPlacemarkId placemark);

  // считаем, что функция реализована
  void updatePlacemark(MapPlacemarkId placemark, Geometry geometry);
}

typedef CarId = String;

class Car {
  final CarId id;

  // getters [coordinate.x], [coordinate.y]
  final math.Point<double> coordinate;
  final double course;

  const Car({
    required this.id,
    required this.coordinate,
    required this.course,
  });
}

class Geometry {
  final double lat;
  final double lon;
  final double course;
  final String image;

  const Geometry({
    required this.lat,
    required this.lon,
    required this.course,
    required this.image,
  });
}