Использование DummyLocationManager как повысить точность и оперативность отображения объекта на карте?

Рейтинг: 1Ответов: 0Опубликовано: 08.02.2023

На устройстве используется отдельный модуль высокоточной навигации. Используем режим UserLocation - UserLocationObjectListener с DummyLocationManager -> LocationManager - в который передаем LocationListener и прочие параметры:

val locationListener = object : LocationListener {

        override fun onLocationUpdated(location: Location) {
            //todo
        }

        override fun onLocationStatusUpdated(locationStatus: LocationStatus) {
            //todo
        }
    }
val manager = MapKitFactory.getInstance().createDummyLocationManager()
MapKitFactory.getInstance().setLocationManager(manager)
manager.subscribeForLocationUpdates(
            0.01,
            500L,
            0.0,
            true,
            FilteringMode.OFF,
            locationListener
        )

Модуль навигации передает координаты 1 раз в секунду в формате GPHDT и GPGGA (это максимальная скорость передачи пакетов содержащих навигационные данные) Передаем эти данные Location в locationManager

val location = Location(
                    MapPoint(lat, lon),
                    2.5, //радиус точности
                    altitude, //высота
                    null,
                    heading, //вектор направления объекта
                    null,
                    Date().time,
                    relativeTime // время в пакете навигационных данных
                )
 manager.setLocation(location)

Карта настроена следующим образом:

mvYandexMap.map.isZoomGesturesEnabled = true
mvYandexMap.map.isTiltGesturesEnabled = false
mvYandexMap.map.set2DMode(true)
mvYandexMap.map.isModelsEnabled = false
mvYandexMap.map.poiLimit = 0
mvYandexMap.map.mapType = MapType.NONE
mvYandexMap.map.mode = MapMode.DRIVING                

Есть две проблемы:

  1. Объект отрисовывается не очень оперативно, при поступлении новых координат и вызове метода setLocation(location), на карте перемещение объекта отображаются с задержкой - задержка разная - особенно это проявляется если объект изменим свое положение к примеру на 10-15 см, в таком случае порой объект на карте может и вовсе не изменить свое местоположение. Как добиться максимально оперативного изменения местоположения объекта на карте и максимально точного в сантиметровом диапазоне? Может ли на это влиять параметры метода subscribeForLocationUpdates(desiredAccuracy, minTime, minDistance) совместно с параметрами метода setLocation(accuracy,speed,absoluteTimestamp,relativeTimestamp), как конкретно они взаимосвязаны между собой, особенно параметры самих методов , к примеру minTime с absoluteTimestamp,relativeTimestamp, если вообще взаимосвязаны?

  2. Координаты приходят с интервалом в 1 секунду, но объект перемещается по карте от предыдущей точки к новой не плавно а рывками. Есть способ сделать плавное перемещение средствами библиотеки? Как параметры влияют на это, кроме того что координаты передаются 1 раз в секунду?

Спасибо.

Ответы

Ответов пока нет.